今年最初の面白い本
最近「ビューティフルアーキテクチャ」という本を読んだが、これが結構面白かった。
「ビューティフルコード」の続編らしいが様々なプロジェクトを取りあげているし、普段あまり聞けない設計思想について書かれているので、設計思想とかが好きな人には読み応えのある本だと思う。
私が一番興味をもって読んだのはEiffelの作者の関数プログラミングの評価である。
クロージャ、コンビネーター、モナド、参照透明性など オブジェクト指向...いやいやEiffelと比べて評価しているので面白い。
結局メイヤーさんは関数型を評価しながらもオブジェクト指向の方がいい と言っているが果たしてどうか?
個人的には関数型とオブジェクト指向はLispとSmalltalkの関係のような気がしている。
つまり、物事へのアプローチの仕方が違うだけでどちらも同じような能力を備えているように思う。
Lispでオブジェクト指向風のプログラミングを行うことはできるが、そんなにそこに価値を置いていない。
同時にSmalltalkにおいてもFunctionはFirst Class Valuesであり、制御構造の骨幹にクロージャが組み込まれている。
言語としてLispとSmalltalkでは対局にあると思うが、どちらもとても古い言語でかつ、いまだに最前線にいる。
Javaが実現している多くのアイディアはほとんど20年位前にはSmalltalkにあったものだし、数年前からWebで注目されている「継続」もSchemeの初期のころからある。
LispもSmalltalkも自己拡張できる言語なので多分このままずっと最前線を走っていくのだと思う。
関数型と言えば参照透明性が脚光を浴びているが、本質的にノイマン型のコンピュータとなじまないような気がする。
個人的には量子理論が物理的な認識とあまりにも乖離しているのと同じような感覚を覚える。
つまり有限のメモリを書き換えながら処理を行うコンピューターにおいて、状態の変化を認めないというのは根本的な部分を否定しているような感じだ。
参照透明性も言語レベルでの透明性で、メモリレベルでみれば「書き換えだからいいんだ」という見方もできるかもしれないが...
参照透明性を確保したGUIライブラリでスマートな解が出てくると参照透明性もなじみやすくなるように思う。
ちなみにCleanという言語にはGUIライブラリがあるがどうなっているのかは知らない。
昔少しかじったがちょっとついていけなかった。^^;;
話を戻して そのビューティフルアーキテクチャだが、そのほかにも「古典再読」ではデザインパターンが出だした頃に議論になっていたことがSmalltalkのコードとともに書かれている。懐かしく読めた。
また、昔懐かしいタンデムコンピュータの話やJava上でOSを動かす冗談のような話題など。
JavaでOSを開発するというのは意味が分からないことだと思っていたが、最適化を段階を追って説明しているので、うまくやるとJVM上のOSでもそんなにオーバーヘッドが無い状態にもっていけることが説明されており実に興味深かった。
そのほかXen(仮想化技術)などのホットな話題が取りあげられているのも面白かった。
とにかく取りあげている題材がとても面白い。
今年最初の一冊まるっと面白い本だった。