読者です 読者をやめる 読者になる 読者になる

Always Hungry

いろんなテーマをガツガツと更新しようかと思います。

新卒で組み込みソフトウェア開発者になった僕が勉強したこと。

こんばんわ僕です。

今現在私、「農家」なわけですが、去年までは「組み込み系ソフトウェア開発者」でした。

けど、大学ではソフトウェアの勉強は、かじる程度(以下参照)で就職したため、

先輩が言うことがまるで分らないレベルでした。

入社時のレベル
- プログラムってそもそも何なの
- includeってなんぞ!?おまじない!?
- OSって何してくれるの??
- 通信ボーって何?
- チェックリスト舐めるって何??

まぁここまで書いて思いましたが、よくも9年間しのげたものです。

こんな僕でもそこそこ大きい会社で何とかなりますんで、
心配で心配でたまらない人たちへの救いになればと思います。

じゃあまず何を勉強したか(間違い編)

一番初めに渡されたのは、製品をそのまま渡され、
ICEをつなげてプログラムを弄ってみろという難題でした。

(そもそもICEってなんだよ。。。)

Cとアセンブラで組まれている化け物に死亡しました。

まずはCがわからなければ意味不明なので、これを読みました。

新・明解C言語 入門編 (明解シリーズ)

新・明解C言語 入門編 (明解シリーズ)

内容的にはまぁ全体を読みこめればそこそこ戦えそうな内容でした。
しかし、Cは書けてもそもそもプログラムって何よという部分は書いてありませんでした。

一番最初に高級言語であるCを勉強するのは組み込み系開発ではいまいちな流れでした。

まずは「プログラムって何」ということを勉強する必要があるため、独学で勉強してみました。

じゃあプログラムって何?

なぜかソフトウェアって、難しい・頭がいいとできない。

等々のイメージがこびりついていますね。

それは自分もそうでした、しかし、調べてみると意外とシンプルなんですよね。

9年間プログラムを弄ってきた事を一言で表すと。

「作業がめちゃくちゃ早い素直な外人に、通訳を介して仕事を依頼する。」

これがプログラムだと思います。一つづつ見てみます。

- 作業がめちゃくちゃ早い素直な
これはCPUの事です。
CPUはもうめちゃくちゃ処理が早いです。
素直な部分はもうほんと素直で、言ったことしか出来ませんやってくれません。

基本的には0番地といわれる位置から、書いてあることを
順番が正確かつめちゃくちゃ早く実行していきます。

そしてそこで実行できる内容は、四則演算や、狙った番地にジャンプすることとか、
すごく単純な内容の組み合わせになっています。

- 外人
これは機械語の話です。
CPUというのは機械語(アセンブラ)を話します。
そしてメーカーや機種によって若干内容が異なります。
彼らと直接(翻訳せず)話すには機械語を覚える必要があります。

- 通訳
これはコンパイラといわれる物の事です。
高級言語(CとかJAVAとか)といわれる言語を機械語に翻訳してくれます。

- 仕事を依頼する。
これは高級言語でプログラムを行うことです。
踏み込むと機械語で依頼するといった事もここに入ります。

この段階で、プログラムってこんなものかーという事が何となく理解できました。

次にやったことは何か。

次はOSについて勉強しました。

僕の場合はμITRONがメインでしたので、
OSがつかさどる機能は何があるのか?

という部分をCPUマニュアルで勉強しました。

※CPUマニュアルはCPU購入時にもらえるはずです。

この部分を理解することで、なんとなーく全体の動作が見えて来ます。

更に次にやったことは何か。

OSというのはそーゆーことか。。
の後は、再度C言語をちゃんと勉強しました。

基本的な書き方(コーディングの仕方)は先ほど
紹介した本にかいてあるため、理解してなくても
本を読めば何とかなります。

新・明解C言語 入門編 (明解シリーズ)

新・明解C言語 入門編 (明解シリーズ)

その後は??

その後はもう普通に慣れて行くしかありません。

必要になる知識は開発対象によって大きく変わります。

早く覚えるためには先輩と飲みに行くことをお勧めします。

簡単に箇条書きにするとこういうこと

1.プログラムがいかに単純か。を知る
2.アセンブラの意味を知る
3.OSを使う場合、OSとはを知る
4.コンパイルの意味を知る
5.高級言語(CとかC++tか色々)を知る
6.ひたすら打ち込みをしてみる
7.ひたすらデバッグをしてみる
8.関数一つを設計してみる
9.関数についてチェックリストを作ってみる
0.どんどん設計の幅を広げてみる
  プロになる!!!

最期に

組み込みソフトウェア開発に必要なのは、

- まめな性格
- 好奇心旺盛
- デバッグをさぼらない

上記の3点を備えていれば、もう勝利は目前です。

ちなみに僕は「まめな性格」では無いため転職しました。

今はちょっと後悔しています。

この記事で、細部の説明は不可能なので、概要だけ書きました。

今のところなかなか声が届かないですが、
ブログを見てくれた「組み込みソフトウェア」

の方が何か不安などあれば相談乗れるかもしれませんグフフ。

まぁこんな僕でも何とかなりました。皆さんも頑張りましょう。