what you see is what you get

名前だけでも覚えて帰ってください

今春“組み込み”プロ”グラマーになる人が、あと1週間とはいわないけどこれからやってほしい7のこと

今春“プロ”グラマーになる人が、あと1週間ですべき7のこと
http://hiroki.jp/2011/03/27/1767/

新入社員用のテキストをほそぼそと作ってるので
今日話題になった上記のエントリーはすごく参考になった。
ただどうしてもこの手のエントリーはWeb屋さんとかSIerとか向けのものが多くて
ゴリゴリした組み込み業界に足を踏み入れる人向けのエントリーが
なかなかないのが実情。

というか「普通の理系」でも
入社するまで組み込みってどんな世界かわからんのじゃないか。
僕もそうだった。

家電とかAV機器とか車とかケータイとか
「モノ」をつくる会社でプログラマで採用されたあなた、
あなたは間違いなく組み込みプログラマとして働きます。

というわけで自分なりに今春組み込み"プロ"グラマになる人向けに
組み込みプログラマ2年目の僕が思うことを綴ってみる。
ただし(Excel方眼紙に対してアレルギー反応がなくなるなど)
現場にかなり毒されている感があるので
「それはないだろー」的なツッコミがあるとうれしいです。

「僕はプログラマ採用されたんだ!」と思い込むのはやめよう。

仕事で組み込みプログラミングをやりはじめると
「僕はプログラマなのに、なんでこんなことをやるんだ!」って思うことがあると思う。

ここで忘れちゃいけないのはキミが動かすのはソフトウェアじゃない。ハードウェアだ。
キミが通信するのはこれからはサーバだけでなくて、
PLD/FPGAとかDACとかのICかもしれないし、別の外部機器かもしれない。
プログラマ」だけど回路図やプリント基板は絶対読めなきゃいけないし、
半田ごてでハンダ付けすることもあると思う。

プログラマだからと思い込んで
ハードウェアのことをおろそかにすると後々本当に苦労する。
「僕はプログラマなんだ」という先入観をもつのはやめて研修に臨もう。
ハードウェアもわかるプログラマが一番戦力になるし、転職をするときも一番有利。
「プログラムのことしかわからない組み込みプログラマは、ただのプログラマ」だよ。

大学の教科書を捨てない。

時期的に、もう手遅れかもしれないけど
まだ引越し荷造り中だとしたら、大学の教科書は捨てずに持っておこう。
特にデジタル信号処理とかフーリエ変換とか電気回路とか電子回路とか。
あと情報科学の分野のテキストも大事。
MOS-FETとかフリップフロップ回路とか
電気回路の内容が含まれている実験・演習の実験指導書もとっておこう。
いや、あの実験で使ったわざとらしい回路、実際に超使われてるんだってば!

C/C++の文法を確認しよう。

インターネットでプログラムとかアプリケーションの話題とか追っかけてると
華やか(に見える)Web業界で、みんながクールなWebサービス
PHPとかPythonとかRubyとかで作ってる話題を見ることが多いと思う。
僕も学生時代は簡単なウェブサービスとかつくって遊んでた。

ただ組み込みではほとんどの人がCかC++を使うことになると思う。
最近はJavaが動くマイコンも増えてきたけど、まだまだ少数派。
アセンブラは未だ全然現役。

Web界隈をずっとやってた人はCの言語仕様とか忘れちゃってるんじゃないかと思うし
そもそもちゃんと押さえていない人も多いと思う。
中途半端にプログラムかけちゃったりするせいで
結構分かってるフリしてるヤツが一番面倒臭いので
K&Rを読めとは言わないから
C/C++の文法とか言語仕様をちゃんともう一度確認しておこう。
特にポインターから逃げてた人、仕事にすると逃げられないよ。

ちなみにアセンブラを流したあとに
Cのポインタを考えると
「なんでこんなことにあんなに悩んでいたんだろう」と思うようになるよ。

Web系の言語を忘れていいってことじゃない。
その知識や経験は自作ツールを作ったりするときには大いに役立つから
引き続き伸ばすように。

コンピュータの基本動作概念をおさらいしよう。

組み込み初心者が組み込みプログラマになるからと言って
いきなり付け焼刃的に
トラ技とかディジタル・デザイン・テクノロジとかに手を出すと
何書いているか分かんなくて自信をなくすと思うのでやめたほうがいい。
(フレッシャーズ向け特集も全くの門外漢には結構レベルが高い)

まずはコンピュータ科学の教科書とかを使って
もっと基本的なコンピュータの動作概念をおさらいしよう。
キミが動かすだろうマイコンだってコンピュータなので基本は全部一緒。
よりハードに近い部分にアクセスするので、この知識は重要。
例えば
「メモリ空間」「ブート」「レジスタ」「アドレス」
についてきちんと説明できるだろうか?
代表的なレジスタにはどんなものがあるだろうか?

トラ技やディジタル・デザイン・テクノロジはそのあとでもOK。
まともな会社だったらきっと会社で購読してるはずだし
バックナンバーも揃えているはずだから、
落ち着いたら数年分のフレッシャーズ向け記事をまとめ読みするといいよ。
少なくとも何書いてるかは分かるようになるから成長も感じられると思う。

最強のデバッガ、オシロスコープ

組み込みプログラムの世界では、出力は画面に表示することだけじゃない。
(むしろ画面に表示を出せる局面でのデバッグは楽勝)
組み込みプログラマの一番基本的な出力は
マイコンの端子をHIGHにしたりLOWにしたりすること。
いわゆる"0"と"1"の世界を地で行くわけ。
あと不具合の原因が自分のソフトウェアだけが原因じゃなくて
ハードウェアの不具合であることもよくある。

そんな世界では開発環境を睨んでいても、バグの原因が見えないことがほとんど。
そんなときの味方がオシロスコープ
電子回路が今どういう状況かということを視覚化して見せてくれる最強のデバッガ。
なのでオシロスコープの使い方とか、何が出来るのかとかを復習しておこう。

ちなみに僕は大学時代に
アナログオシロを音声波形を見るために使った経験しかなかったので
会社に入って初めてテクトロニクスのデジタルオシロを使って驚いた。便利すぎ。

道具(PC,エディタ)を洗練させる。

これは「今春“プロ”グラマーになる人が、あと1週間ですべき7のこと」に
書いてある通り。
マイコン統合開発環境(HEWとか)のエディタは恐ろしく使えないので
使えるエディタを自分で整備できるようにしておこう。

僕は最初先輩社員に勧められて
(30,000円近い値段で、かつライセンス認証もある)MIFESを使用してたけど
今は結局Emacsに落ち着いた。

自分の近くで行われるプログラマが参加するイベントを押さえておこう。

組み込み界隈から見ると
Web系の人はいろんな勉強会とかイベントをやってて非常に羨ましいもの。
組込み系の勉強会とかはめったに見ない。残念だけど。
ただし組み込みプログラマでもプログラマプログラマ
自分の興味のあるイベントを探して参加してプログラマとしての交流を続けよう。
特に組み込み業界に長くいる先輩社員にはそういう習慣がないので
自分で探すしかない。

もしキミが関東で働くならMake: Tokyo Meetingはハズしちゃいけない。
どうにか都合をつけて参加しよう。

最後にひとこと

上にもちょっと書いたけど
組み込みをやりながらWeb系界隈を見ていると
なんか華やかで羨ましくなることがあると思う。
僕もそうで、PHPの勉強会とかに顔出して
みんなが新しい技術とかフレームワークを使っているのを見て
ものすごく時代遅れの業界にいる気分になって、すごく寂しかった。
自動テストとかがなかなか出来ない業界だし
開発手法もウォーターフォール一辺倒だし。
アジャイルとか憧れるけどどう導入すればわかんないし、
CだからUMLとか導入しづらいし。

けど音が出たりとかハードウェアが実際に動くようになると一気に面白くなる。
ただモノが動くようになるまでの間にはすごく時間がかかるんだけど。
ブレークスルーする瞬間がかならず来るので
それまでは諦めずに経験を積むことをおすすめします。

あのガジェットも、組み込みプログラムがないと動かない!