ALL NOTES

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

組み込みとWeb、どっちがいい?|両方やった私が感じた良さと、最初はWebをすすめる理由

組み込みとWeb、どっちに進むか迷っている人へ。私は会社員のとき、組み込みの製品と社内のWebシステムを並行して作っていました。組み込みは書いたコードで機械が現実に動くのが面白く、Webはビルドを待たずに試せて、出したあとでも直せるのが楽でした。両方やった私の答えは、最初はWeb、育ってから組み込みも、です。

組み込みと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か月以上案件が決まらなかった話にまとめました。組み込みの現場の毎日は、組み込みエンジニアあるあるに書いています。