組込みエンジニアからWEBエンジニアに転職した感想

こんにちは。コンストラクションソリューション事業部 開発部の若宮です。

昨年11月に入社してちょうど5か月が経ちました。私は、前職では組込みエンジニアとして働いていましたが、エコモットに入社してからはWEBエンジニアとして働いています。
本記事では、そんな私がこの5か月で体験した組込みとWEBの違いや共通点、感じたことをお伝えします。転職活動中の方や就職活動中の学生の方のご参考になれば幸いです。
なお、本記事の内容は、組込みやWEBの一般の話ではなく、あくまでも私個人の体験に基づく感想であることはご承知おきください。

これまでの組込み開発経験

まず初めに、私が前職でどういう仕事をしていたのか、少し触れます。というのも、一口に組込みといっても、Linuxが動くようなリッチなデバイスから、私が扱っていたようなOSも載っていない小さなマイコンまであるからです。その前提を共有しないと、「組込み」という言葉のイメージがかなり食い違ってしまう恐れがあります。
私が開発していたチップは、ARMのCPUに小さなRAMとフラッシュメモリ、そしてシリアル通信ができるものでした。インターネットには直接つながりません。C言語に加えて、機能がかなり制限された特殊なJavaを使用して開発していました。なので、一応オブジェクト指向プログラミングをやっていたことになります。

エコモットに入社してから

エコモットはIoT会社なので、同じフロア内にはデバイスを開発している人たちがいます。私の隣席では、組込みボードで開発したり通信の試験を行ったりしています。それを横目に見ながら、私はクラウド側の開発を担当しています。バックエンドのPHPとJava、フロントエンドのJavaScript、HTML、CSSを使用して仕事をしています。
この5か月間、WEBの仕事をしている中で私が感じたことは、プログラムを書いてシステムを作っていくということに関しては組込みとWEBで大きな違いはないということです。使用する言語が違っていたり、ハードウェアのリソースに差があっても、シンプルでわかりやすいプログラムを書くことが重要だということは共通していると感じました。組込みでもWEBでも、わかりづらいコードを読むのに苦労することはありますし、きれいなコードを読むのは簡単です。良いプログラムを書くための設計や根本にある考え方は変わらないものと思います。
もちろん、一つ一つの言語やミドルウェア等についての知識や経験は重要ですし、習得に時間がかかるものです。WEBでは、複数の言語を使って、様々なミドルウェアを使いこなさなければなりません。これは経験を積んでいくしかないと感じています。中でも特に難しいと感じたのは、JavaScriptの非同期処理です。プログラムは上から下に順に実行されるのが普通と思っていたので、JavaScriptでは何が起こっているのか未だにわかりません。(組込みでも割り込みがありますが、それより難しいと私は感じました。)

組込みもWEBも、ハードウェアの上にシステムを構築している

また、最近改めて実感したのですが、組込みでもWEBでもハードウェアの上にソフトウェアが動いているということは共通です。当たり前のことですが。
例えば、ハードウェアを使う処理(通信やファイル書き込み等)に関して、次のようなイメージがあるかもしれません。

  • 組込みでは、バッファを読み書きしたりレジスタを叩いたりして、ハードウェアを動かすコードを書く。

  • WEBでは、プログラミング言語に備わっているAPIを利用するか、さらに言えば、それさえも隠蔽したフレームワークを利用する。

ですが実際にはWEBにもハードウェアはあります(クラウドでも)。PHPやJavaの実装はたいていCで書かれていて、CではOSのシステムコールを利用しています。OSでは、組込みと同じようにハードウェアを動かして通信しているはずです。反対に、組込みではハードウェアを動かすコードを書くばかりではなく、それらを抽象化して、その上にシステムを組み立てていきます。通信がHTTPだとかAPDUだとか、データ保存先がフラッシュだとかDBだとか、そういったことは置き換えて考えることができます。(置き換え可能だからといって、それらが重要でないとか簡単というわけではありません。例えばDBなんかは、非常に奥が深く難しいものだと思います。)
そのように考えると、組込みでもWEBでも、ハードウェアを動かすプログラムをAPIとして、その上にシステムを構築しているという点では変わらないんだなと感じました。

それらを踏まえて、何が違うのか。組込みは一つのチップを相手にひたすらに格闘しています。WEBは、他の人が作ったソフトウェアを組み合わせてシステムを作っていきます。山ほどあるソフトウェアの中から最適な選択をすること、そしてそれを使いこなすことがWEBでは重要なんだろうと今は考えています。

保守・運用フェーズの存在

もう一つ大きな違いを感じたことがあります。それは、WEBでは保守・運用フェーズというものがある、というということです。WEBの人からすると当然のことでしょう。組込みでも、インターネットに接続できる製品は同じだと思います。しかし、私が前職で扱っていた製品はインターネットに直接つながっていなかったため、不具合の修復や機能追加等のアップデートはできません。モノを出荷したらそこで終わりでした。したがって、もしもバグがあれば全品回収になるのだろうと思います。そうならないように、数年間の使用に耐えるよう厳しくテストされていました。
WEBでは、もし万が一不具合があれば、運用中のシステムを修正することができます。機能追加やスケールも可能です。それと引き換えに、休みなく動き続けるシステムのお守りをしなければなりませんが。。。
保守・運用フェーズの存在は、開発にも影響を与えるように思います。一言で言ってしまえば、組込みは慎重、WEBはスピードです。

むすび

最後に、組込みからWEBへの転職は、結局どうなんだ、ということについての所見を述べます。
組込みとWEBは全く別の職種というわけではなく、上述したようにシステムを作り上げていく基本的な部分は共通しているので、ハードルはそこまで高くないと思います。
ただ、組込みあるいはWEBを一筋にやっている人に比べれば、経験が不足してしまうというのも事実です。働き方次第では、中途半端になってしまう可能性もあります。
そうならないよう、両方の知識・経験を生かせる領域で仕事ができれば良いと思います。その点、エコモットではデバイスからクラウドまで手がけているので、組込みとWEBの両方を生かせるのではと楽しみにしています。