今回は組み込みプログラマになるために必要なことを、5年前にアプリケーション開発のプログラマから組み込みプログラマに転向した僕の体験を元に組み込みエンジニアってこの先どうなんだろう、ということを考えてみます
特に
- 今組み込み分野にいるけどこの先大丈夫かな?
- 組み込み業界とアプリ業界迷っているんだけど
という方を対象としています
そもそも組み込みソフトって
そもそも、組み込みソフトとは何なのでしょうか
組み込みソフトとは
なにかの製品に組み込まれているソフト
です
少しざっくりし過ぎですね
アプリケーションソフトと比較してみると分かりやすいかと思います
アプリケーションソフトとは
PCやスマホ上で動くソフト
です
具体例を挙げてみると
| 組み込み | 炊飯器、冷蔵庫、電子レンジ、テレビ、自動車、ゲーム機本体、…… |
| アプリケーション | ブラウザ、LINE、Youtube、ゲームアプリ、…… |
身近な物理的な形を持ったものは組み込み、と考えてよいと思います
組み込み業界の将来性は?
現在の状況
では、組み込み業界の将来性はどうでしょうか
まずは2023年現在の状況を見てみます
dodaでITエンジニアの職種別の平均年収を参考にしています
プロジェクトマネージャや研究職などは除いて一部抜粋しています
| 職種 | 平均年収(30代) |
| データサイエンティスト | 587万円 |
| セキュリティエンジニア | 519万円 |
| ネットワークエンジニア | 504万円 |
| スマホアプリ | 503万円 |
| 制御系ソフトウェア開発 | 501万円 |
| Webサービスエンジニア | 482万円 |
| データベースエンジニア | 467万円 |
| テスター | 391万円 |
今をときめくデータサイエンティストに比べると水を開けられてしまっていますが日本人の30代の平均年収が435万円だと思うと十分に高い水準なのではないでしょうか
将来の予想
ここからは私の予想になります
今はAIやデータサイエンティストの盛り上がりでソフトウェアエンジニアと言ったらアプリ側がトレンドになっているように思います
ただ、『そもそも組み込みソフトって』でも挙げたように身の回りの家電製品や自動車などには必ずハードウェアが必要となります
なので、組み込みエンジニアの需要はなくならないと考えます
むしろ、新卒など新しい人がアプリ側に動くことで組み込みエンジニアの数の希少性が高まり給料は上昇するのでは、と考えています(希望的観測も含まれています)
特に、自動化や効率化に対する自動運転車、IoT
高齢化社会に対する医療機器
といった分野はこの先5年ほどは活況なのではと思います
リソースの制限
少しソフト屋さんの目で見てみます
アプリケーションと組み込みでの大きな違いはなんと言っても、『動作する環境』だと思います
アプリケーションの場合はパソコンやスマホなど高性能なCPUの上で動くことが多いですが、組み込みの場合は低い性能のCPU上で動くことが多いです
まずはその違いを理解することが大切です
CPUの性能
組み込みで使用するCPUはパソコンで使用するCPUに比べて非常に低スペックです
スペックの一部を比較してみます
比較対象は
アプリケーション用:Intel Core i5-7400
組み込み用:RH850 / F1L
です(どちらも今使っている/使っていたCPUです)
| Core i5-7400 | RH850/F1L | |
| クロック周波数 | 3.00GHz | 80~90MHz |
| コア数 | 4 | 1 |
| キャッシュメモリ | 6MB | 32~192KB |
| 価格*1 | 約26,000円 | 約2,000円 |
RH850 は chip1stop様 から参照
上の表を見ていただければ分かるように、各スペックは文字通り桁違いです
処理スピードだけ見ても100倍以上の差がありそうですね
他に細かいところで言えば例えば、組み込みで使われるCPUには浮動小数点数を計算するFPUが乗っていなかったり、と細かいところで違いがあります
ちなみに、小数点の値を使いたいときは『固定小数点』というものを使います
アプリケーションを組むときは処理時間やdouble型といったものを余り意識しませんでしたが組み込みでは意識しておく必要があります
スペック的に制約は多いですが、値段は断然組み込み向けCPUのほうが安いです
CPUの値段が高いとその分製品の値段も上がってしまいますし、売上にも影響してきます
例えば、年100万台売れるようなものがあったとすると調達コストが1万円違うだけで
100万台 * 1万円 = 100億円
もの差が出てしまいます
CPUの選定から携わる人がそんなにたくさんいるとは思ってはいませんが、制限された環境にも納得がいくのではないでしょうか
処理時間
アプリケーションで処理時間を厳密に設計することはできません
というのも、OSや他のアプリが動いているためその時々によって使えるCPUのリソースが変わってくるからです
一方、組み込みの場合はそのソフトしか動いていないためしっかりと処理時間を設計できます
例えば車のブレーキなどは、他の処理が動いているから遅れちゃいました、ということは許されません
ある機能に許された時間(応答時間)が1ミリ秒もない、ということもあります
何も安全に関わることだけでなく身近なところでは、テレビのリモコンのチャンネルボタンが押されたときに実行されるプログラムがあったとき、チャンネルが変わる時間がまちまちで遅いときは10秒後にチャンネルが変わることもある、となるとユーザとしては納得できないですよね
このように組み込みでは処理時間を意識した設計が大切になってきます
『CPUの性能』でも見たように組み込みのCPUは処理スピードが遅い(単位時間に実行できる命令数が少ない)ので、あの手この手を使って時間の短縮をします
ハードウェアの知識
「ソフト屋なのにハードウェアの知識が必要なの?」
と思われるかもしれませんが、必要なのです
正確には転向直後は必要ないかもしれませんが、少ししたら必要となってきます
何もバリバリ設計できるまでの知識が求められるわけではありません
回路図が読めてオシロスコープが使えれば一先ずはOKです
ソフトを開発している段階でハードウェアが既に完成していて100%問題ない!
という状況だと嬉しいのですが、そんなことはまずなく、並行して開発されいることが多いです
そうなると、開発中のソフトにバグがあるようにハードにも間違いはあることは理解できると思います
僕が経験した事例だと、仕様書に
端子1にスイッチAが、端子2にスイッチBが
接続されると書いてあったのに、回路図では
端子1にスイッチBが、端子2にスイッチAが
と、逆に接続されていることがありました
回路図を読むことで問題の箇所がソフトではなく回路であることが指摘でき、それ以上調査に工数をかけずに済みました
(余談ですが、このときは回路はもう直せない、ということで間違った回路図が正しいことになり、結局ソフトを変える羽目になりましたが……)
閑話休題
他にもオシロスコープを使って「実装したプログラムが意図通りの波形を出力しているかの確認」や「ハード的なノイズをみてフィルタをどれくらいにするかを調整」「モータを制御したいからこんな波形を出力しようか」といったことも行っていました
このように、ソフトだけでなくハードの知識も持つことで、効率の良い開発、一歩先を行くエンジニアになることができると思います
まとめ
- PC、スマホ上で動くソフトはアプリケーション、それ以外は組み込み
- 組み込みでは
- CPUのリソースがすごく少ないことを認識する
- 処理時間を意識する必要がある
- 回路図が読めるだけの電子回路の知識が必要
では、今回はここまで


コメント