2015年1月22日木曜日

『アンダースタンディング・コンピュテーション』とベネディクト・カンバーバッチ

昨年の話なんだけど、会社の読書会で『アンダースタンディング・コンピュテーション』を読んだ。

普通の技術書(とくに他のオライリー本)と比べると、この本を読むことによってどういうスキルが身につくのか、若干イメージしにくいと思うんだけど、それはこの本がプログラミングの基礎的な内容を扱ってるからだと思う。

個人的に得られた知見とかは以下の通り

  • プログラミングの「意味論」という言葉が何を示しているのか、なんとなくわかった(一言で言えばevalの仕様。例えばコンパイルや型システム(や静的解析)はプログラムの動的な意味論(その言語のプログラマが、自分が書いたプログラムがどう動くと思っているかを想像するときに想定する動作仕様)ではなく、同じ字面のプログラムに対して翻訳や型の整合性のチェックといったそれぞれの異なる役割を実現する意味論でevalしている。)
  • ラムダ計算とかYコンビネータとか。
  • 計算不可能な問題に対する、現実的なアプローチ
人によっては有限状態機械、チューリングマシンやセル・オートマトンにも色々な発見があるんじゃないかと思う(この辺はなんとなく知ってた)

万人にオススメできる本かと言えばそんなことはないんだけど、プログラミング言語の仕組みに興味がある、とかプログラミング言語を作ってみたい、という人は読んでおくと道標になるだろうと思った。
直接役に立つわけではないだろうけど、問題に取り組むときのアイデアが正しいか正しくないか判断の基準になったり、問題にアプローチする方法が全くわからないなんてことが起こらなくなるんじゃないかな。

実際年末にオレオレlispを実装したときも、この本を読んでなかったら違ったものになってたはず。具体的なコードでは示せないが、どういう観点で自分が書いている処理系を把握しているか、という点に確実に違いがあったように思う。直接的には主に設計にかかる時間とかに現れているかもしれない。

ちなみにこの本の大きなテーマである「計算とは何か?」というのは今から80年ほども前にアラン・チューリング(とアロンゾ・チャーチがほぼ同時期に)が形式化した内容に基づいているらしい。コンピュータが実際にはない時代において、すでにその限界(計算不可能な問題があること)まで示していたなんて、すごいことだ。
また、自分のお気に入りのプログラミング言語であるLispも、チャーチが示したラムダ計算に基づいているのは有名な話だ。流行り廃りの激しいコンピュータの世界において、はるか昔に発見されたこれらの概念が今も脈々と現代のコンピュータの根底に受け継がれていることを考えると、この本が示している「基礎」(簡単という意味ではなく、本来の意味での基礎)がいかに大切なのかと思う。

なお、今年2015年はアラン・チューリングの伝記映画「イミテーションゲーム」が日本でも公開される。この本を読んで観に行きたくなったのだが(内容としてはこの本からかけ離れたエンタメだと思うが)、妻にチューリングについて説明しても理解を得られないと思ったので、映画で主演を務めるベネディクト・カンバーバッチが同じく主演している「シャーロック」のDVDシリーズを借りてきて一緒に観るという、やや姑息な啓蒙活動を行った結果、めでたく映画を観にいけることになった(バンザイ)。
似たような境遇にいる人がいたら参考にしていただければと思う。

0 件のコメント:

コメントを投稿