コンピュテーションをアンダースタンディングした
アンダースタンディング・コンピュテーションを読了した。本文中のコードを書き写し、本文と見比べながらじっくり進めて、年末から一ヶ月をかけてようやく終わらせられた。
この本、相当によい本なので、ぜひ読んでほしい。
本書は、Rubyでコンピュータサイエンスを学ぶ本だ。
どうしてRubyか
なぜRubyか? というと、たぶん現在もっとも人口に膾炙した言語だからだろう。Ruby人口とLisp人口、どちらが多いかと問われたら、Rubyに軍配を上げざるを得ない。Schemeのほうが直接的だけど、わざわざコンピュータサイエンスのために、苦労してまで学ぶべきではない。
Rubyの美しいところは、ノイズが少ない点だ。セミコロンも、変数の前に妙な記号も(たいていの場合は)つけない。これがPerlだったら大変だったろうな、と思いながら、僕は -> を繰り返しタイプしていた。
PythonもRuby同様に人気だけど、ラムダを記述するときにRubyより面倒な書き方をせねばならない。その点、RubyはMatz Lispと呼ばれるだけあって、ぽいぽい気軽にラムダが書けて気軽だ。
計算というものを抽象化していく過程で、リストや配列、連想配列といったデータ構造とは別れを告げねばならない。このとき、シンプルな構造体をシンプルなコードのまま表現できるという特徴は、このうえない美点になる。たとえ言語仕様で規定された専用のリテラルを使えなくても、Rubyで作られた構造体はとてもきれいに書ける。
そういうわけで、Rubyが選ばれたのだと僕は思う。
読み進め方
本書は、学部で学ぶような計算機科学の基礎を、Rubyのコードで表現しながら理解してゆくスタイルをとっている。
つまり、実装することで、理解しやすい形に切り分けているのだ。
大学でオートマトンやチューリングマシンの講義を受けたとしても、すぐに理解はできない。処理をひとつずつ追っていって、詰まったところは繰り返し考えて、ようやくひとつの節を進められる。
実装で概念を掴んでいくやりかたは、科学的なアイディアをすぐには飲み込めない僕みたいな普通の人間にとって相当に効率がいい。説明を読むだけではわからない論理展開も、コードになれば体感しやすい。
この本を手に取ったら、Rubyのコードを実際に書きながら、じっくり進めていってほしい。思った以上にあっさり最後まで読み終えられるはずだ。
おすすめ読者層
これからコンピュータサイエンスの講義を受ける、学部一・二年生くらいの大学生に、特に本書を薦めたい。
実際のところ、コンピュータサイエンスとプログラミングの間には断絶がある。コードを書くことはコンピュータサイエンスではない。科学の一端が言語にあるにせよ、それは結果であって、プログラミングのためにコンピュータサイエンスがあるわけではない。
大学でコンピュータサイエンスの授業が始まると、その違いに戸惑ってしまって、学習が嫌になるかもしれない。そうなるまえに、本書に触れて、断絶をつなぐ練習をしてほしい。
コンピュータサイエンスを学ぶ道のひとつに、プログラミングがあると僕は思っている。実用的な言語で最初の数歩を踏み出しておくことで、その先に進みやすくなると思う。
あ、Lispをdisってるわけじゃないです、はい。