合理性一、車輪は再発明しないこと

以前も言及したように、わたしにとって、数学とプログラミングはおなじくらい厳密だ。わたしはこのアナロジーを気に入っているから、一昨日もそれを参照して、わたしがなにを理解と呼ぶかについて長々と議論した。

 

アナロジーを語るうえで、かならず必要な前提事実がひとつある。証明とプログラムは、構造レベルで一緒なのだ。もしあなたが大学で情報科学を学んだことがあれば、瞬時にある有名な対応に思い至ることだろうが、わたしがしたいのはそんな高尚な話ではない。いや、もしかするとその話なのかもしれないが、学問の領域では嘘を言うと面倒なので、本当にその話かどうかはあいまいなまま残しておくことにしよう。

 

はたしてその共通点とは。それはどちらも、いくつかの基本パーツの複合体だということだ。とことん突き詰めれば、証明もプログラムも、よく知った公理や演算だけに分解できる。証明とは公理と論理の絵巻物で、そしてプログラムとは、演算装置への命令の手順書だ。

 

にもかかわらず、その複合体への向き合い方は、数学者とプログラマとではまったく異なるようだ。昨日書いたように、数学界隈には、定理という複合体を使う前に、その証明を完全に紐解かねばならぬという不文律がある。一度は完全に証明しなければ、その定理を理解したとは呼べないのだから、したがって、あなたにそれを応用パーツとして使う権利はない、というわけだ。もっとも、じっさいの研究ではそうも言っていられないのだが、それでも建前上は、いずれ学ぶ予定だということにしておかねばならない。

 

はんたいにプログラミングのひとたちは、技術を紐解くことを車輪の再発明として忌避する傾向にある。たとえば、書いたプログラムがエラーを吐いたとしよう。このとき、エラーメッセージで検索をかけてみれば、ヒットするのは原理を学ぶための解説書ではなく、直し方を語るブログ記事だ。あるいは、エラーの箇所が内部的にどのように使われているかではなく、プログラムがどう間違っていて、どうすればそれを直せるかだ。

 

こんな話だってできる。プログラマは、既存のソフトウェアを組合わせて新たなソフトウェアを生み出す。そんなとき、プログラマが参照するのは、既存のソフトウェアの中身ではなく、ドキュメントだ。そして重要なのは、おそらく多くのプログラマは、もし求めているまさにそのものがドキュメントの中にあれば、もはやソフトウェアの中身には注意を払わないだろうということだ。

 

さて、わたしは数学界隈で育ってきたから、数学者たちの主張を内面化している。だから、定理をよくわからずに使うのには抵抗がある。いっぽう、プログラマ流の合理性にだって魅力はある。わたしは黙ってその技術を使わせてもらえばいいじゃないか、だって、誰かがそのために開発したのだから。

 

あるいは、こうも言えるかもしれない。数学の研究をする身でこんな日記を書いている時点で、わたしはプログラマ流の価値観に染まっている。だから、わたしが理解していない定理を研究で使っても、わたしはわたしを責めないことにしよう。まわりがどう言おうが、わたしはわたしで合理的なのだ。