見出し画像

第2回 荷物をAからBへ ── ソフトウェアの本質を叩き込まれた2年目


「ハードもソフトも分かるエンジニア」という方針

前回、1年目のハードウェア漬けの日々を書いた。回路図とにらめっこし、毎日はんだ付けに明け暮れ、Z80のボードを20枚も手配線していたあの頃だ。

私が入社した会社には、明確な教育方針があった。「ハードとソフトの両方を理解したエンジニアを育てる」ことだ。片輪にはしたくないと言われた・・・

正直、当時はその意味がよく分からなかった。専門分業が当たり前だと思っていた私は、ハードのプロ、ソフトのプロにそれぞれ分かれればいいじゃないか、と考えていた。なぜわざわざ両方をやらせるのか。その答えは、ずっと後になって理解することになる。

2年目、突然のソフトウェア部署異動

ハードウェア漬けの1年目が終わり、2年目に入ると、会社から突然の部署異動を言い渡された。私はソフトウェア部署へ回されることになった。

同期はもう一人いた。だが彼は、子どもの頃からハードウェアを触っていて、はんだ付けの腕も抜群だった。つまり、スタート地点ですでに大きな差がついていたのだ。ハードが得意な彼はそのままハードウェア部署に残り、一方の私は、畑違いのソフトウェアの世界へ放り込まれることになった。

専門学校時代にBASICの授業はあったが、チンプンカンプンでまるで歯が立たなかった。そんな自分に、ソフトウェア開発などできるのか。最初は不安しかなかった。

忘れられない、上司のクイズ

そこには、厳しい上司がいた。

今でも忘れない。ある日、その上司から「課題を考えてみろ」と言われ、出されたのがこんなクイズだった。

「ある荷物がある。これをAからBへ移動したい。どういう方法があるか?」

……全く分からなかった。この上司は、いったい何を期待しているのか。数時間考えても答えが出てこない。目の前には、だんだん苛立ってくる上司の視線。痛かった。

答えは、拍子抜けするほどシンプルだった。

「荷物の数を数えて、それを一つずつ移動させる」

つまり、こういうことだ。ソフトウェアの本質とは、メモリ上のデータを、決められた数量分だけ、別のメモリ領域へ移動させることなのだ。上司は、まずその思考法を私に叩き込みたかった。答えを聞いた瞬間の、すとんと腑に落ちる感覚は、今でも忘れられない。

6809のニーモニックと、4ビットマイコンのエミュレータ

考え方が分かったところで、次に渡されたのが6809のニーモニック表だった。「これを理解しろ」と。当然、最初は全然分からない。

https://www.6809.net/6809/?6809%CC%BF%CE%E1%C9%BD

6909命令リストです。まったくわからなかった・・・

そして、告げられた、無理難題の任務がこれだ。

「この命令を使って、4ビットマイコンのエミュレータを作れ!」

8ビットCPU(6809)の上で、4ビットマイコン(NECのμPD7554というマイコン)の各命令の動作をエミュレーションしろ、という。最初は「なぜこんな遠回りなことを?」と思った。8ビットで4ビットを真似させるなんて、面倒なだけに思えたのだ。

https://pdf.datasheet.live/0eedeff3/necel.com/UPD7554ACS-XXX.pdf

NECのμPD7554のデータシートを見つけた。参考まで。20pinの小さいCPUです。これをレーダ探知機へCPUを2つ搭載した基盤を開発したことを記憶している。一つは電波の強度からLEDと音を出す、レーダー制御、もうひとつは、車の速度をシガライターのDC電源からリップルを検知してパルス変換して、速度計測して、低速度では警告音を鳴らさない機能を開発した。当時コンビニの自動ドアは同じ周波数が出ていたので、低速度では不要な音が鳴ってストレスだったのを回避する機能したい。

だが、背景を知って納得した。

当時の4ビットマイコンには、まともなエミュレータが存在しなかった。開発したコードは、ワンタイムROMに焼き込んで実行してみるしかない。そして、このワンタイムROMというのが厄介だった。名前のとおり、一度しか書き込めない。間違っていたら、その石はもう使えない。新しいROMにまた一から焼き直す。動作確認のたびに石を消費し、神経をすり減らす ── 本当に非効率で、物理的にも精神的にも辛い作業だった。

だからこそ、自前でエミュレータを作る意味があった。書き込む前に、8ビット機の上で何度でも実験できる。複雑な処理であればあるほど、その恩恵は絶大だ。失敗を恐れず試して、確信が持ててから、ようやくワンタイムに焼く。8ビットで4ビットをエミュレートするという「遠回り」は、当時の開発環境では必然だったのだ。

製品としては、4ビットマイコンを活用して、もうこんなデザインのものは売ってないが、レーダー探知機の開発。今でも製品として発売はされているが、スピード違反の電波を検知して教えてくれる製品で当時も今も売れているとは思う。

自分が関わった製品が店頭のオートバックスなどに新製品として並ぶのは嬉しいものだった。それが製品開発の喜びというものです。

レーダー探知機

難しいことを考える先輩たちにとっては、大変良い訓練になっただろう。だが、ソフトウェア初心者の私にとっては、相変わらず厳しい毎日が続くのだった。

振り返って

40年近く経った今でも、あの「荷物をAからBへ」のクイズは、ソフトウェアの本質を突いていると思う。

データの移動。それがソフトウェアの根っこにある。AIがコードを書く時代になっても、計算機がやっていることは、結局メモリの間でデータを動かしているだけだ。あの上司が叩き込もうとしたものは、今もまったく古びていない。

データ構造について

そして、会社が掲げていた「ハードもソフトも分かるエンジニアを育てる」という方針 ── その意味が、徐々に私の中で形になり始めていた。

次回も、この続きを書いていきたい。

いいなと思ったら応援しよう!