最近「プログラミングの勉強を始めたよ」という話を聞くようになりました。
小学校でのプログラミング教育が始まったことや、コロナ禍による在宅時間が増えたことも手伝ってプログラミングの勉強をしてみようと思う方も多いようです。
本職「組込みエンジニア」の私としても、プログラミングの勉強を入口にソフトウェア人材が増えればいいなぁと思う今日この頃です。
しかし、ソフトウェアエンジニアは「WEB系」「アプリ系」「組込み系」などとジャンル分けされますが、やはり人気はWEBサイトやWEBアプリケーションの作成を行う「WEB系」と、スマフォアプリやパソコン用アプリケーションの作成を行う「アプリ系」で、「組込み系」はあんまり人気がない(もしくは知られてない)かなというのが私の印象です。
今回は、そんな「組込み系」を盛り上げるべく、プログラミングに興味を持った方々へむけて「組込み系」へのお誘いを書いてみようと思います。
そもそも「組込みソフトウェア」ってナニ?
っという方も多いかと思うので、簡単に説明してみたいと思います。
国の機関の独立行政法人 情報処理推進機構(IPA)のHPでは以下のように記載されています。
しかしこれではよくわからないと思うので、身近なところで「湯沸かしポット」を例に考えてみたいと思います。
「機器=湯沸かしポット」「機能=お湯を沸かすこと」と置き換えると「湯沸かしポットに組み込まれてお湯を沸かすことを実現しているソフトウェア」となります。
湯沸かしポットにはヒーターと水温計が搭載されていて、次のような機能(制御)をソフトウェアで実現しています。
- スイッチを押すとヒーターで加熱を開始
- 水温計で100℃(沸騰)を検知すると加熱を停止
お湯を沸かすだけの簡単な機能なのでハードウェアだけでも実現は可能ですが、ソフトウェアを使用するメリットとしては、例えば保温機能を追加したいときにソフトウェアの変更だけで対応が可能な点があります。
- スイッチを押すとヒーターで加熱を開始
- 水温計で100℃(沸騰)を検知すると加熱を停止
- 80℃を下回ると加熱を開始
- 85℃を上回ると加熱を停止
- 以下3-4を繰り返し
(保温機能の3~4を追加。水温計とヒーターというハードウェアはそのまま利用。)
こんな感じで機器(ハードウェア)をうまく使って、さまざまな機能を実現するのが組込みソフトウェアの楽しいところかと思います。
他にも炊飯器で考えてみると、「機器=炊飯器」「機能=ご飯を炊くこと」で置き換えて「炊飯器に組み込まれてご飯を炊くことを実現しているソフトウェア」となります。
最近の炊飯器は、お米の種類や量に合わせて火力や時間などの炊き方を調整してくれたり、パンを焼く機能がついているものもあります。
組込みソフトウェアを利用することで、炊飯器という1つの機器で様々な機能を実現しているというわけです。
なんとなく組込みソフトウェアについてイメージできたでしょうか?
こんな感じで「機器(ハードウェア)と一緒に機能を実現する」という点が、組込みソフトウェア最大の特徴です。
現在は家電製品、医療機器、自動車、航空機、工作機械、ロボット、ロケット、人工衛星などなど、多くの製品で組込みソフトウェアが利用されていますし、エンジニアを募集しています。
「WEB系」や「アプリ系」とは異なる「モノ」を創ることに興味のある方々、「組込みソフトウェア」を始めてみませんか?
「組込みソフトウェア」の始めかた
「組込みソフトウェア」を始めてみませんか? とは言うものの、何からすればいいのよっていう話です。
組込みソフトウェアは、「機器に組み込まれて機能を実現しているソフトウェア」と書きましたが、実際には機器に搭載された「マイコン」で動作することで機能を実現しています。
そのため、「マイコン」や「マイコンで動作するプログラム」について学習することから始めることになります。
とはいうものの、「マイコン(=マイクロコントローラユニットの略)」って何よ?って方も多いと思います。
「マイコン」についての説明は、他に良質な説明ページが多くあるのでそちらを参照いただくこととして、ここでは説明しません。
というのも説明するより実際に触れながら学習を進めていくなかで理解していけばよいと思うためです。
ただ、どんなものかのイメージをもってもらうために画像を載せておきます。
この黒い四角いモノがマイコンになります。サイズは様々で表記される文字や絵も様々なものがあります。
マイコンは電子部品で単品では動きません。学習には動作に必要なもの揃っているマイコンボードを利用することになります。(写真はRaspberry Pi Picoというマイコンボードのマイコンとなります。)
次にマイコンで動作するプログラムですが、さまざまなプログラミング言語で作成することができます。
流行りのPythonでも作成可能ですし、使用するマイコンの開発環境が対応している好きな言語で作成いただければよいのですが、製品開発の現場での主流はC言語となりますので挑戦してみるのもよいかと思います。
C言語は1972年に開発されたかなり古参のプログラミング言語です。しかし半世紀経った今でもまだ、現役で支持を得ている不思議な言語です。それだけ他の言語にはない魅力がまだある言語ということなのでしょうか。
C言語と聞くとプログラミング初心者の方には「難しそう」とか「習得に時間がかかりそう」というイメージがあるかもしれません。でもマイコンと一緒に学習を進めるのであれば、取っ付きやすく効率も良いかと思います。
個人的にそう思う理由は、
- マイコン学習のステップに合わせて必要な分だけ学習すればよく、学習範囲の目的が明確。
- プログラミング言語を、入門書やスクールを利用して習得を行う方も多いと思います。
最初の入口はそれでも良いかと思うのですが、広くまんべんなく習得してもらおうという考えがベースにあるため効率面でどうかと思う面があります。プログラミング言語にはあんまり使わない(それでいて分かりにくい)テーマもあります。当然初心者さんは判断がつかないので、「入門書を1冊終わらす」、「スクールを修了する」ことを目指すことになるため終了を実感するまで時間がかかります。
その点、マイコンの学習と同時進行するのであれば、必要な時に必要ことを習得すればよいというスタンスとなり目標が明確で効率よく学習できるのではと思います。
- プログラミング言語を、入門書やスクールを利用して習得を行う方も多いと思います。
- マイコンで動かしながら学習するので処理の流れを理解しやすい。
- 作成したプログラムが正しいかを確認するには結果だけではなく処理の途中経過が見えることが重要かと思います。
マイコンの開発環境では1Stepずつ動作を確認しながらプログラムを動かす機能があり、プログラムがどういう順番で動いたかを把握しやすく、どこで間違えたかも分かりやすいかと思います。
- 作成したプログラムが正しいかを確認するには結果だけではなく処理の途中経過が見えることが重要かと思います。
- 難解と言われるポインタもマイコンの理解が進むとイメージできるようになる。
- (ポインタってなに?っという方は読み飛ばしてください。)
C言語で難しいと言われるものにポインタがあります。メモリやアドレスといったコンピューターの知識がないとイメージが持てず、必要性もわからずモヤモヤになります。
マイコンは小さなコンピューターです。その理解が進めばこれらの知識も身につき、きっとイメージできるようになるはずと思っています。
- (ポインタってなに?っという方は読み飛ばしてください。)
ということで、マイコンとC言語の学習から「組込みソフトウェア」への一歩を踏み出してみませんか?