組み込みとWeb、どっちに進むかで迷っている人に向けて書きます。
私は会社員のとき、組み込みの製品と、社内で使うWebシステムを並行して作っていました。 ほとんどの期間で両方をやってきて、最近になってWebだけになりました。
両方をやってみて思うのは、どちらにもはっきりした面白さがあるということです。そのうえで、まだどちらか決められないなら、最初はWebをすすめます。
私が見たのは、会社員のときに担当したテレビ・スマホ・カメラなどのプロジェクトと、独立してからの案件です。業界全体の話ではなく、私の場合として読んでください。
先に結論
| 観点 | 組み込み | Web |
|---|---|---|
| 動かす先 | 現実の機械 | ソフトの中 |
| 試すまで | ビルドが要る。長いと16時間 | すぐ試せる |
| 不具合 | ハードかソフトかの切り分けから | ソフトだけ |
| 身につく | 現実を取り込む仕組みと、現実へ出す仕組み | データの扱い |
Webの「すぐ試せる」は、私が使ってきた Python や TypeScript の場合です。
- 組み込みの良さは、パソコンで書いたものが、現実の機械を動かすことでした
- Webの良さは、すぐ試せて、調べる範囲が狭く、出したあとでも直せることでした
- この先は、どちらが良いかではなく、どちらがメインでどちらがサブかになっていくと思っています
- ただし、まだどちらか決められず、とにかくエンジニアになりたいなら、最初はWebをすすめます
組み込みを選んだのは、ソフトを知りたかったから
入社した会社には、Web系と組み込み系がありました。私は入社のときに組み込みを志願しました。 熱望して入っています。
理由は大学にあります。大学では電子工学を学んでいました。半導体工学や電子回路を勉強した記憶があります。回路のしくみや、抵抗・コンデンサー・コイルがどうふるまうかも、そのとき理解しました。研究では、計算のために C++ を使っていました。
大学でハードウェアを学んだので、会社にはソフトウェアを学ぶために入りました。 とはいえ、ハードウェアから離れたかったわけではありません。
だから選んだのは、ハードウェアがあることを前提にしたソフトウェア開発、つまり組み込みです。
組み込みで面白かったこと
面白さは単純で、パソコンの画面で決めたことが、現実の世界で起きることです。
パソコンでコードを書いて、ソフトウェアにして、ハードウェアに入れる。ハードウェアの側でそのアプリを起動すると、機械がひとりでに動きます。 ロボットを自分の手で作ったような感覚でした。
もう一つは、現実と、パソコンの中を行き来できることです。
- センサーを使って、現実の世界にあることをパソコンに取り込める
- アクチュエーター(モーターやスピーカーなど)を使って、パソコンの中にあることを現実の世界に表せる
会社員のときはテレビ、スマホ、カメラなどを担当していたので、それぞれでハードウェアがどう動くかを見てきました。
組み込みでつらかったこと
ハードとソフト、どちらが原因かを探す
いちばんつらかったのは、機械がうまく動かないときの原因探しでした。
原因がハードウェアにあるのか、ソフトウェアにあるのか。まずそこから調べる必要があり、調べる範囲をソフトの中に絞れません。
ビルドに時間がかかる
製品側は C言語や Java で書いていたので、動かす前に必ずビルドが要りました。
カーネルまわりのビルドでは、16時間かかったこともあります。 そうなると、直してから動作を確かめられるのは次の日です。
少し直しただけでも、ビルドしないと確かめられません。そのぶん開発に時間がかかり、正直、精神的にもこたえました。
Webで良かったこと
Webの仕事で良かったのは、組み込みでつらかったことの裏返しです。
- ビルドを待たなくていい。 私が使ってきた Python や TypeScript は、書いたらすぐ試せます
- 調べる範囲が狭い。 最初からソフトウェアの中の話なので、不具合が起きても範囲を絞って調べられます
- 出したあとでも直せる。 リリースして問題が起きても、直してもう一度リリースすればいい。リリースのときの気持ちの負担が小さいです
フリーランスになってから見えた違い
私の印象では、Webの案件のほうが多いです。
というのも、組み込みの案件は、SIer を通して別の会社が受けている形が多いように見えたからです。Webでは、そうした形は少なく感じます。
⚠️ どちらも私が案件を探したときの印象で、数を数えて比べたわけではありません。
「どっちが良いか」ではなく、どっちがメインか
もし私が会社員のときにWeb系を選んでいたら、いまごろは逆に、組み込みの仕事をしていたと思います。
結局、両方とも面白いんです。最近は CAD やレーザー、センサー、フィジカルAIに興味が出てきていて、また組み込みに戻るのも、そう遠くないと思っています。
だから、「Webと組み込みのどちらが良いか」という比べ方は、この先あまり意味を持たなくなると思っています。どちらがメインで、どちらがサブか。 そういう組み合わせ方になっていくはずです。
私の感覚では、身につくものはこう分かれます。
- 組み込み: 入力(センサーで、現実の世界から仮想の世界へ)と、出力(アクチュエーターで、仮想の世界から現実の世界へ)の仕組みに詳しくなる
- Web: 仮想の世界が前提にあって(現実とのつなぎ目は組み込みが受け持っている)、そこから先のデータをどう扱うかの話になる
まだ決められないなら、最初はWebをすすめる
とはいえ、最初にどちらへ行くかは選ぶ必要があります。
組み込みもWebもよく分からない、とにかくエンジニアになりたい。そういう人には、まずWebをすすめます。 理由は、Webのほうが成長しやすいと思うからです。
組み込みは、プロジェクトごとにやり方が大きく違う
私が見てきた組み込みのプロジェクトは、開発のやり方がプロジェクトごとに大きく違い、どれを基準にすればいいのか分かりにくいと感じました。
最初に入ったプロジェクトのやり方が独特でも、それが当たり前だと思ってしまいがちです。そうなると、成長しづらくなります。
違いが生まれる理由は、ハードウェアへの依存
組み込みの開発のやり方がプロジェクトごとに違う理由は、突き詰めるとハードウェアへの依存だと考えています。組み込みのソフトウェアは、ハードウェアを土台にして作るからです。
ハードウェアが決まると、それに合わせて次のようなことが決まります。
- 解析に使うツール
- 検証のしかた(フィールドテストが要るか、検証にどんな道具・機器・機材が要るか)
- 仕事の進め方(機材を事前に用意する別のチームとの連携など)
- 開発のしかた
どれも、ハードウェアが変われば変わります。
過去の間違いを抱えたまま進んできたことも、元をたどればここに行き着きます。
組み込みは、一度リリースしたら、もう取り消せません。 リリースすると、お客さんがハードウェアの実物を買うからです。お客さんが機器を更新してくれない限り、ソフトウェアは直せません。しかも、ソフトウェアを更新するだけでは直らない間違いもあります。そうなると、打てる手はほとんどありません。
一度間違えると、取り返すのが難しい。 だからリリースまでのハードルが高く、レビューにも時間がかかります。
それでも間違いは出ます。出てしまった間違いは、次のリリースで取り返すか、間違いがある前提で工夫して進めることになります。間違いを抱えたまま、次へ進む進め方です。その積み重ねが残っていくのは、ある程度しかたがないことです。
土台になるハードウェアが、プロジェクトごとに違います。だから、開発の文化も、プロジェクトごとに本当に違います。
Webは、リリースしたあとでも、こちらの判断で、お客さん全員のサービスをすぐに直せます。 直しにくい間違いは、データベースまわりなどに限られます。だからリリースまでのハードルが低く、「間違いがあれば直せばいい」という価値観があります。間違いを抱えたまま進む必要がありません。どんどん直して早く良くしていく進め方なので、レビューも早く回ります。
そもそもWebには、ハードウェアへの依存がありません。過去の間違いも直されていきます。だから、プロジェクトによるやり方の違いが小さいと感じます。
- 組み込み: 出したあとで直すのが難しいので、慎重に出す
- Web: 出したあとでも直せるので、早く出して直していく
Webには、ある程度の型がある
Webの開発には、「これか、これしかないよね」という定番の型があります。
だから、独特なやり方のプロジェクトに当たりにくいと思います。
Webは、ソフトウェアに回る力が大きい
成長のしやすさは、何が主役かでも変わると感じています。
組み込みは、ハードウェアを前提にソフトウェアがあります。主役はあくまでハードウェアで、詳しくなるのは実機のことです。
Webは、ソフトウェアが主役です。Webに詳しくなることが、そのままソフトウェアに詳しくなることになります。
かけられる時間や力を100とすると、私の印象では、行き先はこう分かれます。
- 組み込み: 100が、業務知識・ハードウェア・ソフトウェアの3つに振り分けられる(3つとも伸びる)
- Web: 100が、業務知識とソフトウェアの2つに振り分けられる
ハードウェアに回らないぶん、Webのほうがソフトウェアに回る力が大きく、早く伸びます。
成長すると、ほかの人と働くなかで、やり方の良し悪しを自分で見分けられるようになります。そうなれば、良いところを選んで取り込めます。
見る目ができてから、組み込みへ
組み込みに行くなら、自分が育って、見る目ができてからがいいと思います。
組み込みで違和感を覚えるやり方の多くは、ハードウェアへの依存から来ています。ただ、たまにそれ以外が元になっていることもあります。
Webでたくさん開発してきた人なら、それが変えられるやり方だと気づけます。 気づければ、業界の定番のやり方(デファクトスタンダード)を根拠に、よりよいやり方を提案できます。
ただし、ハードウェアへの依存から来ているやり方は、簡単には変えられません。 ハードウェアの知識がないと、とても難しいと思います。
エンジニアになったばかりなら、まずWebへ。 そして育ってから、そのままWebを続けるのか、組み込みに少し足を入れてみるのかを選んでみてください。
まとめ
- 私は会社員のとき、組み込みの製品と社内のWebシステムを並行して作っていた。いまはWebだけ
- 組み込みを選んだのは、大学でハードを学んだので、会社ではハードがあることを前提にソフトを学びたかったから
- 組み込みの面白さは、パソコンで書いたものが現実の機械を動かすこと
- つらかったのは、ハードかソフトかの切り分けと、長いビルド(最長16時間)
- Webの良さは、すぐ試せる・調べる範囲が狭い・出したあとでも直せること
- フリーランスになってからは、Webの案件のほうが多い印象(数えてはいない)
- この先は、どちらが良いかではなく、どちらがメインでどちらがサブかになると思う
- 組み込みのやり方がプロジェクトごとに違う根っこは、ハードウェアへの依存。Webにはそれがない
- Webは、ハードウェアに力が分かれないぶん、ソフトウェアに回る力が大きく、早く伸びる
- まだ決められないなら、最初はWeb。 見る目ができてから組み込みも選べる
組み込みの現場から、転職せずにWebの案件へ移った経緯は、組み込みエンジニアのWeb系転向に書いています。そのとき経歴書をどう書き直したかは、独立前に複数エージェントへ相談しても1か月以上案件が決まらなかった話にまとめました。組み込みの現場の毎日は、組み込みエンジニアあるあるに書いています。