基礎を身につける

めずらしく、研修に出ていた。基礎の基礎を身につけるための、初心者向けの入門講座である。

我々プログラマは、コンピュータを武器に戦う人種である。しかし、現役プログラマの何人が、コンピュータ内部の構造や動作の詳細を理解しているだろうか。CPUがバカみたいに速くて、メモリも湯水のように使える昨今の環境では、多少乱暴なプログラムを書いても動いてしまう。それだけに、下層のことを考えずに高級言語と一部APIを覚えるだけで満足していないか。

どんなソフトウェアも結局はハードウェア上で動作し、最終的にはハードウェアを動かす。つまり、、ハードウェアの限界に制約を受けるし、制約内であれば何だってできる。ハードウェア、我々の場合はコンピュータそのものを理解し、できることとできないことを把握することは、ソフトウェア開発にも多大な恩恵がある。例えば、Cプログラマを悩ますコアダンプとて、それが起こる理屈をこのレベルで抑えておけば、おのずと原因を推測でき、手早くデバッグできるのである。

自分の得物のことを知らずして戦えるわけもない。基礎から完璧に抑えよう。そんなわけで、研修はCPU基盤を自作するところからスタートする。

研修講師は我が社のおそらくトップエンジニア。研修参加メンバーは、大体中堅以上の、技術的にある一線を越えているエンジニアである。技術力が無い人間は来るだけ無駄である。技量がどうこうという問題ではなく、おそらく興味を持てないであろうからだ。技術に興味があれば、いまいち残念な技量に甘んじているわけがない。それに、ここで受講している連中が後々水平展開していく計画なので、放っておいても何かしらの形で伝えられるであろう。

基盤に抵抗やらコンデンサやらをチクチクと半田付け。失敗したらファイルを破棄してcvs update、というわけにもいかないので、慎重に。不器用で鳴らしているこの俺だが、細かい作業を根気よく続けるのは意外と得意であったりする。電子部品など見慣れていないので一部わからないパーツがあるが、完成図を見ながら、たぶんこれだろう、ぐらいの感覚でとにかく付ける(どこが慎重だ)。

完成後、PCに接続してプログラムを送り込み、実行。なんかLEDが光ったりしているので、動いているようだ。プログラムはCで書くが、おそらくアセンブラにもお世話になることであろう。こうした基礎技術の重要性はうすうす感づいていて、そっち系の本をつらつらと眺めていたりしたのだが、やはりただ本を読むのと実際に書くのとは感覚が異なる。いよいよ本番といったところである。元々Cプログラマでポインタに慣れ親しんでいるだけに、Javaプログラマに比べてアセンブラへの距離はちょっと短いと思うが、まぁ五十歩百歩か。

プログラミングの学習は次回に持ち越しである。基盤を持ち帰って、いろいろいぢって遊ぶように言われる。そんなもん言われるまでもない。同じく研修に参加している先輩が、先行して完成させて、基盤上で横並びになっているLEDをつかってナイト2000の真似事をやらかしたのである。先を越されたのが非常にくやしい。ガリガリいぢって、アセンブラの一つや二つ我がモノにしてくれる。そして、こうなったら、対抗してライフゲームでも・・・LED一列じゃ無理か。

コンピュータの基礎であり真髄である部分をこうして身につけていくわけである。修了した暁には、一回りも二回りも大きくなって、ハッカーやウィザードといわれる人たちにグンと近づいている・・・といいなぁ。