Saturday, September 08, 2007

趣味人の美学

8 時起床。曇り空。 寝床で「マリナー氏の冒険譚」から一つ短編を読んでから起床。 目覚ましの珈琲を一杯。 Peter(1600)と 10 分チェスを一局。勝ち。 さすがに Peter には負けないか… 午前中はスミスロフの棋譜を並べたり。 昼食はゴーヤと素麺のチャンプルーを作った。 素麺と言っても実際はもらいものの「うーめん」と言うもので、 素麺よりやや太く、そして半分程度の長さしかない。 病人が寝床で食べ易いようにと作られたそうだが、 普通には短か過ぎて食べ難い。 午後は主にたまっていた家事をしたり。

夕方になって、南国のような激しいスコール。 スコールらしく、すぐにおさまった。 本を持って近所のバーまで歩いて行って、夕食。 挽肉、トマト、きのこ、オクラなどのキッシュ、 仔羊の脛肉のトマト煮込み。 食後にチーズを二種類とデザートワイン。

持っていった本は、 「ハッカーのたのしみ ~ 本物のプログラマはいかにして問題を解くか」 (H.S.ウォーレンJr./滝沢徹・鈴木貢・赤池英夫・葛毅・藤波順久・玉井浩訳/ SiB Access)。 ハッカーと言っても、ネットワーク侵入などの話ではなくて、 ここではプログラミングそのものを楽しむマニアックな人々のこと。 例えば、今日読んだところにはこんな話が出ていた。 x と言う変数には a か b のどちらかの値が入っている。 今の値が a ならば b に、b ならば a に入れ替えたい。 どういうプログラムを書くか。 普通なら、「x が a ならば b とせよ、そうでなければ a とせよ」 と言うプログラムを条件文で書く。 しかし、「a + b - x を計算して、新たに x とせよ」とも書けて、 こちらの方がハッカー好みだ(少なくとも経済的だ)。 勿論、プロなら後者のように書けることに気付いても、前者のように書く。 私もプログラミングの授業では、 「クレヴァなアイデアは思いついても使うな」と教えている。 が、あくまでハッカーとは趣味人なのであり、美学が優先するのである。 ここまでは誰でも知っているが、この本で扱っているのはこの問題を一般化する話。 例えば、変数 x は a, b, c の三つの異なる値をとるとせよ。 今の値が a ならば b に、b ならば c に、c ならば a に入れ替えたい。 うまい方法があるか? 上のように a, b, c の値を入れるとそれぞれ b, c, a の値になる多項式がある (考えてみましょう)。 しかし、それでは素朴に条件文で書くより計算量がずっと多い。 この本には非常に巧妙な、いかにもハッカーぽい、 ビット演算処理を用いる方法が載っていて、 なるほどなあと感心した。とは言え、 勿論、プログラミングのプロだったら絶対にこんなプログラムは書かないだろう、 とは思ったけど。