今までのコラムでは、組み込みソフトウェア入門として組み込みソフトウェアの定義から始まり、組み込みソフトウェアを開発する際の言葉、必要な環境などの初歩的な内容に関しての説明を行いました。このコラムでは組み込みソフトウェアエンジニアを理解して頂くために、プログラムにまったく興味のなかった私が入社してから今までの約20年の間、様々な組み込み機器の開発に携わってきた経験から、組み込みエンジニアになるために必要と感じたこと、組み込みエンジニアのおもしろさを話していこうと思います。
組み込みエンジニアってどんなエンジニアのこと?
「組み込みエンジニア」あるいは「システムエンジニア」「SE」など、組み込み業界に携わってきた人もそうでない人も、就職活動の際や転職を考えたことがあれば目にしたことはあると思います。求人情報や人材募集サイトの採用情報や仕事内容を見てみると、まず未経験OK、はたまた実務経験○年以上、雇用形態も正社員であったり派遣であったりと色々見て取ることができます。また、組み込みエンジニアになれる条件、組み込みエンジニアにとって必要な資格、キャリアも多岐にわたって明示されています。例えば、特に海外に組み込みソフトウェア開発の拠点を置くメーカーですと、システムエンジニアには縁遠そうな英語スキルが必要な案件も出てきます。また、就職先も大手メーカーもあれば外資系企業もあり、とこれもまた様々。もっとも(?)気になる組み込みエンジニアの年収はというと…一概には言えませんが、やはり同世代の一般的な年収と比較すると少し多いようです。
さて、本題に戻りましょう。まずは「組み込みエンジニアとは?」について説明します。といっても、「組み込みエンジニア」という職業が表す概念は幅広く、ということを前置きさせてください。現在、組込み機器には豊富な機能が搭載されており、一般的なパソコン上での開発と変わらない部分もあります。自作パソコンを作った経験のある人はわかると思いますが、パソコン用のマザーボードには様々な種類があり、それらのマザーボードを構成するハードウェア、たとえばCPUなども多岐にわたります。しかしながら、たとえばWindowsやLinux、UbuntuなどというOS(オペレーティングシステム)を導入する際には、どのようなマザーボードであるのか、もっと言うとどのようなハードウェアなのかをほぼ意識する事なく導入することが可能です。なぜなら、それぞれのマザーボードにはBIOS(Basic Input Output System)と呼ばれるハードウェアの違いを吸収するソフトウェアが搭載されており、どのようなハードウェアであっても統一的な制御方法で動作するように作られているからです。つまり、その上で動作するオペレーティングシステムは、ハードウェアの違いを気にすることなく動作できるのです。
今の話を組み込み開発に置き換えてみましょう。組み込み開発では、パソコンでいう所のマザーボードに位置する基板を、自分たちでハードウェア(CPU、メモリ、通信チップ等)を選定し、組み合わせて作ることがほとんどです。当然ながら自作の基板にはBIOSが搭載されていません。よって、基板を作るエンジニアと、BIOSを開発するエンジニアはハードウェアを気にする必要があっても、BIOSより上位のソフトウェアであるオペレーティングシステムやミドルウェア、アプリケーションのようなソフトウェアを開発するエンジニアは、これが組み込み機器開発であることを意識する必要がありません。インターネットで調べてみればわんさか出てくると思いますが、クラウドコンピューティング時代の到来により、どの機器上であっても同一のアプリケーションが動作する時代が来ています。よって、このような技術に携わるエンジニアは組み込み機器上で動くソフトウェアであることすら意識しないのです。しかしながら、様々なハードウェアが存在する以上、ハードウェアをつなげて基板を作るエンジニア、基板上に搭載されたハードウェアを制御するためのソフトウェアを作るエンジニアは必要となり、この両方を担うエンジニアこそが組み込みエンジニア、との認識を私は持っています。
組み込みエンジニアに向いている人
そんな組み込みエンジニアとして必要な資質は、モノを作り上げることに対して喜び、楽しめることだと思います。かといって、機械に対して超マニアックであれ、と言っているのではありません。冒頭に記載しましたが、私は大学時代に初めてパソコンにふれ、4年間の授業でプログラムの勉強をしました。が、正直な話、パソコンやインターネットには強い興味を持ち、睡眠不足になるまでハマったものですが、プログラムに関して言えばまったく違いました。単位を取るために必要なプログラムは作っても、卒業する直前になっても依然として興味が湧かず、ポインターすら使えないという人間でした。
そして、「パソコンが好きだし、今後はパソコンが主流になるんだろう」という安易な考えから私はソフトウェア開発の会社に入社しました。入社後の言語研修でJava言語を勉強しており、その研修の際に習ったJavaアプレットという技術を使うと、比較的容易に線や円をプログラミングによって描くことができるとわかって以降、無心になってドラえもんを描いたこと、描きあがった時に感じた満足感と喜びは今でも覚えています。あのときの、ある種マニアックな小さな喜びの積み重ねがあったからこそ、20年もの間ものつくりのエンジニアとして活躍してこれたのだろうと思います。パソコンに拒絶反応がなく、ものを作り上げることに喜びを感じられる人は組み込みエンジニアに向いていると思います。ここまで読んで、組み込みエンジニアに興味を持ったあなたに、組み込みエンジニアの面白さをお伝えしていきましょう。
組み込みエンジニアの面白さ 1
異文化コミュニケーション
どの職種でも特有の面白さがあるものですが、組み込みエンジニアにも当然、組み込みエンジニアにしか感じられない面白さがあります。ここでは、私が感じる組み込みエンジニアの面白さをお伝えしようと思います。
組み込みエンジニアの面白さ1つ目は「異文化コミュニケーション」です。組み込みエンジニアは、ハードウェアとソフトウェアの両方を理解しなければなりません。今、ものづくりを行う技術者でハードウェア、ソフトウェアの両方について詳しいエンジニアは少なく、ソフトウェアエンジニア出身の私がハードウェアエンジニアと会話をする際には、同じ日本語を話しているのか?と思うほど理解し合えなかったものです。これは知識と経験の積み重ねで埋められるものですが、ソフトウェアエンジニア同士でしか話さないエンジニアには経験しがたいものかと思います。これも勉強、自分の知識の一部になるものとして楽しんでください。
組み込みエンジニアの面白さ 2
推理デバッグ
組み込みエンジニアの面白さ2つ目は、組み込み系開発特有のクロス環境でのデバッグ作業でしょう。パソコン上でEclipseやVisualStudioといった開発環境を利用したプログラムのデバッグ作業では、プログラムの実行環境とデバッグ環境が同一であるため、事細かいデバッグ作業が可能となります。しかしながら、組み込みエンジニアが行う組み込み開発では、プログラムの実行環境とデバッグ環境が異なるクロス環境を利用するため、実行環境での状況を事細かく把握できないこともあります。そういった場合に必要なのが、原因の推測です。言葉を話せない赤ちゃんが泣いたとき、経験値の高いお母さんになると、何を訴えているのかが泣き方でわかるといいます。組み込みエンジニアも同様で、クロス環境を用いたデバッグ作業には組み込みエンジニアとしての経験値が必要です。経験を積んだ組み込みエンジニアは、発生した症状によって何となく原因の推測が行えるようになります。このように原因の推測ができるようになると、プログラム開発時に対策を徹底して、より安定した動作を実現するプログラミングのスキルが身につくのです。
組み込みエンジニアのスキルは仕事以外にも生かせる
私は今まで組み込みエンジニアを職業としてきましたが、日常生活にも組み込みエンジニアのスキルは生きると感じることがあります。組み込みエンジニアのスキルが役立った例を最後に紹介しておきます。組み込みエンジニアになると、必然的にハードウェアもソフトウェアも理解できるようになってきますが、これにより普段のパソコンやスマートフォン、家電製品といった組み込み機器を購入するときに、記載されたハードウェアスペックを読み取れるようになります。これにより私は家庭の中で父親としてのアイデンティティの一つを築きました。またパソコンやスマートフォン、農工機械などが壊れた際にも、ハードウェア的に壊れたのか、ソフトウェア的に壊れたのか判断できるようになり、自分で修理できてしまったりします。このように、組み込みエンジニアだからこそのスキル、経験が日常生活にも大いに生きてきますので、組み込みエンジニアになること、ソフトウェアとハードウェアの知識を持つことは素晴らしいことだと私は思います。転職を考えている、組み込みエンジニアという職業に興味を持ったという方は、ぜひ目指してみてはいかがでしょうか。
個別相談も承っております。下記よりお申し込みください。