ディスカッション (11件)
クイックソートの考案者であり、計算機科学の発展に計り知れない貢献をしたトニー・ホーア(Sir Tony Hoare)氏が亡くなりました。ホーア論理やCSP(Communicating Sequential Processes)、そして自ら「10億ドルの間違い」と呼んだNULL参照の導入など、現代のプログラミングと言語設計の基礎を築いた偉大な先駆者でした。彼の功績は、これからもすべてのエンジニアの中に生き続けるでしょう。
混乱してる人がいるのも仕方ないかもね。彼の仕事の多くは、適切な同期通信チャネルを使って混乱を避けるシステムを作ることだったんだから。ヌルポインタの話は有名だけど、本当にすごいのはoccamとCSP(Communicating Sequential Processes)の方だよ。アクターモデル派の人たちからは「見事に間違ってる」なんて言われるかもしれないけど、やっぱり素晴らしい。彼の一番好きな名言はこれ。「ソフトウェアを作るには2つの方法がある。1つは、明らかにエラーがないほど単純にすること。もう1つは、明らかなエラーがないほど複雑にすることだ」。事実じゃないことを祈るけど、もし本当なら、心からの敬意を込めて、安らかに。
ケンブリッジで一度だけ彼に会えたのは幸運だった。穏やかで知的な巨人だったよ。1980年のチューリング賞受賞講演「皇帝の古い服」から、この言葉を何度も引用させてもらってる。「ついに、親会社のゼネラルマネージャーであるアンドリュー・セント・ジョンストンが私のオフィスにやってきた。彼はいつも叫んでいたが、こう言ったんだ。『何がまずかったか分かっているか?君自身が理解していないことをプログラマにやらせたからだ』。私は驚いて見つめた。彼は明らかに現代の現実を知らないと思った。Elliott 503 Mark IIのような現代のソフトウェア製品の全容を、たった一人がどうやって理解できるというのか? 後になって、彼が完全に正しかったことに気づいた。彼は問題の真の原因を診断し、その後の解決策の種を蒔いてくれたのだ」。私の解釈では、プログラマに任せるか、コンパイラに任せるか、あるいはLLMに任せるかにかかわらず、自分の選択がもたらす結果を常に理解していなければ、相応の報いを受けることになるってことだと思う。
トニーの『プログラミングの公理的基礎』は、学部生だった私が初めて読んで理解できた学術論文なんだ。それまでは科学論文なんて自分には読めるわけがないと思ってたから、自分の中の何かが開花したような気がした。35年くらい前の話だけど。今その論文をまた開いてみたけど、もう記法が読めなくなっちゃったな… これこそAIを使ってみるべきところかも。また理解が追いつくまで、一行ずつ解説させてみようかな。
面白い話があるんだ。オックスフォードでは建物に重要人物の名前をつけるのが好きなんだけど、ホーア博士の名前を冠した宿舎を作る案が出た。そこで大学側は、文字通り「Hoare house(発音は娼館を意味するwhore houseと同じ)」になってしまうというジレンマに直面したんだ。大学がどう解決したか正確には覚えてないけど、確か「C.A.R. Hoare Residence」で落ち着いたんじゃなかったかな。
私がオックスフォードで博士課程をやっていた時の教授が彼で、面接も彼だった(通称PRGと呼ばれていたプログラミング研究グループだ)。彼とはかなりの時間を過ごしたし、もちろんCSPについても死ぬほどやったよ。博士論文も全部それ。TonyHoareプロセスが「STOP」に到達してしまったと思うと寂しい。安らかに。
安らかに。彼は業界が変わるのを見届けることはなかったね。「この原則の結果として、添字付き変数のすべての添字が、実行されるたび、宣言された配列の上下の境界に対して実行時にチェックされるようになった。何年も後、製品の実行効率のためにこのチェックをオフにするオプションが必要か顧客に尋ねたところ、満場一致で拒否された。彼らは、検出に失敗すれば悲惨なことになる添字エラーが、本番環境でどれほど頻繁に起こるかを知っていたのだ。1980年になっても、言語設計者やユーザーがこの教訓を学んでいないことを、私は恐怖と嫌悪をもって注視している。まともな工学分野なら、このような初歩的な予防措置を怠ることは、とっくに法律違反になっているはずだ」 -- C.A.R.ホーア 1980年ACMチューリング賞受賞講演
お気に入りの名言の一つ。「ソフトウェア設計を構築するには2つの方法がある。1つは、欠陥がないことが明らかなほど単純にすること。もう1つは、明らかな欠陥がないほど複雑にすることだ」。これってソフトウェアだけじゃなく、複雑なシステムや議論なら何にでも当てはまるから、よく考えるんだよね。
ダイクストラが人生の終盤、書類や手紙を整理していた時のこと。癌が忍び寄っていて、あまり時間はなかった。整理を手伝っていたあるシニア教授が、手紙はどうするかとダイクストラに尋ねた。その教授自身もかなり有名な人だったんだけど、彼は病床のダイクストラから「トニー(ホーア)との手紙は取っておいて、残りは捨てろ」と言われた、と皮肉っぽく語っている。その教授自身とダイクストラのやり取りも、捨てられる山の方に入ってたってわけだ。
MSRケンブリッジでのテックイベントに参加した時のことを覚えてる。あるスピーカーが、年配のデベロッパーは現代のプログラミングの世界についていけない、みたいな皮肉を言ったんだ。すると一人の年配の紳士が立ち上がって、「自分も多少は知識がある」と丁寧に言った。それがトニー・ホーアだったんだ。
「1961年のイースター頃、イギリスのブライトンでALGOL 60のコースが開講され、ピーター・ナウア、エドガー・W・ダイクストラ、ピーター・ランディンが講師を務めた。私は、言語プロジェクトの同僚のジル・ピム、部門技術マネージャーのロジャー・クック、セールスマネージャーのポール・キングと共に参加した。そこで初めて再帰的プロシージャについて学び、以前説明するのに苦労したソート手法をどうプログラミングすればいいかを知ったのだ。不遜にもクイックソート(Quicksort)と名付けたそのプロシージャを書いたのはそこだった。私のコンピュータ科学者としてのキャリアはそこから始まった。言語に再帰を取り入れ、私の発明をこれほどエレガントに世界に発信することを可能にしてくれたALGOL 60の設計者たちの天才的な功績を称えなければならない。私は、優れたアイデアをエレガントに表現できるようにすることを、プログラミング言語設計の最高目標と考えてきた」 -- C.A.R.ホーア「皇帝の古い服」