[book] コーディングを支える技術

「コーディングを支える技術」という本を読みました。著者の西尾さんは、未踏ソフトウェアの関連でお会いしたことがあって、また、ブログにもいつも面白いことが書かれています。


この本も実に西尾さんならでは、という感じです。プログラミング言語そのものにこれだけの興味を持って、色々な言語に関する知識を貪欲に吸収し、そして一冊の本を書いてしまうというのは中々普通の人にはできないと思います。脱帽です。


この本はプログラミングの初級者よりも、多分中級者向けに書かれた本なのでしょう。プログラミングを最初に覚える時は、多分みんな写経(本書のキーワードの一つです)から始めることでしょう。とりあえず決まり事は深く考えずに受け入れて先に進み、知識と知識が繋がって密な知識のネットワークができてからようやっと決まり事の意味を立ち返って理解を深めることができるわけですから。制御構造にしろ型にしろ、プログラミング言語の基本となる概念というのは、ある程度自分で使ってみないとまずは始まらないものです。


そう割りきって、ぜひ西尾さんには初級者向けの説明は割愛して、本は薄くてもいいので内容を濃くした本を書いて欲しかった、と個人的には思うのですが、やはり書籍という媒体だとあんまりニッチすぎる内容はできないのかな...。



さて、この本の帯には、色々な言語を比較するとか、言語に共通の知識を身につけるとか、そういう風に書かれています。でも、僕はそういった視点はこの本の本質を捉えていないように思います。


というのも、仕事でプログラミングをしている人達の間では、言語の選択の自由は限られているでしょうし、言語の技術的な仕様というのはその決定に際しての要素の一つに過ぎないからです。そして、よくできた概念というのはその成り立ちを学ばなくても理解できるものです。ちょうどアラビア数字の記法を覚えるためにローマ数字を覚える必要がないように。


じゃあ、僕に言わせればこの本は断然何が面白いかというと、普段は当然だと思って気にも留めていない事が実は全然当たり前じゃなかったとわかる、という足元に穴が開く感を体験するところです。その点、第七章の名前の話なんかは白眉です。だって変数に名前をつけるとか、みんな当然だと思っているでしょう。


日常を構成するものを分解して再構築するという体験が面白いのは、海外暮らしが面白いのにも共通するところがありますよね。食器をつかってご飯を食べるのは全然当たり前じゃない!とか。


プログラミングに話をもどすと、僕にとって一番「当たり前のことが実は当たり前でなかった」体験は、なんといってもメモリモデルです。僕はアセンブラC++と進んだので、僕にとってはメモリというものは0から順番に番号が振ってあって、その番地を使ってMOV AX,[BX+3]などとアクセスするものだったわけです。ハードウェアの仕組みといいCPUの仕組みといい、メモリに番地が振ってあるのは天地開闢以来の当然の決まり事だと思っていました。


ところが、Javaを学んでみると、メモリに番地がある、という決まり事はどこかにいってしまい、それどころか番地を数字として取り扱ったり任意の番地のメモリにアクセスする機能は存在しないわけです。そして、この単純な機能を取り除くことによって、アクセス制御だのバッファオーバーフローの阻止だの、プログラミング環境としてとても優れた幾つかの性質を得ることができます。当時の僕にとってはそれなりの「発見」でした。


大人になってからはこういった「発見」に感動する機会は減りましたが、こういう「発見」を面白いと思う人はぜひ本屋さんでチラ見してみたらいいと思います。