ソフトウェアとコトバ(12) GOTO Letter をめぐって

 CACM誌でプログラム構造化定理に出会った1966年春からの数年間,わたし自身の個人的生活環境は目まぐるしく変化した.それまで5年ほど勤めていたコンピュータ・メーカの子会社を退職して某計算センターに移ったが,そこでの仕事に飽き足らずに友人たちとソフトウェア・ハウスを設立して,ビジネスをなんとか軌道に乗せようと努力していたからである.
 いまから振り返ると,1967年の秋にスタートしたわれわれのSRAは,日本で3番目の独立系ソフトウェア・ハウスであった.コンピュータ(ハードウェア)を買えばソフトウェアは無料でついてくるというのが,そのころの世間の常識だったから,お金をとってソフトウェアを開発するというビジネスが確立されるまでにはしばらく時間がかかった.
 コンピュータ・センターのオペレーションや英文マニュアルの翻訳などの仕事で何とか糊口を凌ぎながら,わたしが考えていたのは,会社の持っている技術をPRすること,そのために「プログラムの構造を考える」というキャッチフレーズをうまく利用しようということだった.

 CACM誌の「編集部への手紙」というコラムに一篇の奇妙な投稿がなされたのはちょうどそのころであった:
  Edsgar Dijkstra, “Goto Statement Considered Harmful”, CACM March 1968.
 この投稿のもともとのタイトルは “A Case Against Goto Statement” だったらしいが,当時 CACM の編集長をしていた Niklaus Wirth(PASCAL 言語の開発者)のアドバイスによって,いささか挑発的なものに変えられたのだという.その作戦はみごとに功を奏して,短い手紙の形式をとったこのエッセイは,「Goto文なしで繰り返しループを含むプログラムは書けないじゃないか」といったナイーブな反発をはじめとして、あちこちで多くの論議を巻き起こした。

 もちろん,プログラム構造化定理が示すように,Goto を使わなくても、If-Then-Else や While-Do を用いればどんなプログラムでも書けることは明らかである.構造化定理を適切に応用してGoto文の乱用を避け、プログラムのスタイルを人間の目で読みやすくすることがこの Letter の意図なのだと、多くの読者は受け止めたようであった.
 しかし,手紙に筆者Dijkstra の意図は,単にプログラムの見かけ上のスタイルをきちんと整理することではなかった.かれの関心はもっぱらプログラムの正しさ(別のいいかたをすれば,どうしたら正しいプログラムを書くことができるか)に向けられていたのである.その証拠に,翌1969年にローマで開かれたNATOワークショップ [*] に参加したかれは,そこで発表した小論文『構造化プログラミング』のなかで「デバッグによってバグの存在を証明することはできるが,しかしバグの不在証明にはなりえない」という名言を吐いている。
 [*] いわゆる「ソフトウェア危機」を宣言したのは 1968年にドイツで開かれた第1回の NATO ワークショップ.ローマでの会議はその続きの第2回目。

 プログラムは,最終的にはコンピュータに読み込まれて実行されるのだが,それより以前に,人間がその目でプログラムを読み,そこに書かれたアルゴリズムが正しいかどうかを論理的に判定できるようにすべきだというコンピュータ・サイエンティストとしての信念のアピールが,「Goto 文有害論」とか,「階層化された抽象論理構造のすすめ」といったかたちで表現されたのだと考えられる.「言に五類あり」という富永仲基のテーゼにあてはめれば,それは「反」すなわち Irony の典型的な例だといえよう.
 残念ながら,しかし,Dijkstra 自身がのちに「きちんとした定義をせずに Structured Programing という用語を使ったのは失敗だった」と述べているように,世の中では反語的な比喩は比喩としては受け取られなかったようであった.いま世上に流布しているソフトウェア技術書のページには,「構造化プログラミングとは,なるべく Goto 文を使わずに,機能モジュールを階層的に組み合わせて、読みやすいプルグラムを書くこと」だという通俗的な誤解にもとづく定義が書かれている.