プログラミング言語の「ぼうけんのしょ」 - コーディングを支える技術

よくもここまでプログラミング言語を俯瞰出来る人がいたものだと尊敬せざるを得ない。
そしてそれを見事にコンパクトな一冊にまとめた著者西尾氏の能力はやはり類まれなるものなのだろう。



本書「コーディングを支える技術」は、プログラミング言語の「なぜ?」を解説した本である。なぜ言語設計者はこの文法をつくったのか。なぜ変数にはスコープがあるのか。なぜ関数が必要なのか。なぜ例外が必要なのか。

普通のプログラマなら当たり前に触れている記法や概念であっても、なぜそれが必要なのかは気にしてない人も多いのではないか。人は、完成品だけ見てもどう完成しているのか理解できないことが多々ある。不完全な品を見て不完全であることを理解して、それから完成品を見ると腑に落ちる理解になる。悪いことに、腑に落ちないならまだしも、何も疑問を持たないことすらある。当たり前に存在していたから、そのまま受け入れてしまう。

そのような半ば眠ったような状態の人が目を覚ますにはどうすればよいか?
過去から、学ぶ。

本書はプログラミング言語の初期の初期、ENIAC や概念でしかなかった時代に遡り、 if 文すら無かった時代から言語の発展を示している。幸か不幸か、コンピューターの歴史はまだ50年程度で、言語設計に限っては本書一冊で十分網羅的にカバーできてしまう。その読後感たるや、ズルして時代を早送りしていいところだけをつまみ食いしたような、そんな気分にさえさせられる。



素晴らしいのは、単に歴史の解説だけに終わらず、過去の歴史から「なぜ今こうなっているのか」につながる所である。本書が出版された後ではこう思う。

なぜ今までこのように言語を網羅的に解説する書籍がなかったのか、と。スタックマシンの解説から、トランザクショナルメモリや多重継承まで扱う本は存在したのだろうか?

低レイヤーから言語を学べるという点では SICPCTMCP があるが、敷居の高さは否めない。本書は初心者に毛が生えた程度のレベルでも読める、かけがえのない一冊。

一点気になるところ。小飼弾氏も言っているように、やはり本書のタイトルが気になってしまう。
氏が示した「言語を支える概念」というタイトルこそ本書にマッチする。何故なら本書は、言語間を超えた概念を学べるのだから。


プログラマでさえあれば、読み手の技術力は問わない。

本書、ドススメ。