組み込み技術者になりました

ひさかたぶりのブログです。
この2ヶ月で、大きく環境が変化したのでそのことについて書き連ねてみます。

この4月に部署異動となり、Web アプリ開発者から組み込み技術者になりました。

バタバタしている間に本日、6月に突入し、もう2ヶ月か…なんかやばい。
…と思い、ブログを書いてみんとす。

車載ソフトウェア開発

いわゆる、「車載ソフトウェア開発」をすることになりました。
カーエレクトロニクスという分野ですね。

組み込みも分からない、クルマも分からない、C言語も知らない。
そういう最悪の状況です。

Webアプリ から 組み込み へ

10数年ほど、ずっと Java で Web アプリ開発をしてきたわけです。
それがいきなりの畑違いの組み込みに異動です。
ソフトウェア開発といえば同じですが、やっていることは全く異なります。

業務知識、ITスキルともに素人レベルまで落ち込みました。

ハードウェアやネットワーク、そういった物理に近いところでの会話が圧倒的に多くなりました。

Web アプリやら、Java やらやっていると、そういうのは全く意識しないので
いまさらながらに基本的なところから勉強しなおしています。

組み込み開発ではリソースの制約がきびしく、メモリがたった数百KBだったりします。
(ヒープ圧迫してるから、メモリ割り当て 2GB に変更…なんて、異なる世界)

Write once, run anywhere

リソースの制約もそうですが、ハードウェア(マイコン)ごとにコンパイラが違うというのが驚きでした。 コンパイラだけでなく、ソースコードもハードウェア構成によって調整が必要です。

ハードウェアを意識して、プログラミングする必要があります。
リソースも当然気にしないといけない。
これは大変だと。

Java では「Write once, run anywhere」というキーフレーズを目にしてたのですが、
JVM の上で動くから環境非依存でプログラムを使いまわせるよ…と軽く考えていました。

実際にマイコン制御やC言語のことをきちんと学んでみると、run anywhere のスゴさが実感できました。
物理とかハードウェアとかを関心事から除外して、プログラミングできるのはすばらしい。

多くの Java 技術者は「Write once, run anywhere」を理解していないだろうな。

ソフトウェアをインストールするときに gcc や make するのもこの辺が絡んでいるのかなと
素人的に思っています(ちゃんと調べてない)。

自分が組み込みをやる意義

Webアプリでアーキテクチャ構築とかを長年やってきたノウハウを一応持っているつもりです。

Webアプリ開発では当然のことが、組み込み開発ではやっていなかったりします。
たとえば、コンポーネント設計、フレームワーク活用、そういったものが組み込みにはなじみがないようです。
共通化や再利用がまだまだ進んでいないようです。

自分が持っていて、組み込み技術者が持っていないもの。

それがなんであるかを早く把握して、そのギャップを活かすこと。
自分しか持っていない価値を組み込み開発にフィードバックすることが求められているのだと思います。

まだまだ「郷に入っては、郷に従え」で業務知識や組み込み技術をインプットするだけで精一杯。

とはいえ、もう2か月経ったんですよね。
そろそろアウトプットしていかないと…と思い、ブログ書いてみたというわけです。