そんなつもりじゃなかったのに
- Say What You Mean -

夢空間への招待状

結城浩

私はプログラミングが大好きだ。その理由はたくさんあるけれど、その一つはバグを見つけた瞬間にある。

「さっきから何回も見ていたのに、どうして今まで気がつかなかったのだろう」

「こんな簡単なことが、なぜすぐにわからなかったのだろう」

などとしばし感慨にふけることもめずらしくはない。自分の愚かさに目がくらむような思いをすることもある。バグが見つからず二日徹夜した後で、lineという変数をlinesと書き間違えていたのに気がついたときは、あきれて声さえでなかった。いままでまったく動かなかった部分が、変数を正しくlineに書きなおしたとたんすべて正常に動作し初めたときの感動は言葉にできない。

バグがとれたときの「やられた」と「やったぞ」という二つの相反する感覚を、プログラムを書いたことのない人に説明するのは難しい。

 * * *

コンピュータはプログラムに従って動作する。これはコンピュータの初心者でも知っている基本知識である。しかしその意味するところは意外に深い。コンピュータはプログラムに従って動作する。よって、プログラムに書かれない処理は何一つ行なわれない。プログラマがいくらコンピュータを脅かしても、コンピュータに泣いて頼んでも、プログラムという形にしない限り、コンピュータは何もしてくれないのである。

このファイルは壊しては困るという人間の「意図」だとか、納期が明日に迫っているという人間の「都合」なんて、コンピュータは知ったこっちゃない。コンピュータはプログラムに書かれたことをただ実行していくだけである。十年間の研究成果が書かれたファイルだろうと一瞬で消すし、明日納めるべきソフトのソースプログラムをすべて消すこともある。そのようにプログラムに書かれてさえいればいいのだ。そこにはコンピュータの厳しさと冷たさがある。

考えてみると、プログラマは常に自分の愚かさを見せつけられる職業であるといえる。なぜなら、プログラムがうまく動かないのをコンピュータのせいにすることはできないからだ。実行しているコンピュータは悪くない。悪いのはそういう動作をするプログラムを書いたプログラマの方である。「そんなつもりじゃなかったのに」このセリフはコンピュータには通用しないのである。どんな「つもり」があっても、プログラムに反映されない限りそれはコンピュータには処理されない。

 * * *

学校の教師には、生徒に言ってはならないセリフがある。「なんでそんなこともわからないのだ」というセリフがそれだ。これは「私の教え方が悪い」と自分で暴露していることに他ならない。

プログラマにもこれはあてはまる。「そんなつもりじゃなかったのに、なんでそんな動きをするんだ?」ディスプレイに向かって悪態をついてみたところで、そのセリフはそのまま反射して自分にかえってくるだけだ。答えは決っている。「こんな動きをするのは、あなたがそうプログラムしたからだ」

 * * *

自分の愚かさを毎日毎日くりかえして見せつけられるなんて普通の神経じゃない。これがうれしく感じられるなんて異常に思えるかもしれない。けれどもそれはちょっと違う。

自分は完全だと思うからいけないのである。自分は(いやになるくらい)誤りを起こす人間なんだと謙虚な気持ちになりさえすればいい。そうすれば、誤りを起こすのが不可避ならいかにその誤りを減らしていくか…という建設的な考えに話をすすめることができる。

プログラミング言語の発達自体、人間のおかす誤りの危険性をいかに減らすかがテーマであったといってもいい。構造化プログラミングやオブジェクト指向といったプログラミング上の考え方も、アセンブラやコンパイラといった各種ツールも、すべて誤りをおかしやすい人間をいかにサポートしていくかを考えて生み出されたものである。これらは「人間って誤りをおかすもの」という自覚がなければ生まれなかったはずである。

 * * *

バグが出る。のどまで出かかった「そんなつもりじゃなかったのに」というセリフを飲みこむ。教師ができの悪い生徒にかんで含めて教えるように、私は今日もプログラムを書きなおす。けれど、できの悪い生徒って、実は他ならぬ自分のことなのである。

(Oh!PC、1992年2月15日)