読者です 読者をやめる 読者になる 読者になる

組み込み業界の比較的ポジティブな特徴

ソフトウェア開発

http://d.hatena.ne.jp/wa-ren/20081130/p2


 少し前に上のエントリで組み込みの話が話題になっていてびっくり。ただブコメなどを見ると、やはりというか相変わらずというか、ネガティブな言及が多いようだ。
 ついでなので、世間一般でいう(要はエンタープライズ系などの)プログラマの業界にはあまりない特徴のうち、比較的ポジティブというか、学生が興味を持ちそうなものを思いつくままに列挙していこうと思う。だらだらとした乱雑文になっている点はご容赦を。

最上流企業でもコーディングができる

 エンタープライズ系のSIerなんかとは違い、組み込み業界では最上流企業でも多くの開発や実装を行っている。
 もちろん派遣、請負、外注などの外部リソースも積極的に使われているのだけれども、まとまった製品を手がけている企業では、キーデバイスやコア技術に関わる部分を扱う部門や、人材の育成が必要な領域が存在するため、比率は比較的少ない。

 また最近は以下のような世事から、外部リソースを控えようという傾向が出てきている。


●ソフトウェアで対応できるコア技術が増えている
 ソフトウェアの処理性能が上がったことで、本来アナログ回路やASICといった他の領域が担っていた責務がソフトウェアにまわされるようになった。
 結果、高度な画像処理など、自社のコア資産もプログラマが扱うことが多くなり、安易に外部の人間を入れられなくなった。

コモディティ化が急速に進んでいる
 組み込み業界は、コモディティ化と電子化が急速に進んでいる時代背景から、とんでもないことになっている。
 例えば自動車なんかでは、今や数十個のプロセッサが協調して機能を提供するコンピュータ駆動体と化している一方で、差別化や付加価値のため映像技術や音声認識技術などで先進的な技術を先行して実用化し続けなければならなくなっている。
 結果、人材の育成や囲い込みの要求が強くなっている。

●プロダクトライン開発が普及しつつある
 組み込み業界で数年前から流行というか、注目を集めている開発管理手法にプロダクトライン開発というものがある。これは要はコードを製品ロードマップを考慮しながらモジュール化、フレームワーク化して、似たようなところをどんどん共有・移植しようという考え方なんだけれども、この実現にはコードやドキュメント、設計モデルといった成果物を、結構な規模で共有する必要がある。
 そうした背景から、正社員が継続して管理しなければならないソフトウェアが増大している。


 要は何を言いたいのかというと、仕事はプログラムの開発、だけど給料は最上流SIerのSE並、のようなところがある。

高年齢でもコードを扱う開発に従事できるところがある

 組み込み開発の中には、付加価値のついた職種がいくつか存在する。
 例えば制御理論や画像設計の世界。

 そういう世界では実際にモノを動かしながら調整していく泥臭い工程と、専門性の高い工程が混在している。

 例えば精密な産業ロボットの制御なんかでは、設計段階でロバストやらラプラス変換やら人工知能やらの学術理論を扱う一方で、開発段階では摩擦・経年劣化・潤滑油の偏り・モータやセンサ性能のばらつき・空気抵抗・振動・電源のゆらぎ・たわみその他諸々の問題も何とかしないといけない。しかもその両方の工程の切り離しというのが得てして難しい。

 こうした世界では長年にわたって蓄積した経験や知識、技術がとても貴重なので、それらを身に着けた人たちは年齢に寄らず強い需要がある。(例えば画像系のメーカーに行けば、画質評価で信頼を集めている意見番のおじいさん、みたいな人がいる)

ソフトウェア工学の研究者としてのキャリアパスがある。

 大手企業ではソフトウェア工学の研究を行っているところがある。
 そこまで行かなくても、論文を発表して学会で地位や名声を確立するようなキャリアパスを用意してくれているところがある。大手企業だと、ソフトウェア工学の専門知識を付けさせるために、留学制度を用意しているところも珍しくない。
 最近は形式手法がとてもホットな話題になっていて、研究者としてのソフトウェアエンジニアの需要は多少底堅くなっているように思う。

数学といった学術サイドの技術を扱う職種がある

 巷にはプログラマにとって数学は重要、プログラミングに数学の知識は必須なんていう意見があるけれど、はたから見ると眉唾物だと思う。


 ただし、組み込み業界では数学のような学術的に専門性の高い知識を駆使して開発を進める領域がある。
 例えば機能試作部門などがそう。そこでは研究部門が開発したアルゴリズムをFPGAやファームウェアレベルに落とし込んだり、あるいは研究成果の製品化を進める上で現れる問題や改善点に対処したりする。そうしたところでは、線形代数なんかの基礎分野は元より、複雑な解析理論なんかを仕事として扱える人たちがいる。

先進的な開発管理やマネジメントを行っているところがある

 組み込み屋からの視点だけれども、エンタープライズ系やウェブ系のエンジニアの方は、いわば下流工程指向というか、ボトムアップ視点だと思う。
 例えば、アジャイルやTDDなどが取りざたされたり、直近ではid:t-wada氏がデベロッパーテスティングを提唱したり、id:higayasuo氏がプログラミングファーストを生み出したりと、実装寄りの技法やアプローチに注目が集まっている印象。


 一方それに比べて、組み込み系は上流工程指向、トップダウン視点だと思う。(決して組み込み系が優れているといっているわけではない。単に業種形態や企業規模の違いだと思う)。
 この業界で最近ホットな話題になっているのはMDD(モデル駆動開発)やVDM、プロダクトライン開発、モデルベース開発、システムテストといったもの(すべて上流工程に関わる開発手法)。また最近IBMが製造業向けにテスト駆動"型"開発の紹介を行っていたのだけれども、本来ボトムアップ的な技術であるはずが、組み込みプログラマに対しては、「MDDで上流工程からテストを実現する」なんて方法論として説明されていた。要はそんな世界。
 そうした背景もあって、ソフトウェア開発のプロセス管理やマネジメントが非常にしっかりしているところが珍しくない。特に品質管理・リスク管理に関しては強いところが多い。



 ただ注意として、上に挙げた特徴は、基本的に大手メーカーでの世界。
 下請けや専業の企業は、あまり環境や待遇がよくないと感じる。(そもそも組み込み系で一流ベンチャーとか一流の下請け企業とかいう存在をあまり聞かない。ASICといった他の分野ではザインエレクトロニクスみたいなところがあるのだけれども)。
 であるので、余談になるけど、組み込みプログラマになりたいという人は、大手優良企業を狙うのが無難だと思う。