Software is Beautiful

第34回エンジニアの世代交代

一攫千金のチャンス

私は持ち込み原稿がきっかけで、高校生のときからアスキー出版でソフトウェアエンジニアとしてアルバイトをすることになった。当時はまだPCの黎明期で、NECからようやくPC-8001という8ビットPCが発売されたばかりだった。ソフトウェアの開発環境も整っておらず、すべて機械語でプログラムを書かねばならなかった。そのため、ソフトウェアを開発できるエンジニアの数がものすごく少なく、高校生の私でもあっという間に大人と肩を並べて仕事ができるようになってしまったのである。

そんな私に一攫千金のチャンスがやってきた。NECがPC-8001向けにCP/MというOSを移植していたのだが、フロッピーディスクへのアクセスがあまりにも遅く、アスキー出版に相談に来たのである。

私は、その手の高速化の話が当時から大好きだし得意だったので、当然のように私と相棒の増川くん(同じく高校生)がやることになった。それも、普段は時給500円程度で働いていた私たちに、⁠このプロジェクトに成功したら2人合わせて100万円を支給する」という破格の条件がアスキー出版から提案されたのである。1人50万円と言えば高校生にとっては大金である。私たちはさっそく泊まり込みで問題に取りかかることにした。

ディスクドライバの高速化

そこで現状のソースコードを見せてもらったのだが、想像以上に複雑な作りであった。本体とフロッピーディスクは8ビットのパラレルポートで接続されていたのだが、今のような便利な通信ファームウェアは存在しなかったので、そのポートをCPUから直接操作(ハンドシェイク)してデータを送受信する必要があったのである。調べてみると、そのCPUを使った通信に時間がかかっており、通信プロトコルそのものから直さない限り高速化は不可能なことがわかった。

幸いなことにフロッピーディスク側にも8ビットのCPUが搭載されており、PC側からプログラムを送り込んで走らせることができる設計になっていた。そこで、フロッピーディスク側のソフトウェアとPC側のソフトウェアの両方を大幅に変更し、新たな通信プロトコルでデータの送受信をすることにした。私はまだ情報理論も勉強したことがなく「通信プロトコル」という言葉さえ知らなかったが、どこを改良すべきかは一目瞭然であった。

データの伝送は「3線式ハンドシェイク」という方法が使われていたが、NECの実装は、1バイト送るごとにビジーシグナルをチェックして相手が受け入れ準備可能かどうかをチェックするという非効率な実装であった。これはどう考えても無駄なので、128バイトごとにビジーシグナルをチェックするように変更したところ、そ れだけで転送速度が数倍になった。

データが準備できたことを知らせるたびにステータスシグナルを上下させていたがこれも無駄なので、奇数バイトで上げ偶数バイトで下げるようにしたところ、さらに2倍の高速化ができた。

これだけでも十分な高速化ができたのだが、せっかくなのでフロッピーディスク側のソースコードを読んでみたところ、ディスクのアクセスは1セクタ(128バイト)ずつしかしておらず、連続したセクタを読もうとした場合、その隙間にディスクが1回転してしまうことがわかった。そこで読み取る場合には1トラック分(16セクタ)一度に読み取るように変更したところ、これでさらに数倍の高速化が実現できた。

エンジニアの世代交代

この仕事の結果、わずか2週間ほどで高校生としては大金を手に入れることができた私だが、今から考えてみると、まさに「良いタイミングに良い場所にいた」と思う。必要とされていたエンジニアの世代交代の真っ只中にたまたまいあわせたのだ。

1970年代後半の当時PCはまだ世の中に出たばかりで、仕事としてソフトウェアを作っていた人たちは、それまでメインフレームやミニコン向けの業務ソフトウェアばかり作っていたのである。まずはしっかりとした詳細仕様書を作り、それを下請けのエンジニアにコーディングさせるという「ゼネコンスタイル」のソフトウェア作りもそのころにできたのだと思う。そんな業界で働く人たちの頭の中には「3線式ハンドシェイクはこうあるべき」という固定観念があり、私のように「遅いから変えちゃおう」という発想が生まれる余地がなかったのだと思う。

また、上流のエンジニアが仕様書を書き、下流エンジニアがコードを書くというウォーターフロー型の開発体制で作っていると、実際にコードを書いている人に「こうしたほうが速くなる」とアーキテクチャやプロトコルを変更する権限もなければメリットもない。

そんな中で、常識も知識もなく何のしがらみもない高校生プログラマだからこそ、今でいうところの「アジャイル」な開発手法で、NECという大きな会社が解決できなかった問題を解決できたのである。

ある意味今の時代につながる、自分で設計からコーディングまでできる新しい形のソフトウェアエンジニアが必要とされる時代の始まりだったのだと思う。

おすすめ記事

記事・ニュース一覧