読書感想とか

あれこれ読みつつ感想をメモ。

プログラミング言語Ruby」(まつもと ゆきひろ、David Flanagan著)
淡々とした解説で読むのがつらいと思って放置ぎみだったけど、なぜか面白く感じるようになってきた。ちらちらとRubyの中身を見ながら動作を想像するのより、ずばり仕様解説を読むほうが何倍も効率がいいという当たり前の事実に気づきつつ、そろそろ通読してみようと思っている。真ん中辺りまで読んだ。やっぱり暗黙変換のルールとか、自明じゃないことが多い。人間にとっての自然な振る舞いって、実は例外が多くて定義としては複雑になることもあるという事実を再認識しつつ。「Rubyってそう考えるんだ」というRubyっぽい思考が身につかないと、いつまでもモヤモヤするんだろうなということが分かった。最近Ruby開発メーリングリストをチラチラ眺めるようになって、ますます「Ruby的にそのメソッドの振る舞いってどうなのよ」という思考の仕方が徹底していることを思い知った。ともあれ、こういう本を3度通読して細かい仕様を覚えれば、ツールとしてのRubyが便利になるはずだと、とりあえず信じてみることにしている。
Rubyによる情報科学入門」(久野靖著)
「〜であることを考察せよ」「自分で〜を実装してみよ」という課題が、いかにも教科書然として見えるのだけど、よくよく見ると「面白い応用を考えて実装せよ。ただし、面白さの定義は各自に任せます」とか、ほどよい諧謔があって笑える。いっそ教科書スタイルをやめればいいのに。数学っぽい計算のためのアルゴリズムに多くページが割かれていてウンザリだけど、連結リストを使ったラインエディタの実装や、各種ツリー構造の計算量比較だとか、抽象構文木Rubyで実装して簡易コンパイラを作る例とか、「なんだ、こんなに簡単にかけるのか!」とワクワクする感じ。ツリーやグラフ系のアルゴリズムを、もう少しCでやってみようと思っていたけど、「@node = Struct.new(:key, :data, :left, :right)」とか見ちゃうと、もう素のポインタとかつらすぎじゃないかと思えてくる。
「プログラミングのセオリー」(矢沢久雄著)
命名規則やコーディングスタイル、コメントはどうあるべきかという考察が参考になった。状態遷移を使えば、文字列判定のような処理がスマートに書けるというところに感動した。有限オートマトンとかマルコフ連鎖とか、名前だけ聞いたことがあるような辺りがイカしている理由も、ちょっと似てるのかなと想像しつつ、少なくともそっち方面に探索すべき大陸がある理由が分かった気がする。しかしこの本、全体的にC/C++限定の話だったり、お客さんに納入する製品としてのプログラムはどうあるべきかという話だったり、やや視線が低めというか現実より過ぎる気がした。長年の現場経験によるノウハウや定石はあっても、言語オタクのように、C/Java/C#といった現場系言語を外側から眺めるような、そんな視点がない。例えば再帰を覚えたばかりのころには、誰しも何でも再帰で書きたくなる、でもスタック積むから場合によっては遅くなるのでお客さんに納品するプロの商品としてはいただけない、という話がある。それはその通りなんだろうけど、スタックに積まない再帰はどうなるんだよって思ってしまう。そういう視点から「Cなどの言語では、まあしゃーないよね」と冷めた感じで書いてあればなるほどーと思うんだろうけど。
「珠玉のプログラミング」(ジョン・ベトリー著)
難易度7つ星級のパズルのようなビット演算トリックとか、そんなのが連発するような、ぶっ飛び本を想像していたので、ちょっと拍子抜け。パラッと見たところ、ふつうのアルゴリズム入門という感じがしている。マルコフ連鎖に感動した。実はすごく単純な話なのに、応用分野が広そう。今のCPUパワーからすれば、人間とコンピュータのインタラクションに応用すれば、いろいろとUIが改善するようなことって、まだいっぱいありそうだなと思った。