初めての人のためのLISP[増補改訂版]

初めての人のためのLISP[増補改訂版]を読んだ。

「こう書けた方が自然だから、そう書けるという約束にしよう(約束なんていつでもできる!)」(p.60)とか
「一時的なメモ用紙だの、束縛だのという苦し紛れの言葉や概念を持ち出したのは、人間にとって自然なモジュール性を保証するためのメカニズムを理解するためにやむを得なかったから」(p.64)とか
再帰呼び出しだけをことさらに強調してLispの特徴だと言うのは間違っている」(p.91)「美しいということと、実用的価値が常に一致しているとは限らん」(p.107)とかとか

この本は初めてプログラミングを学ぼうとする人が、間違った教科書に触れてダークサイドに落ちないために、最初に読むべきプログラマ思想書なのかもなーと思った。

世の中にはいろんな種類の間違った教科書がある。

  • 「こう書くのが正しいのです。そういう決まりなんです。なんで?じゃありません!これが正しいのです!プログラミング言語は神が与えたもうた真理なのです!」とか
  • 「(ここに難しい用語やカタカナ語が入る)という概念を理解することは必須です!あの概念も理解するべきです!あれやこれやそれを理解している私は偉いのです!」とか
  • 「こう書くのが美しいのです!美しいことが重要なのです!美しさこそすべてに勝るのです!」とか

プログラミング言語も所詮人間の作ったものだからデザインに失敗することもあるし、時代とともにちょっとずつ改良されたりしていく「約束の束」にすぎないんだけど、永久不変の真理であるかのような誤解をさせる本ってあるよね。自分の使っている言語の欠点を挙げることができないようではとてもその言語に詳しいとは言えないわけだが、盲目的な信仰を作り出してしまう種類の本が世の中にはある。当然、言語に対して「これは正しいのか」と問うことを封印してしまうのだから一定以上に理解が進まない。さらには、その「最初に触れた言語」が神聖不可侵で欠陥のないもの、という思想は当然他の言語との不毛な宗教的対立を生む。

それから概念。やっぱり知ってないと書けないコードはあるから概念を理解することは重要なんだが、それは長ったらしいカタカナ語を覚えることや意味不明な定義文を暗誦することじゃない。「プログラミング言語が、人間にとって自然な振る舞いをするために、裏ではこういうことをしています」の「裏でやっていること」にラベルをつけて言及しやすくしているだけ。なのに、そのラベルをたくさん覚えた方が偉いみたいな誤解を招かせる本が世の中にはある。というか世の中のオブジェクト指向解説書のなかには著者が全然理解出来ていないにも関わらず、ラベルだけ丸暗記して「俺は偉い」って言っている本があるよね。そういう本を真面目な人が読んでしまうと、説明が悪いから理解できないだけなのに理解できない自分が悪いんじゃないかと思って落ち込んだり、逆に自尊心を守るために自分も丸暗記して丸暗記してない人を馬鹿にし始めたりするから厄介。

それから美学。美学はやっぱり必要なんだよ。醜いコードはやっぱり色々な問題を引き起こす。だから美しさを求めるのは正しい。ただ問題は、美しさが客観的に測定できないことなんだ。主観的な尺度だから簡単に独善に陥いる。「自分が美しいと思い込んで書いているこのコードは実は美しくないのではないか」という問いに自分で答えることはできない。それから、美しさを求める心は最大化に流されがちになる。ついつい「完全」を目指したくなる。しかし社会活動をする上で「完全にするための高いコスト」を支払うことが合理的なケースってのはほとんどない。美しくすることのコストと美しくあることによるベネフィットのトレードオフで「完全ではないがまあまあ美しい」という点が「最適」になるもんだ。そこを間違えてはいけない。

などということを読みながら思ったのであった。