眠れない。
どうも寝つきが悪い。
こんなときは、頭の中であれこれ「物を動かす」に限る。今日はその「頭の中で物を動かす」話をしよう。 現在のコンピュータは、記憶装置の中のデータを操作することで仕事をする。記憶装置、つまりメモリは順番に番号がついている箱のような物である。
123456789 △△△△△△△△△
コンピュータは、これらの箱にデータを格納したり、これらの箱からデータを取り出したりして仕事をする。その手順書がプログラムだ。上には9個の箱しか書かなかったが実際にはこれが何百万個とある。
どんな大きなプログラムであっても、最終的にはメモリの中のデータの操作にすぎない。ただそれが非常に複雑になっているだけのことだ。
例えばワープロソフトを考えてみよう。あれもプログラムの一つ。だから、それがやっていることも、「どこかのメモリの内容を見て、それをもとに計算して、どっかのメモリの内容を書き換える」ということだけ。もっともその操作の数たるや一秒間に何百万回にも及ぶ。
ワープロの「中央揃え」の機能を考えてみよう。中央揃え、っていうのは、メモリ上の、
123456789 夢空間△△△△△△
というデータを、
123456789 △△△夢空間△△△
と書き換えるわけだ。 人間相手ならば、 「真ん中にこの文字列を移動する」 と言っておくだけでどうやるかは察してくれる。けれどもコンピュータはそんなことはない。手順をいちいちプログラムとして教えてやらなくてはならない。手順として、
(1)まず空白の個数を数える。
(2)それを2で割る。
(3)その分の空白を挿入する。
という流れになるが、プログラムとしては不十分だ。「空白の個数を数える」のはどうやるのか。「空白を挿入する」とは何なのか。そもそも空白とは何ぞや。…これらをすべてきちんとプログラムという形で表現し、コンピュータに教えなければならない。
「文字列を中央にそろえるなんて単純なことなのに、そんなめんどくさいことをしなくちゃいけないなんて、愚かしい」という人もいるであろう。実際、そうである。
しかし、文字列の中央揃えということを全く知らない人、しかもまったく「察する」ことをしてくれない相手に説明しようとすることを考えてみると、プログラムに書く程度の情報は必要であることがわかるのではなかろうか。コンピュータはそういう相手なのである。
* * *
プログラマはプログラムを書いたあと、プログラマであることを休み、コンピュータの立場に立つ。自分がいま書いたプログラムをコンピュータがどう実行するかを自分の頭の中でシミュレートし、一歩一歩トレースするのである。
私は、夜、寝つきが悪いときは頭の中でプログラムをつくり、箱だの文字だの数字だのをあっちに動かしこっちに動かしという操作を行って遊ぶ。そのうちに箱を運ぶのにくたびれて眠たくなってくる。
* * *
私たちが毎日なにげなくやっている動作…歯を磨く、着替えをする、ご飯を食べる…そういった動作の詳細を人に伝えようとすると、とても複雑な情報を伝達しなくてはならないことに気付く。シャツを着るタイミングだとか、魚の骨を箸で取るとりかたなどにいたっては、そう簡単に相手に伝えられるとは思えない。ふだん言葉に表現しないで無意識に行なっている動作ほどそうである。
プログラムを書くというのは、決して冷たくて機械的な人間になることではない。毎日の生活の中でなにげなく見ていた事物、その事物の振舞い、ひいては自分の考え方、そういったものを新鮮な目でとらえなおし、言葉を使って明確に表現しようと努力することなのではないだろうか。
(Oh!PC、1991年4月30日)