「計算機プログラムの構造と解釈」(以下、SICP) を読んでいる。最初は和田先生の訳を読んでいたが、計算機科学と英語の両方に堪能な真鍋氏1の訳の方が評判が良く、何より PDF で配布されていて紙で欲しくなったらいつでも簡単に印刷出来ることからそちらに切り替えた。但し、演習問題の答えは和田訳の方にしか無いのでたまにそちらを参照している。
何故今更 SICP を読んでいるかという個人的な動機はどうでも良いし、正直言って具体性を含む動機は多分無いんだと思う。「だれそれが推奨していたから読んだ」とか、「無料で読めるから読んだ」とか「そこに SICP があったから読んだ」とかその程度の理由だ。特に 2 つ目の理由を採用した上で、もし金に困っていなかったり図書館にあるなら、(Scheme とは違って) 現代的な言語で現代的な内容を扱っている本を読めば良いと思う。それでも SICP を選んで読んでいる理由は「言語に依存しないプログラミングの要素を学ぶ」ためだ。
パラダイムや好き嫌い2等によって、プログラミング言語間にはあらゆる差異が存在する。だが、それらの共通点を括りだして「プログラミング」という概念を再構成した時に残るものは存在するはずで、そういうものを学ぶ点では簡易な仕様3である Scheme を扱うのは理にかなっていると思う。
簡単な例を挙げる。いつぞやの刺し身にたんぽぽを乗せる仕事がタイトルに含まれたクソ長いブログ記事において「for 文をアトミックなものとして見ていて条件等の抽象化が出来ていない」という事が紹介されていたが、そういう事を防ぐには様々な便利な構文の代わりに原始的だが抽象性が保たれている文法を用いるのが良いのではないかと思ったりする。
そう言えば大学院の関数型プログラミングの講義で Haskell を扱ったが、C ライクな言語を書いている人間が尽く脱落したのを覚えている。「俺の知っているプログラミングではない」とかそういう事をほざいていた気がするが、多分そういうやつはそもそもプログラミングについて何も知らなかっただろう (そういう意味ではそもそも知っている事が空集合なのでこの発言は真になるのだが)。
なお、講義が悪かった可能性については真っ向から否定したい。個人的には別に Haskell に限らず関数型言語を書いた事が殆ど無いのに講義は楽しかったし、課題はおそらく満点だったし (ペーパーテストは微妙だったが)、プログラミング自体で詰まる事も無かった。講師は「簡単ですね」を口癖のように講義中に言っていたが本当にそう思うし、これは俺以外の人間でも同様の感想を聞いている。
よって、ただ単純に脱落した受講者が努力不足だったか、抽象という言葉を知らなかったか、プログラミングが特定の言語やパラダイムについて固定化されていたというだけな気がする。私は非常に性格が悪い (特に今日は機嫌も悪い) のでこういう事を言ってしまうが、「情報系の『大学院』にまで来てるのに抽象性が脳味噌に実装されていなかったり、プログラミングについて凝り固まった像を抱いていたり、素養や能力が無かったりするのにここまで来てしまって大丈夫なのか」とすら思えてしまう。
むしゃくしゃして書いた。割と溜飲は下がったが敵性存在の消滅までには至っていないので修了するまでここ最近のこういった事に関連する陰鬱は晴れないだろう。