新卒で入った会社にて事務仕事をしているうちにエンジニアの世界に興味を持ち、そこから転職。未経験からC言語を使用した組み込みエンジニアになり1年以上が経ちました。
組み込みエンジニアとして1年以上が経過し、組み込みの仕事や、この業界のこともおぼろげながら全体像が見えた今、色々と思うことがあります。
今回は前半に「組み込みエンジニアとはどんな仕事をやるのか?」というお話と、後半で「組み込みエンジニアとして1年以上仕事をして、今思うこと」を語りたいと思います。
組み込みエンジニアってどんな仕事をやるの?
さて、エンジニア不足だと叫ばれる現在の日本で特に人が足りていないのが組み込み系です。
組み込み系の人手が足りないと盛んに叫ばれはするものの、実際のところ「組み込み系」が何たるかをうまいこと説明してくれる人はいるようで、あまりいません。
僕自身も組み込み系エンジニアになる前に色んな人に「組み込みとは何か?」を聞きましたが、説明がものすごく雑か、逆に詳しすぎて結局よくわからないというパターンがほとんどでした。
そこで僕がまず組み込み系とは何かをザックリと説明すると
組み込みとは、電子機器(のソフト)を作ること
だと思っています。
もっと平たく言うと電化製品を作る、というようなザックリ理解でもいいかもしれませんね。
マイコンはハードとソフトに分かれる
電子機器を作る際には必ずマイコンと呼ばれるモーターやセンサーなどを制御するためのコアとなる部品が必要です。
すべての電子機器にはこのマイコンが備わっていて、マイコンにセンサーやモーターを接続することで、機械を電気的に制御します。
例えばクーラーであれば目標の温度を28℃と設定すれば、センサーで現在の気温を感知して、現在の温度が30℃であれば28℃になるようにモーターを回してファンを回転させ、冷気を送ることで温度を下げます。また、気温が26℃になるようであればモーターの動きを止めて室温が下がらないようにし、また28℃を超えるまでモーターを回すのを待機します。このマイコンがあることでクーラーも自動的に目標温度を維持できるようになるのです。
さてこのマイコンですが、マイコンはハードとソフトに分かれ、『組み込み系開発』と言うとこのマイコン用のソフトを開発することを一般的には指します。
細分化されている組み込みソフト
僕は今、とある家電メーカーで組み込み系ソフト開発エンジニアとして業務に携わっているわけですが、まず最初に驚いたのは、組み込み系のソフトは1つ1つのプログラムが非常に細分化されているということです。
例えば先程例に出したクーラーの制御用プログラムであれば大まかに分けて3つのプログラムに分かれます。
- PF(プラットフォーム)プログラム
- 駆動用プログラム
- 異常検出プログラム
プログラムの構成については各メーカーによって異なりますが、だいたいどこのメーカーも基本的な構成はこのような感じだと思います。
1のPFプログラムというのは、センサーの値などのアナログ値を他のプログラムが制御に使えるようデジタル値に変換するものです。
例えば外気温センサーなどは、センサーの中にサーミスタと呼ばれる、温度で電気の流れやすさが変わる部品が仕込まれています。気温が10℃の時はマイコンから1Aの電流を流そうとしても、サーミスタの温度変化によって0.1Aしか返ってこなかった。今度は気温が30℃の時だと0.3Aの電流が流れた。ということは、今1A流そうとして0.2Aの電流が返ってきたので20℃だと判断できる。
もちろん使うセンサーによって特性が異なるので、そういったセンサーの特性を定義し、アナログで入ってきた情報をデジタルに変換するのがプラットフォームプログラムの役割です。
※これは今僕がものすごく単純化したお話で、内容もだいぶテキトーなのでよそ様にはプラットフォームプログラムの説明として上記内容を触れ回らないようにお願いします。
2の駆動用プログラムは非常に分かりやすく、モーターやヒーターなどの部品を駆動させるためのソフト。
3の異常検出プログラムも読んで字のごとく、機械の故障を自分で検出します。例えばクーラーで冷房を最大限に効かせるために最大出力でモーターに駆動指示を出しているのに、モーターが回転していない。そういうときはモーター回路の故障が考えられるので、故障ランプを点灯させる、などといったプログラムになります。
この大まかに分けた3つのプログラムの中で、また更に無数の細かいプログラムに分かれ、駆動用プログラムであれば「モーター駆動用プログラム」「ヒーター加熱プログラム」などに分かれていきます。
これらのプログラムはひとつひとつが独立して存在することで、不具合が起きた際にすぐに改良プログラムに置き換えることができますし、またより効率の良いプログラムを開発できた際にすぐに入れ替えれるようになっています。
(それぞれのプログラムが密接に絡み合ってしまうと、一部改良をしたい時に全体も直さないといけなくなってしまうため)
組み込み系開発は「仕様書作成」と「実装」に分かれる
組込み用のプログラム構成が分かったところで、実際にはソフト開発をどのように進めるかと言うと、ソフト開発は大きく分けて2つの業務に分かれます。それが「仕様書作成」と「実装」です。
仕様書作成は「これからどんなプログラムを作っていきたいかの仕様をWordやExcelに日本語の形で定義していく」というもの。
実装は、「仕様書を元に実際にプログラムの形に落とし込んでいく」というものになります。
この中でも僕は主に駆動用プログラムの仕様書作成を担当しています。
役職上は仕様書作成業務担当ですが、実際には実装の方もバリバリこなしています。
現場でよくあるのが、仕様書作成担当がプログラムのことをあまり理解しておらず、実装不可能な仕様書を書いてきたり、はたまた実装担当が仕様書の要求を満たすために無理やりコードに落とし込んだせいで、あとから動作チェックをしようにもコードが理解できない、ということも度々起こります。
この様な環境に揉まれながら1年以上が経過しました。
組み込み系エンジニアになって1年経って思うこと
実際に自分が組み込み系エンジニアになってみて、色々と組み込み系の良いところ、悪いところが見えてくるようになりました。
悪いところ
①ソフト全体が巨大すぎて、1つのプログラムを作っているだけではモノづくりをしている実感がない
僕がいま会社で開発している家電製品のソフトは全部で3000個近いプログラムの塊で出来ています。それゆえ、一つ一つのプログラムは本当に小さく出来ていて、一つのプログラムを作るだけではモノづくりをしているという実感がなく、どうしてもやりがいを感じづらいのです。
②エンジニアと言えど、所詮はサラリーマンに過ぎない
これもまたソフトが巨大すぎるがゆえの弊害なのですが、毎回1つのプログラムをちょこちょことアップグレードしては予期せぬ動作をしないかと延々とデバッグを行って、それでまた次のプログラムに取り掛かって・・・ と、やっている作業はものすごく地道な作業で、毎日代わり映えがしないんですよね。
エンジニアと言うともう少し華やかな世界が広がっているのかと思っていましたが、そこには所詮はサラリーマンに過ぎないのだなと思いました。
③スキルがポータブルのようでポータブルにならない
いま組み込み系業務に携わっていて一番ネックに感じているのがこちらです。
組み込み系はその会社独自のコーディングルールやツールが多くあり、そこでプログラミングを覚えてもよその会社で即戦力になれるかと言うと非常に怪しいのです。
特に僕が勤めている会社はコーディングルールがガチガチ過ぎて、家に帰ってから勉強ができません。また市販の参考書を使ってC言語の勉強をしても、それが会社でのソフト開発に活きてこないのです。
自分の業務が終わった後で残って勉強をしようと思っても昨今の厳しい残業規制でなかなかそれが出来ない状態で、非常にもどかしい思いをしております。
良いところ
①自分の担当した製品が街中で使われているのを見ると誇らしい気分になる
組み込み系エンジニアの一番の醍醐味は、自分が担当した製品が街中で使われているのを見た時に非常に誇らしい気分になれるところです。
当然のことながら自分がやったことなど製品開発全体からしたらほんのごくごく一部ですが、それでも一応開発メンバーとして参加した製品が誰かに使われているのを見ると嬉しくなってしまいます。
②みんなで一つのモノを作るのは、楽しい
大人達が少しでもいい製品を作ろうと会議室に集まってああでもないこうでもないとアイデアを出し合ったり、現場に出て何度も何度もテストを行ってギリギリまで品質を上げるための努力を惜しまなかったりする姿を見ると、ふと「あぁ、モノづくり(エンジニアリング)っていいなぁ」と思ってしまいます。
③組み込み系は今後も需要があって、キャリアプランを描きやすい
先程の悪い点と表裏一体なのですが、組み込み系はスキルがポータブルではない分、同じ業界で働き続けるとするならばキャリアプランが描きやすいというメリットがあります。
僕の住む愛知県であればトヨタ関係の仕事が山程あり、一生自動車業界で働く気があるのであれば容易に年収を上げることが出来ます。今の御時世ですと、一つの会社に入ってそこで年収を上げるというのは難しいのですが、一つの会社で2~3年働いて必要なスキルを身に着けたら転職するという方法を使えば、一回の転職で最低でも50万、うまくいけば100万円は年収をアップさせることが出来ます。
腹をくくって「俺はこの分野で一生やっていくんだ!」と思える人には組み込み系はとてもいい業界だと思います。
僕はいま副業をやるためのWeb系言語も勉強しているため、自分の業界について考えることが多くなりました。その時に思ったのが上記のような内容で、当然のことながら良い点もあれば悪い点もあります。しかしながらエンジニアリングというのは楽しい部分も多く、やってみようかどうか迷われているのであれば、まず一度飛び込んでみるのも良いかもしれません。
以上が『組み込み系とは? という話と、組み込み系エンジニアになって1年経って思うこと』でした。
↓組み込み系エンジニアになるために何を勉強したらよいかについて書いた過去記事はこちら