My Daily Programming Life...

人生最大の矛盾

まだ生まれてから30年たっていないけれど、そのなかでもっとも長く解決できなかった、納得できなかった問題がある。それはコンピュータのコンパイラ、またはOSのこと。問題は、コンパイラやOSがどうやって作られているかということだった。

僕が初めてプログラミングをしたのは中学生の時。それっぽいのを書いたのはDOSのバッチファイルが最初。だけど、すぐに情報不足に陥ったし、なんだかできることが少なくてつまらなかった。僕のなかでやりたかったのは、MS-DOSを作ること。コンピュータを初めてさわったときから、ずっとそのことを考えていた。
だけど、当然当時はネットなく、本も田舎じゃほとんどないしお金もないから買えない。ASCIIなどの雑誌を読んでも結局表面的なことしか書いていないし、わからずじまい。

その後、Visual Basicを買った。これは本格的なプログラミングをしてみたいという一心で買った物。当時の買い物としてはかなり高かった。中学生が2万6千円もするソフトを買わなくちゃ行けない。それでプログラム書いた。それまでにできなかったようなことがたくさんできたしかなり楽しかった。そのころはWindows 3.1。Windows 95が出る直前で、95はハードディスクの容量が円グラフで表示された最初のWindowsだった。当時そのスクリーンショットを見てそれをWindows 3.1でやりたいと思って、Visual Basicでがんばった。でもVisual Basicにはディスク容量を取得する関数はなく、Windows APIを直接呼ぶ必要があった・・・というのは今だから説明できること。当時はなんとしてもそれがやりたくて、ひたすらにいろんなことをしらべて、APIを呼び出す方法みたいなのをたまたま見つけて、それでやったらうまくいった。理由や仕組みなんて全然わからなかったけど、うれしかった。でも残念ながら円グラフにすることはできず・・・当時はまだπやらθとかラジアンとかの意味を知らなかったから。しかたなく棒グラフにした。今考えると我ながらよくやったもんだなぁと思う。

ちょっと話は脱線したけど、問題はVisual BasicでもMS-DOSが作れないことだった。その気配すら感じられない。つまりWindows上で動くウィンドウは作れるけど、スイッチ入れたら動き出すようなプログラムは作れない。そりゃそうだ・・・っていうのは後になってわかったこと。当時はどうなってるんだかさっぱりだった。

その後、Cという言語が重要なことを知った。うーん、もしかしてCならOS作れるのかなぁなんて当時は思った。んで勉強した。でもやっぱりOSは作れそうになかった。だって、CのコンパイラはOSの上で動いている。どうしたって無理だ。これが最大の矛盾だった。というのもMS-DOSやWindowsはCで書かれているなんていう情報を見たことがあったからだ。
Cで書かれているなら、それをコンパイルしなきゃ行けない。でもコンパイルするにはOSとコンパイラが必要なんじゃないの?・・・ってことになる。これが中学生の時から頭の中にあった矛盾。

中学から高校ぐらいのころの僕はずっとこれが頭に引っかかったままソフトウェアを作ってた。つまりコンピュータそのものはきちんと理解せず、Windowsプラットフォームという抽象マシンの上でだけプログラムを作ることができた。

それから、かれこれ13年ぐらいたつ。意味がはっきりわかったのは3,4年前だった。「
はじめて読む486」これをきちんと読んだときだった。そういうことなのかって。もちろんそれまでWindows APIや、Cでプログラムを書いてきていたのでだいたいの感じはわかっていた。でもその瞬間というか、それがわかったときは本当に長年もやもやしていた物が取れて、世界が開けた感じがした。きっと情報系の学科に行っていたりすればとっくにわかっていたことなのかもしれない。でもまあいい。

いまでも正直直感的には、コンパイラの話というのは不思議な感覚がある。つまりコンパイラもCとかで作られていて、それをコンパイルするにはコンパイラが必要であると言うこと。これは基本的には、はじめは小さなコンパイラを機械語で作って、それを利用してより強力なコンパイラを作って・・・と繰り返すことで巨大なコンパイラができあがってきたということなんだと今は理解している。
この、自分が自分より大きな物を生み出す感覚、なんとなくエネルギー保存則を破っているような感覚が直感的に違和感がある。これがコンピュータのすごいところなのかもしれない。

0 コメント:

Post a Comment

feedSubscribe to my feed