組み込みエンジニアに必要なプログラミング言語とおすすめ学習方法

こんにちは、組み込みエンジニアのtomozoです。

 

今回は、

組み込みエンジニアが学ぶべきプログラミング言語について解説します。

 

  • 組み込みエンジニアになりたい人

向けの記事です。

 

しっかりと学ぶべきプログラミング言語を知って

習得しておかないと時間を損します

学習できる時間は有限ですからね。

組み込みで使わない言語を学習して知識を増やしても

組み込み開発では役に立ちません。

意味がないどころが、余計にややこしくなって

混乱してしまう場合もあります。

 

極端な例だと、英語が必要なのにドイツ語やフランス語を

勉強してようなものです。

 

必要なプログラミング言語を集中して学習しておけば、

時間の節約になって、他のことを勉強する時間に回せたり

自由な時間を持つことができます。

 

いくらプログラミングが好きといっても

四六時中プログラミングのことを考えている人は

ほとんどいませんよ。

 

この記事を読めば、

  • 組み込みエンジニアが優先して学ぶべき言語
  • プログラミング言語の学習方法

が分かるようになります。

 

それでは解説を始めます。

 

組み込みで使うプログラミング言語

組み込み系で使うプログラミング言語はよく使う順に主に以下の4つです。

  1. C言語
  2. C++
  3. Java
  4. アセンブリ言語

業界や会社によって順位は上下しますがC言語は必修です。

各言語の特徴を見ていきましょう。

C言語

現在組み込みシステムで一番利用されているのはC言語です。

C言語は1972年に生まれ、かなり長い歴史を持っています。

 

以降多くのプログラミング言語が開発される中

古い言語にもかかわらず今も一番使われている

C言語のメリット

  • プログラムサイズが小さくできる
  • アセンブリ言語と同等の処理を簡潔に書ける
  • 他の高級言語にある暗黙のコード生成やバックグラウンドで動く処理がない
  • 高速・リアルタイム性に優れていて意図したとおりに制御できる
  • 既存のプログラム資産が流用できる
  • C++に発展させることができる

C言語は組み込み以外にもOSやゲームなどでも使われている

汎用性の高い言語です。

 

C言語のデメリット

  • 他の言語に比べてメモリー管理やポインターなど複雑
  • プログラマーが意識しないといけないことが多く生産性が低い
  • オブジェクト指向の開発ができない
  • ライブラリが貧弱

後発の他のプログラミング言語を学んだことがあれば特に感じます。

 

C言語は自由度が高い分、自分で書くというのが基本スタンスです。

ネットでサンプルプログラムが公開されていたり、

標準ライブラリを持ってくれば簡単に動く

ということがほとんどありません。

 

組み込み開発現場では、

ミドルウェアと呼ばれるハードウェアとプログラマーが開発するプログラム

の橋渡しをしてくるプログラムが販売されているような業界です。

 

初心者の方はまずC言語の文法を一つずつ理解していきましょう

C++(シープラスプラス)

最近はC言語と並んで使われることが増えてきています

通称「シープラ」とか「シープラプラ」と呼ばれます。

 

C言語の上位互換言語でオブジェクト指向であったり

他の高級言語同様の機能が追加されています。

歴史的には1983年にC言語の開発元であるベル研究所が

C言語の拡張として開発した言語です。

最近の若いエンジニアはC++になじんでいる人も多くいます。

 

C++のメリット

  • C言語同様処理速度が速い
  • C言語と互換性がある
  • 組み込みだけでなく、アプリ系や組み込みIoTなどでも使える

C++のデメリット

  • 仕様・文法がC言語に比べると非常に多く複雑
  • 習得難易度がかなり高く初心者向きではない

 

いきなりC言語とハードウェアのある程度知識を持たずに

C++をやると理解できずにかなりの確率で挫折します。

また、せっかく勉強しても身に付くまで使わないと

すぐに忘れてしまうので注意してください。

tomozo

私自身C言語を理解した状態でも何度も挫折しました

Java

Javaは1996年にサン・マイクロシステム社がリリースした言語です。

最近はCPUの性能も上がり、メモリも増えているので

Javaを使った組み込み機器も増えています

ただし、Javaだけで完結するシステムは非常に少なく、

情報機器のコンテンツ程度といわれています。

 

私は組み込みエンジニアでJava専門という人

には出会ったことはありませんし、

教育セミナーでも組み込み向けのJavaというのをほとんど見かけません。

 

Javaのメリット

  • 動作速度が速い
  • セキュリティー性が高い
  • オブジェクト指向

Javaのデメリット

  • 仕様・文法がC言語に比べると非常に多く複雑
  • 習得難易度がかなり高く初心者向きではない

 

私自身組み込みでJavaを使ったことはなく、

androidアプリを作る時に勉強し利用しました。

C++に近い言語なので、C++を理解していれば

入っていきやすいと感じましたが、

活用するには理解すべきことが多いです。

 

やりたいことがJavaでないとできなかったり、

就職したい会社で必要というのでなければ

上で紹介した2つの言語をマスターした後から学習しても問題ありません。

アセンブリ言語

現在は使われることがかなり少なくなりましたが、

昔はマイコンの性能が低くメモリも少なかったので、

組み込みの主流はアセンブリ言語でした。

 

特徴としては

  • 一番機械語に近いプログラミング言語
  • 実行速度が最速(書いたとおりに実行される)
  • サイズがコンパクトなプログラムが作れる
  • マイコン(CPU)への理解が深まる

特にレジスタと呼ばれるマイコンの内部メモリを

直接読み書きしたりするので、

経験の浅い方がアセンブリ言語を学ぶとマイコンの勉強にもなります

 

ただしC言語などの高級言語と違い、

  • プログラムが直感的でなく読みずらい
  • マイコンごと言語が異なる

といったデメリットがあります。

 

例えば、

Ram_Aの値を2倍してRam_Bに代入するという

簡単な掛け算の処理を

C言語の場合

Ram_B = Ram_A  * 2;   //Ram_Aの値を2倍してRam_Bに代入

と算数のように書けるのに対して、

アセンブリ言語の場合は (*moveやshiftは説明のため分かりやすくしています)

move  Ram_A,R0   ;Ram_Aの値を汎用レジスタR0レジスタに移動
shift R0,1       ;汎用レジスタR0レジスタの値を1回シフト(2倍)
move  R0,Ram_B   ;汎用レジスタR0レジスタの値をRam_Bに移動

のような感じで3行も書きます。

行数が多いだけでなく、2倍しているだけなのに

なんだか分かりにくくないですか?

掛け算専用の機械語もありますがシフトしたほうが処理は早いです。

またマイコンメーカーによって、

Ram_AとR0が左右逆だったりしてややこしいです。

 

私自身、大学ではC言語を学習し、就職した後しばらく

アセンブリ言語で開発していました。

人の書いたプログラムや過去に自分が書いたものでも

時間がたったプログラムの可読性はとにかく最悪で

理解するのに膨大な時間がかかっていました。

 

アセンブリ言語は現在ではほとんど使いませんし、

マイコンごとに記述が異なるので、どんなものか知っておいて

必要になってから学習しても問題ありません。

その他のプログラミング言語は?

人気のあるPythonやJava Scriptなどモダンな言語は

AIなどの最先端技術であれば、Pythonが必要なケースもありますが

通常の組み込みプログラムではほとんど使われません

C/C++/Java以外のプログラミング言語知識しかない状態なら

組み込み業界に入っても実践では厳しいです。

 

必要な言語を一つか二つに絞って極めるほうがエンジニアとして

実践向きです。

 

後発のその他言語はC言語などに比べると易しく、学習時間は短くてすみますので

必要になりそうだと分かってから始めても大丈夫です。

 

これらの言語は、イチからゴリゴリ書いていくのではなく、

やりたいことが実現できるライブラリを調べて、

組み合わせ・改良しながら使いこなすことが多いです。

tomozo

とはいっても、色々興味を持つのがエンジニアなので新しい言語をつまみ食いしたくなるのですがほどほどに

どれからやればいいの?

組み込みエンジニアを目指す方であれば、

  • C言語→C++→(その他やりたいことに必要な言語)

がおすすめです。

 

C++までしっかりできれば、十分即戦力になります。

C++のあと、必要な言語がなければ無理して他の言語に手を出さずに、

プログラミング以外のマイコンやハードウェアなどの学習をしたほうが実践的です。

 

プログラミングの勉強方法

必要なプログラミング言語紹介の続いて、勉強方法を紹介します。

プログラミングの勉強方法は以下の3ステップになります。

  1. 書籍を読む、動画を見る
  2. 他の人が書いたプログラムを自分で理解しながら書いて実行する
  3. 自分で考えたプログラムを書き実行する

書籍を読む、動画を見る

まずは、文法を覚えないと始まりませんので、

  • 入門書、中級向け、手引きの3冊
  • 人気があり売れている
  • 自分で読みやすそうに感じるもの

書籍を購入して読み進めましょう

 

途中で分からないところがあっても、そこで考えこまずに

そのうち分かるって気持ちで進めてください。

また、途中で気分転換を兼ねて分からないところを

解説したYouTube動画やホームページを見て理解を深めましょう。

 

例えばC言語の場合、「ポインタ」って難関があります。

tomozo

私も初学者のころはポインタって何??って感じで全然分かりませんでした

 

おそらく書籍だけで100%理解するのは難しいので、

ある程度読んだら何往復もせずに次のステップに進んでくださいね

 

こちらの記事でおすすめ書籍を紹介しています。

組み込みエンジニアにおすすめ書籍と読書習慣のススメ【志望者必見】

他の人が書いたプログラムを自分で理解しながら書いて実行する

書籍や動画を一通り見終えたら、そこに出てきたプログラムを

復習を兼ねて自分で書いて実行してみましょう

 

読んだり見たりして分かったつもりになってもいざ書いてみると

あれ?ってなるところが出てきますので、そういったことを

繰り返していくうちに覚えていけます。

 

自分で手を動かすってどうしたらいいの?

エンジニア志望あん

tomozo

マイクロソフトのVisual Studio Communityがおすすめです

Visual Studio Community

昔は有料ツールだったのですが、今は無料で使うことができます

また機会を見つけて使い方などを紹介できればと思います。

 

プログラミングコードだけ追っかけていて、

意味が分からなくなってきたら分解して考えるのがコツです。

自分で考えたプログラムを書き実行する

最後は自分で考えてオリジナルのプログラムを書いてみましょう

実際に、自分で何か簡単なものから作っていくのが一番勉強になります。

 

いきなり何を書いたらいいか分からないって人は、

2で書いたサンプルプログラムを元に修正を加えてみてください。

 

簡単な例をあげると足し算のプログラムを書いたのなら、

他の引き算や掛け算をやってみるとか、少しずつ修正を加えてみます。

 

ネットで調べると、大学生向けに課題を紹介したサイトなどもあるので

そういったものに挑戦してみるのもいいですね。

調べていくとこんなこともできるんだと知識が増え

じゃあこんなことやってみようってアイデア広がっていきます。

 

英語で単語や文法を知っていても、外国人と話できないのと同様に

プログラミングも使える知識でなければ実践では役に立ちません。

あれこれ好きなようにプログラムを自作して楽しみましょう

 

tomozo

プログラミングは難しいものと固定概念をもってはいけません

文法や手段がたくさんあるので、いきなり全部覚えようとしたら難しく感じて挫折します。

やりたいこと・目的を解決する手段だけを調べて、一つずつ理解するのが大事です。

テストじゃないので、その時分からなければ調べることができます。

優秀なエンジニアは調べるのが早くて上手いので解決に早く到達できます。

 

まとめ

組み込みで使うプログラミング言語

  • C言語
  • C++
  • Java
  • アセンブリ言語

C/C++を優先的に学習しよう

学習方法

  1. 書籍を読む、動画を見る
  2. 他の人が書いたプログラムを自分で理解しながら書いて実行する
  3. 自分で考えたプログラムを書き実行する

学習時の要点

  • 難しく考えずに楽しみながらプログラミング
  • 覚えるのではなく理解する
  • 分からないことはその時調べる

 

組み込みエンジニアに必要なプログラミング言語と

学習方法を解説しました。

プログラミングしたものが思い通りに動いたときは

すごく楽しいので是非やってみてください。

こちらの記事で組み込みエンジニアの勉強についてまとめていますので

よかったら読んでみてください。

組み込み系の勉強まとめ【必修】ソフトエンジニアとして学ぶべきこと

プログラミング学習は事らの記事でも紹介しています。

Udemy(ユーデミー)はおすすめ/体験談とおすすめ講座を紹介

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA