ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

Concepts, Techniques, and Models of Computer Programming

私の本棚にずっと積まれていましたが、なんとか目を通すことができたので感想を。

本の内容

日本語の目次はこちらを。
http://ja.wikipedia.org/wiki/コンピュータプログラミングの概念・技法・モデル

タイトルの通り、プログラミングに関しての概念やモデルを順番に説明しています。丁寧なソースと説明があるので、文章だけでは説明しにくい新しい概念でもわかりやすくなっています。

Concurrencyな所など知っているところは物足りなさを感じつつも、自分が知らないところは夢中で読めました。特に5 Explicit State、11 Distributed Programming、12 Constraint Programming は楽しかったです。物足りなさを感じる部分というのは、例えばConcurrencyなプログラミングでのデータのやりとりに関してrendezvousの説明が無いとか、優先順位の問題についてもっと面白い例があるだろ、とかそういうレベルです。

この本に関して並列の部分が面白いという人がいますが、人によって面白いと感じる部分は違うと思います。並列というか、Concurrentなプログラミングについて知りたいのであれば、RTOSの勉強をすれば、もっと面白い例に触れられます。私が上にあげたDistributed Programming、Constraint Programmingも、詳しい人から見れば物足りない説明なんだろうと思います。

参考文献は充実しているので、各章で興味を持った所があればどんどん次を調べられます。Relational Programmingに興味あればThe Art of Prologを読めば詳しく書いてあります。基本的には漠然と勉強していた事を整理する本であり、新しい概念を勉強するスタート地点を教えてくれる本です。

SICPと比較

SICPCTMCPは両方読めと言われていますが、SICPを先に読む方をお勧めします。CTMCPでは遅延評価の概念や使い方の説明があっさりしすぎていて、まずはSICPでそいうった概念や使い方をゆっくり勉強した方が良いです。CTMCPではozという言語を使いますが、FreeBSDでは全然コンパイルできなかったので、実際に動かすのは止めました。Schemeが使えて日本語でも沢山の答え(と日記)が見つかるSICPの方が、とりあえず動かしてみるのは楽です。SICPの場合自分が詰まった所は他の人も詰まっているので、そういう情報があるだけでも、最後まで読める確率は高くなります。

エンジニア的発想ですが、ErlangPrologの記述もCTMCP内では説明されていて、それだったらozにこだわらずにモデルに応じて言語を使い分けても良かったのかなとも思います。

読み方について

ozを動かさないと決めた場合、本文中の例題が眺めるだけになるので、モチベーションを高くしないとなかなか読み切れないです。今回は、社員旅行に持って行って一人で読みまくる、雑記帖のきむら(K)さんがプレッシャーをかけてくる、等の好条件が重なり、なんとか最後まで読み切ることができました。

勉強会で1章毎に担当を変えると、上手く最後までまわりそうな気がします。一人で読むよりは、これって××言語の○○だよね、とわいわいやれると楽しいでしょう。そういう環境に無いのなら、知っていると感じた所は大胆に流し読み、面白いと思った所はじっくり読むという読み方がお勧めです。自分が知らない面白い概念を探しに行くような気持ちで読めば、楽しみながら最後まで読めると思います。