見出し画像

最後の技術者たち:消えゆくIT伝統芸の記録(2)

第二話 アセンブラ

機械の鼓動を聞いていた人たち

第一話では、ファジー制御について古代守さんに話を聞きました。

機械が人間の『なんとなく』を理解しようとしていた時代。
その記憶をたどるなかで見えてきたのは、失われた技術そのものではなく、技術者が機械と向き合う姿勢でした。

第二話で訪ねたのは、アセンブラです。

コンピュータに最も近い場所で、機械の都合を人間が引き受けていた言葉。
高級言語でも、AIが生成するコードでもありません。
レジスタ、番地、割り込み、クロック、I/Oポート。
機械が実際に動く場所に、最も近い言語です。

話を聞いたのは、真田志郎さんです。

かつて組み込み制御の現場で、Z80、8080、6800、68000、8086といったCPUを相手に、アセンブラでプログラムを書いてきた技術者です。

作業机の上には、古いワンボードマイコン、ROMライタ、EPROM、ロジックプローブ、8インチフロッピーディスク、そして16進キーボードのついた小さな装置が置かれていました。

真田さんは、その装置を見ながら、少しだけ笑いました。

『そりゃあ昔はな、キーボードと言っても、今のようなものではなかった。0からFまでじゃ。16進数を、一つずつ打ち込む。間違えれば動かん。いや、動かんだけならまだましじゃ。どこを間違えたのか、それすら分からなくなる』

0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。

それが、機械へ命令を渡す入口でした。

現在なら、コードを書き、コンパイルし、デバッガで追跡します。
けれど、当時の現場では、命令表を開き、番地を数え、16進コードを紙に書き、それを直接入力することもありました。

真田さんは、古いノートを開きました。

そこには、手書きの番地表と、ニーモニックと、16進コードが並んでいます。

LD A,(HL)
INC HL
CP 0D
JR NZ,LOOP

若い読者には、ただの記号に見えるかもしれません。
しかし、真田さんには、その一行一行が機械の動きとして見えていました。

『これを見るとな、頭の中でレジスタが動くんじゃ。Aに値が入り、HLが一つ進み、比較して、違えば戻る。ソースを読んでいるというより、機械が一歩ずつ歩いているのを見ている感覚に近い』

機械が歩いている。

アセンブラを書く技術者は、コードの意味だけを読んでいたのではありません。
CPUの内部で、どのレジスタがどう動き、どの番地へ飛び、どのタイミングで信号を出すのかを見ていました。

真田さんが若い頃、現場で『ゼッパチ』と呼ばれていたCPUがありました。

Z80。

ザイログが開発した8ビットCPUです。

日本のマイコン、制御機器、ゲーム機、学習用コンピュータ、組み込み装置の中で、多くの技術者がこの石に触れました。

真田さんの目が、少しだけ柔らかくなります。

『ゼッパチは、いい石じゃった。Aレジスタ、HL、DE、BC、それにIX、IY。どこに何を置くかで、書いた人間の癖が出る。Aを空けておくのか。HLをポインタにするのか。DEを逃がしに使うのか。スタックに積めば済むと思う者もいるが、積めば遅い。戻し忘れれば、それで終わりじゃ』

レジスタとは、CPUの中にある小さな作業場所です。

高級言語では、変数を書けば、細かな配置はコンパイラが考えてくれます。
しかしアセンブラでは、どのレジスタに何を入れるかを、人間が決めます。

そこに、技術者の腕が出ます。

『Z80と8086では、考え方がまるで違う。68000はきれいな石じゃったが、あれはあれで流儀がある。CPUには性格があるんじゃ。命令セットを覚えただけでは足りん。そいつが、どう動きたがっているかを見ないといかんのじゃ』

CPUがどう動きたがっているか。

まるで機械に人格があるかのような言い方です。

しかし、制御系の現場では、それは単なる比喩ではありませんでした。

同じ命令でも、クロック数が違う。
同じ処理でも、メモリの使い方で速度が変わる。
同じ信号でも、出すタイミングで機械の挙動が変わる。

アセンブラとは、機械の性格に合わせて、人間が身をかがめる言語でした。

棚の奥には、マイクロカセットも残っていました。

まだフロッピーディスクが高価だった時代、小さなプログラムやデータは、カセットテープに保存されることがありました。

真田さんは、苦笑します。

『マイクロカセットは、気まぐれじゃったな。ピーガー鳴って、じっと待つ。待ったあげくにエラーが出る。あれは記録装置というより、精神修行じゃった』

音として保存されたプログラム。
読み込みに失敗すれば、また最初からです。

そこへ、8インチのフロッピーディスクが現れました。

今の感覚では、巨大で、薄く、扱いにくい記録媒体です。
けれど、当時の技術者には、未来そのものでした。

真田さんは、両手で大きな四角を作って見せました。

『8インチのフロッピーが来たときは、驚いた。保存できる。読み戻せる。テープより速い。今の人から見れば大きな円盤かもしれんが、あのときは本当に、便利なものができたと思った』

大きいのに、未来だった。
遅いのに、革命だった。

技術の進歩は、あとから見ると滑稽に見えることがあります。
しかし、その時代の現場では、それが本当に世界を変えていました。

やがて、話は制御系の怖さに移りました。

仕様書には、簡単に書いてあります。

信号を出す。
モーターを回す。
センサーを読む。
割り込みを受ける。
I/Oポートに値を書く。

しかし、現場では『いつ』が問題になります。

早すぎてもいけない。
遅すぎてもいけない。
長すぎてもいけない。
短すぎてもいけない。

真田さんは、古いオシロスコープを指さしました。

『仕様書には、信号を出すとしか書いていない。だが現場では、いつ出すかが命なんじゃ。1クロック遅れただけで、モーターが妙な音を出すことがある。割り込みを止めすぎれば通信が落ちる。そこは、波形を見なければ分からん』

アセンブラは、単に古い言語ではありません。

機械の時間に、人間が合わせていた時代の言語です。

クロック。
割り込み。
スタック。
ポート。
番地。
フラグ。

それらは抽象的な概念ではありませんでした。

実際に機械が鳴る。
止まる。
熱を持つ。
暴走する。
焦げる。

その感覚の中で、コードは書かれていました。

そして、真田さんは、最近のAIによるコード生成についても慎重です。

『AIは便利じゃ。否定するつもりはない。じゃが、制御系では、それらしいコードがいちばん危ない。動きそうに見える。理屈も合っているように見える。だが、実機に載せた瞬間、機械はそんな言い訳を聞いてはくれんのじゃ』

現在、私たちは日常的にアップデートに慣れています。

Windowsは更新されます。
スマートフォンのアプリも更新されます。
ブラウザもクラウドサービスも、あとから修正されます。

バグがあれば、パッチを当てればよい。
不具合があれば、次のバージョンで直せばよい。

そういう文化の中で、私たちは暮らしています。

しかし、制御系の現場では、その感覚が通用しないことがあります。

原子力発電所。
航空機。
管制システム。
自動車。
医療機器。
鉄道信号。
宇宙開発。
工場プラント。

そこでは、一つのバグが人命に関わります。
一つのタイミングのずれが、事故につながります。
一つの見落としが、回収不能の損失になります。

真田さんは、しばらく黙ったあと、ゆっくりと息を吐いて言いました。

『パソコンならな、再起動してくださいで済むこともある。けれど、飛行機は空の上で再起動なんぞできん。原発も、自動車も、ロケットも同じじゃ。一つ番地を間違えた。一つ割り込みを見落とした。一つタイミングを外した。それだけで、人が死ぬことがある。あとでパッチを当てます、次の版で直します。そんな考え方はな、制御の現場では冗談にもならん。冗談にした時点で、もう現場に立つ資格がないんじゃ』

その言葉には、古い技術者の頑固さだけではなく、機械が現実の世界に触れる瞬間を知る者だけが持つ、静かな恐怖がありました。

便利になったことは、間違いありません。
抽象化が進んだことも、進歩です。
AIが開発を支援することも、否定すべきではありません。

しかし、機械は最後には現実の世界を動かします。

モーターを回す。
弁を開く。
ブレーキをかける。
燃料を送る。
信号を切り替える。
炉を冷却する。
機体を制御する。

その瞬間、コードは文字ではなくなります。
現実に触れる力になります。

アセンブラの技術者たちは、その怖さを知っていました。

メモリが少なかったから、無駄を削りました。
CPUが遅かったから、クロックを数えました。
デバッガが貧弱だったから、頭の中で実行しました。
現場で機械が暴れたから、波形を見ました。
一つのバグが怖かったから、何度も確認しました。

それは、古い精神論ではありません。

制約の中で、機械と正面から向き合っていた時代の作法でした。

真田さんは、古いZ80のボードを手に取りました。
指先で、基板の端をそっと撫でます。

『こいつはな、遅い。今どきのスマートフォンとは比べものにもならん。メモリも少ない。命令も限られている。けれどな、こいつが何をしているかは見えたんじゃ。Aレジスタに何が入り、HLがどこを指し、フラグがどう立つか。こちらが一つ間違えれば、こいつはその通りに間違える。勝手に気を利かせたりはせん。ごまかしも効かん。だから怖かった。だが、そのぶん面白かった』

怖いし、面白かった。

その短い言葉には、アセンブラという技術の本質がありました。
機械は、人間の失敗を隠してくれません。
しかし、人間の意図もまた、余計な解釈を挟まず、そのまま受け止めてくれます。

そこには、便利さとは違う信頼がありました。
機械に任せる信頼ではありません。
機械のふるまいを、自分の目で最後まで引き受ける信頼です。

アセンブラは、人間にやさしい言語ではありません。
便利な言語でもありません。
生産性の高い言語でもありません。

しかし、機械が何をしているのかを、人間に突きつける言語でした。

高級言語は、人間に考えやすい世界を与えます。
アセンブラは、機械が本当に動いている世界を見せます。

その距離の近さが、かつての技術者を育てました。
そして、その距離の近さゆえに、アセンブラは現代の開発現場から遠ざかっていきました。

いま、アセンブラを日常的に書く人は少なくなりました。

けれど、完全に消えたわけではありません。

ブートローダ。
デバイスドライバ。
OSカーネル。
組み込み制御。
セキュリティ解析。
リバースエンジニアリング。
レトロゲーム保存。
古い産業機械の保守。

機械に近い場所では、今もその知識が必要とされています。

ただし、それを語れる人は減っています。

真田さんは、棚の奥から古い紙のファイルを取り出しました。表紙は日に焼け、角は擦り切れています。中には、手書きのニーモニック、番地表、タイミングチャートが、几帳面な文字で残されていました。

『こんなものを、いまの若い人に見せたら、まず嫌がるじゃろうな。なんじゃこれは。呪文か、古文書か。そう言われるかもしれん』

そう言って、真田さんは小さく笑いました。けれど、その笑いはすぐに消えました。

『けれどな、嫌がってもいいから、一度は見ておいたほうがいい。コンピュータというものは、本当はこういうものなんじゃ。雲の上で勝手に賢くなっているわけではない。魔法でもない。AIが、どこかで勝手に考えているわけでもない』

真田さんは、番地表の一行を指でなぞりました。

『ここに番地がある。ここに命令がある。ここでメモリを読み、ここでレジスタが変わる。どこかで電気が流れ、どこかで信号が出る。そこを見ずに、便利じゃ、賢いじゃと言うのは、少し怖いんじゃ』

コンピュータは、雲の上に浮かぶ魔法ではありません。

その奥では、いまも電気が流れ、番地が読まれ、命令が実行されています。メモリが読み書きされ、レジスタが変わり、信号が出て、現実の機械が動いています。

アセンブラは、その場所に、人間がもっとも近くまで降りていくための言葉でした。

そして、その場所を知る人が減っていることは、単なる懐古では済まない問題です。

AI時代に、私たちはますます抽象化された世界で生きています。画面の向こうで何が起きているのか。コードの奥で何が動いているのか。機械が現実に何をしているのか。

それを知らないまま、便利さだけが積み上がっていきます。

そのとき、最後に現場へ呼ばれるのは、古い技術を知る人かもしれません。

動かない装置。読めないコード。残されたROM。行方不明の仕様書。誰も触れなくなった制御盤。

そこで真田志郎さんは言います。

『まず、番地を見せてもらおう』

第二話、アセンブラ。

それは、機械語のとなりで、人間が機械の都合を引き受けていた時代の物語です。

アセンブラは、古い言語ではありません。

機械の鼓動を聞くために、人間が耳を澄ませていた時代の言語なのです。

次回は、COBOL。

金融と行政の奥底で、いまも静かに動き続ける古い言語を訪ねます。

文・武智倫太郎

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