nelmoの日記帳

エンジニア見習いの備忘録とかです。

「アンダースタンディングコンピュテーション」読書録 - 第1部

アンダースタンディングコンピュテーションを読み始めた。 2週間かけてようやく第1部を読了、手を動かせたので記録。

なぜ読んでるのか

もともと文系卒で計算機科学というものを学んだことがなく、エンジニアとして仕事をする上でそれに対して負い目というか劣等感を抱いているのは事実。 何か手近に始められる教材はないかと思っていたところ、この本の存在を知った。購入に至った理由は2つあり、1つは普段から触れているRubyでサンプルコードが記載されていること。もう一つは普段から聞いているrebuild.fm で触れられていたこと。

感想

「プログラムと機械」という第1部の題名通り、プログラムがどのように記述を解釈し、計算しているのかということをRubyソースコードをベースに進めていった。オートマトンチューリングマシンというものは名前は聞いたことある、程度の理解だったけれど実際にどういった概念のものなのか、というのをirbで自分で動かしながら勉強できた点が非常によかった。

3章から5章では単純なオートマトンから状態を持ったプッシュダウン・オートマトン、永続的なストレージを持ったチューリングマシンに至る説明は非常に分かりやすく、ほとんど詰まることなく読み進められた。入出力を実行するだけの本当に単純な機械から、普段利用しているような「高度な」機械に至るまでにどういった機能を持つことが必要かをざっくりと眺めることがたのではないかと思う。

正規表現オートマトンの概念を利用していることなど、普段から使っている技術が計算機上ではどのように扱われているのか、という点に触れていたところも、身近な話題に落としこんで考えることができた。

まとめ

こういう計算理論の本とかはLispとかが多い印象で、Rubyで書かれている本は結構珍しいらしい。

普段自分がRubyをそれなりに使っていることもあり素直に読み進めることができたけど、そうじゃなかったら少し読むのに苦戦していたとは思う。*1 この分野における事前知識がない状態で読むにはあらかじめRubyに触っていたほうがよいのは確かだと思う。文系卒でも3〜4年目くらいの人なら読み進められそうな難易度の本だと思った。

オートマトンとかチューリングマシンWikipediaを見ると感じるのは、この本で触れられているトピックはどれも本来は複雑な数式とともに説明されるべき理論なのだろうという点。そんな中で数式を一切排除して身近なコードで表現されているのは本当にとっつきやすいので、興味をもった方は是非読んでみるといいと思います。

まだ第2部「計算と計算可能性」が残っているので、その感想はまた後日。

*1:Pythonとかだったらそもそも興味持てなかっただろうし