こんにちは、ENGかぴです。
組み込みエンジニアとして十年と数年経験を積んできて振り返ってみると仕事上で覚えなければならなかったため必死に勉強してきました。プログラミングにチャレンジするのに限界はありません!80歳からチャレンジしてアプリを作ったおばあちゃんがいるくらいですから可能性は無限大です。
プログラムの勉強をしてみたいと考えている方や初心者に向けて私の経験を踏まえて、C言語を勉強するまでの道のりとして効率が良いと考えているプログラミングの学習方法についてまとめました。
C言語を勉強するまでの道のりとしているのは組み込みエンジニアがC言語を使うことが多いためです。最終目標をC言語にしない場合も学習の手順の参考になると思います。
私は未経験から就職することでプログラミングに携わることになりました。プログラミングと回路設計の双方の知識が必要な組み込みエンジニアとして経験を積むことになりました。
プログラム言語学習の順番
プログラムの勉強をしようと思っても何の言語から始めたらよいのか分からずに一歩がでないことはあると思います。結論から申し上げると、勉強する言語は
「何の言語からでも問題ありません!」
これは、私の経験上言えることでもありますが実業家兼ユーチューバーである「マコなり社長」も過去の動画の中で言っていたことです。
1つの言語をある程度習得していれば他の言語においても応用は利きます。一度プログラミング経験を積むことでプログラミングによるロジカルシンキングが身につくようになり、しばらくプログラミングから遠ざかったとしても抵抗なく再開できるようになります。
これは一度自転車に乗れるようになると無意識に自転車を漕いで走っているのと同じ感じです。つまり、一度経験を積むことがなによりも大切であると言えます。独学で進めてみたり、短期集中的に勉強するなり手段はどうであれ「とにかく経験をしてみる」ことが大切です。
サッカー選手の本田圭佑氏もワールドカップが終了して一息つきたい中、プログラミングの経験を積むべく「テックキャンプ」で短期集中して学んでいます。「勉強すると決めたら思い切ってやってみる!」ことは人生の分岐点になると思います。
経験を積んでいく中で学んできたプログラミングのスキルによってPICマイコンを使用したりトワイライトのソフトを開発してみたりArduinoを使ってセンサーキットを購入して通信したりと楽しむことができるようになっています。
PICマイコン(PIC12F675)で実現できる機能と解説リンクまとめ
PICマイコン(PIC16F1827)で実現できる機能と解説リンクまとめ
トワイライト(TWELITE)のソフト開発と無線通信でできること
Arduinoで学べるマイコンのソフト開発と標準ライブラリの使い方
Seeeduino XIAOで学べるソフト開発と標準ライブラリの使い方
ESP32-WROOM-32Eで学べるソフト開発と標準ライブラリの使い方
私でも未経験から上記リンクのようなことができるようになるのですから「あなたの可能性を信じてチャレンジしてほしい」と思います。
おすすめしたい言語学習の順番
言語学習の順番はデバッグ環境の準備やデバッグのしやすさを中心に考えた時以下の通りになると考えています。
- HTML(CSS)やJavaScript
- vb.netまたはVBA
- Ruby(PHP)またはPython
- C言語
プログラミングの基礎を固めてからC言語を勉強することが効率の良い方法だと考えています。私の場合は、C言語→vb.net→Ruby→HTML(CSS)になりました。
おすすめしている手順とはほぼ逆のパターンでした。組み込みエンジニアはC言語を使うことがおおいことから仕方なかった部分もありますが、効率は悪かったように思ってます。
組み込みエンジニアを目指すのであれば、1.HTML(CSS)やJavaScriptでプログラミングに対する意識のハードルを下げてから、2.のvb.net(VBA)で簡単なアプリを作りながら4.C言語を勉強すると効率が良いと思います。
vb.netでもよいと思いますが、業務用であればエクセルがインストールされていると思いますのでエクセルのVBAを勉強して業務効率を向上させるようなプログラムを作ってみるのもありだと思います。
結果がすぐに確認できる言語が良い理由
プログラムを作って結果がすぐに確認できる言語からスタートしたほうが身につきやすいと考えています。始めから難易度の高いことをやっても挫折に繋がるだけです。そのため結果がすぐに確認しやすいことから以下を特にお勧めしています。
- HTML(CSS)やJavaScript
- vb.net
- VBA(エクセルのマクロなど)
スマホとの連動する製品を開発する際にHTMLによるページの表示が必要になることもありHTML(CSS)やJavaScriptを勉強しておいても損はありません。
TeraPadなどのエディターを使ってサンプルページを作ってChromeで立ち上げれば結果がすぐに確認できます。うまく動作しなかった場合でもF12を押しとデバッグモードになるのでソースを確認しながら間違った箇所について修正できることからお勧めしています。
VBAはエクセルが必要ですが業務用のPCであればインストールされていると思います。VBAとvb.netはソフトの構成が似ているためエクセルがない場合はvb.netで勉強してもよいと思います。
VBAの勉強の仕方は「マクロの記憶機能」を使用して一定の動作を登録しておきマクロの編集で生成されたソース(プログラム)を見ながら追加していくことで勉強するとよい考えています。
エクセルにおいて自動化したい動作をマクロ化することで業務の効率化が図れますのでチャレンジして損はないと思います。
PR:わからないを放置せず、あなたにあった最低限のスキルを身に着けるコツを教える テックジム 「書けるが先で、理解が後」を体験しよう!
C言語から勉強を始めることをお勧めしない理由
組み込みエンジニアはC言語が必要だと言ってますが、プログラミングによる教養を身に着けることを目的とした場合C言語から勉強することについてはお勧めしません。
組み込みエンジニアが対象としているC言語によるソフト開発は製品がないとデバッグが十分にできないという欠点があるからです。
C言語は開発するマイコンによってコンパイラなどの開発環境が必要となるため学習のための環境づくりのハードルが高くなります。PICマイコンでも簡易的に勉強しようと思っても周辺にLEDや抵抗などの部品が必要になります。
勉強しようと意気込んだとしても成果が分かりにくく何の役に立つのかが分からなければ身につきにくくなります。
机上でプログラムを作って実際にソフトを書き込んでもうまく動作しないことがあります。実際に、C言語で作成したプログラムにおいてポインタ(アドレス)の指定を間違えたためCPUが暴走して全く動作せず原因の解明に四苦八苦したことが何度もあります。
使う文法は言語問わずほとんど同じ
組み込みエンジニアをやってきて感じることは、言語を問わずよく使う文法は決まっているということです。マイコンもしくはPCでなんらかの処理を行いたい場合は決まって、条件分岐(多重分岐)や繰り返し処理になります。よく使う文法は、
- 繰り返しに使うfor文やwhile文
- 条件分岐に使うIF文やswitch文(select文)
です。この2種類の使い方をマスターするだけで製品開発ができるといっても過言ではないと思います。よく使うfor文を使って、言語ごとの表記方法の違いについて示してみます。
例)C言語の場合
for( i = 1; i < 6; i++ ){
sum = sum + i;
}
例)vb.netの場合
for i= 1 to 5
sum = sum + i
next i
例)Rubyの場合
for i in 1..5
sum = sum + i
end
これらは、1から5の値をすべて加算した値になります。例のように表記が違うとしても同じ結果になります。このように、表記の仕方は違うもののC言語/vb.net/Rubyにおいて使う文法は共通であることが多いです。
まとめ:デバッグ環境でプログラミングの基礎を学ぶのがおすすめ
組み込みエンジニアがソフト開発で使用する言語で多いのはC言語ですが、プログラミングの基礎を学ぶためにはC言語から勉強することはお勧めしていません。
C言語は開発するマイコンによってコンパイラなどの開発環境が必要となるため学習のための環境づくりのハードルが高くなります。
デバッグしやすい開発環境であれば挫折することが少なくなり、言語学習の順番はデバッグ環境の準備やデバッグのしやすさを中心に考えると下記の通りが良いと考えています。
- HTML(CSS)やJavaScript
- vb.netまたはVBA
- Ruby(PHP)またはPython
- C言語
組み込みエンジニアをやってきて感じることは、言語を問わずよく使う文法は決まっているということです。一つの言語でもある程度学習していれば応用が利くため他の言語の理解はスムーズできるようになると思います。
最近ではWEB開発系のエンジニアが不足しているとも言われていますが組み込みエンジニアも不足しています。プログラミングにチャレンジして、少しでも組み込みエンジニアに興味をもっていただけたらうれしく思います。
関連リンク
経験を積んでいく中で学んできたプログラミングのスキルによってPICマイコンを使用したりトワイライトのソフトを開発してみたりArduinoを使ってセンサーキットを購入して通信したりと楽しむことができるようになりました。
PICマイコン(PIC12F675)で実現できる機能と解説リンクまとめ
PICマイコン(PIC16F1827)で実現できる機能と解説リンクまとめ
トワイライト(TWELITE)のソフト開発と無線通信でできること
Arduinoで学べるマイコンのソフト開発と標準ライブラリの使い方
Seeeduino XIAOで学べるソフト開発と標準ライブラリの使い方
ESP32-WROOM-32Eで学べるソフト開発と標準ライブラリの使い方
PR:わからないを放置せず、あなたにあった最低限のスキルを身に着けるコツを教える テックジム 「書けるが先で、理解が後」を体験しよう!
最後まで、読んでいただきありがとうございました。
デバッグしにくい言語からスタートするとうまく動作せず原因も分かりにくいことから挫折につながると思います。まずは、デバッグしやすく成果がすぐに確認できる言語からスタートしたほうがいいと考えています。