会社の朝礼でなんか語れと言われたので、
意見をまとめてみました。
で、せっかくなのでブログに。
あんまり趣味に走るのもなんですが、
自分で面白いと思うことじゃないと聞いているほうもつまんないでしょうし。
プログラムの話ということで。
はてさてどうなることやら。
↓ここからが発表する予定。
今日はプログラムの美しさについて語ってみようと思います。
といってもプログラムの話はあんまりでない予定です。
そもそも美しさとはなんでしょうか。
それを考えるためにまず、美しい人間について考えてみます。
こういう話があります。
たとえば鼻の幅とか目の位置とか人間の顔の各要素について、
多くの人の情報を集めて平均をとります。
そしてすべての平均値を使って顔を描いてみると、
非常に美しい顔になるそうです。
平均的なのに非常にってのは一見矛盾するように思えるかもしれませんが、
これは平均という数字についての誤解から来るものです。
たとえば。
平均的な高さの山というと世の中にはたくさんあると思いますが、
完全に平均の高さを持つ山というと、平均値から1㎛ずれても駄目なわけですから、
たぶん存在しないでしょう。
ましてやすべての地点が平均の高さを持つ山となると。
つまりすべての地点が全く同じ高さになるということで。
水平で完璧に真っ平で表面は磨き上げられたようになっていることになります。
そんな山見たことないですね。
つまり、だいたい平均っていうと凡庸ですが、
すべての面において平均、とまで言うとそれはすごい個性になるわけですね。
ではなぜすべて平均だったら美しく見えるのでしょうか。
人間の感覚は、進化の過程で身についたものなので、
だいたい合理的にできているものが多いです。
人間の脳の画像認識のしくみは、人間の顔を認識することに最適化されているでしょう。
その脳で、全てにおいて平均的な顔を認識するというのは一番認識するのにエネルギーがいらず、
シンプルに理解できると思われます。
このことから、人間はシンプルなものを美しいと感じる、
という仮説が立てられます。
そしていろいろなことを考えてみると、
それに当てはまることは多そうです。
詳しいことは今日は割愛しますが。
プログラムの世界でもシンプルさは大事とされているので、
これはプログラムの美しさが重視されることと関係していそうですね。
さて。
次の話として。
他に美しさが重視される業界を例に挙げてみたいと思います。
美術とかファッション業界とかだと、
単純に美しさそのものを売り物にしているわけですから、
話は単純です。
が、プログラム業界は別に美しさを提供してお金をもらっているわけではありません。
それと似たようなことが起こる業界として、科学や数学の世界などがあげられます。
たとえば物理の世界でも、シンプルさというのは重要視されます。
経験則として、宇宙の法則はシンプルである、というのがあるからですね。
そして先ほど出てきたように、シンプルさは美しいと感じられるので、
法則や数式の美しさが重要視されます。
ここで、アインシュタインが相対性理論を初めて発表した時の話をします。
当時電磁気学という学問が、かなりシンプルな公式にまとまってきていました。
が、そこから一つの矛盾が導き出されていたのです。
それは、光の相対速度が一定になるということ。
普通、相対速度は一定にはなりません。
西に進んでいる車を、
同じ西に進んで車からみればあまりスピードが出てないように見ますし、
東に進んですれ違う車彼見ればすごいスピードに見えます。
が、光の場合はそうではないと。
西に秒速30万キロで進んでいる光を、
西に秒速29万キロで進みながら見ても、
東に秒速29万キロで進みながら見ても、
同じスピードに見えるというなんかおかしい結論が出ていたのですね。
その矛盾を解決しようと、
いろいろ複雑なつじつま合わせが考えられていたのですが、
アインシュタインの考えは非常にシンプルで美しいものでした。
美しくまとまった理論からそういう結論が出るのなら、
それを素直に認めるのが美しいんじゃないかと。
そしてそれを前提に物理法則を計算しなおしてみたのですよ。
そうするとまあ、原点が妙なところから始まっているので、
出てきた結論もちょっと常識からは考えられないものでした。
西に進んでいる人にとってみると、
東に進んでいる人は細くなります。
でも体重は増えてます。
そして時間の進み方が遅くなってます。
そしてそれはお互いさまになります。
寸法や体重はともかくとして、
お互い相手が自分より遅くなっています。
そんな常識外なことが現実だって言うなら、
どうして世の中でそういうことを見た人がいないのか。
それはそうなるためにはすごいスピードで遠ざかる必要があるので、
今まで誰も測定できなかっただけなのだと。
西に行くっていっても1秒で地球の反対側までいける人でやっと0.5%時間が遅れるくらいなので、
そんな速く移動したことがない人は今まで気づかなかなかったのだと。
まあ常識的に考えると無茶苦茶言っているようにしか思えないわけですが。
実際その理論をもとに、実験なんかしてみたら。
その理論通りだということがわかってしまったのです。
実際遅くなっていたのですね。
でまあ大発見ということになった。
今も普通の生活をしていたら時間が遅れるなんてことはありませんが、
私の大学時代の研究室なんかではその時間の遅れがなければ片っ端から実験が失敗するような研究をしてましたし、
GPSなんかもそれがないと動かないような仕組みになっているそうです。
さてここで重要なのは、
別に美しかったから正しいとされたわけじゃないのです。
理論をちゃんと作って、それに基づいて地道な実験が行われ、
その結果が理論道理だということが確認されたから、認められたのですね。
そこに美しさは何も関係していません。
まあ実際のところ、
アインシュタインは晩年に同じくらい美しい考察に基づいて、
壮絶に無駄な研究に時間を使ってしまっていたらしいですし。
結果が出なければそれまでなのですよ。
ただ、最初に、
美しくシンプルな理論から出たことを、
シンプルにそのまま使って理論を構築する、
ということをやったのは、
シンプルだからそれは正しいと信じてないとできなかったわけですね。
信じてなければ、そんな常識はずれな結論なんか発表せずに捨てていただけでしょうし。
このことから、
美しさは結果について何の保証もしないけれど、
結果を導き出すヒントになることはある、ということです。
さてここでやっとプログラムの話です。
ここまでの話をプログラムに応用するとどうなるか。
プログラムというものはとかく複雑になりがちなものですから、
常に極力シンプルにしていく努力をしていかないと、
開発、保守工数が爆発的に増えて使い物にならなくなります。
で、人間はそのシンプルさを、美しさという感覚で感じることができる。
だから美しさを求めることが大事です。
ただ、美しいことが必ずうまくいくかというとそうではない。
そもそも開発保守工数を節約するための方法論なんて、
開発現場ごとに微調整が必要なものですから。
美しいものを作るなんてどんぶり勘定だけでうまくいくわけがない。
だから、この自分の美しいという感覚は、
本当に工数の節約の役に立っているのか。
疑問に思ったら根拠だてて確認する必要があります。
そしてその根拠に合わせて、自分の美的感覚を微調整していかなくてはならない。
そういう手間をかける必要は依然としてありますが、
それをやっていれば、
少なくとも大体の作業においては、
人間の生まれもった美しいという感覚だけで、
一瞬でシンプルさを判定することができ、
正しいプログラム技法を選択することができるようになる。
とまあプログラムという工業的な作業に美しさというものを持ち込むことには、
そういう利点があるといえます。