kagamihogeの日記

kagamihogeの日記です。

コーディングを支える技術 成り立ちから学ぶプログラミング作法

本書を読んだからといって何か具体的な技術が身につく訳ではないが、自分自身がどのような言語をどういう風に身につけているか、を抽象的に振り返るのに適している。例えば、この本を起点にして学びたいことができたらそれを掘り下げていく、など。色々な言語を幅広く取り上げているのでそれぞれ個別の要素技術を学ぶ本ではないが、それらの言語を比較したり、どこからその言語が来たのかをたぐることで見えてくることもある。

元来コンピュータの役割は原始的な計算のみだった。そこで要求される機能はごく単純なものでよかったが、時とともにコンピュータの利用範囲は拡大し、自然とプログラミングに要求される機能も拡大の一途をたどることとなった。こうなると「楽に」プログラミングできるようにするニーズが出てくることとなる。しかし、ある問題を人間がどのように定義するのか、はバラつきがある。よって、問題を解決するやり方もまたバラつきが出てくる。世の中にいろんな言語があって、いろんな解き方が存在するのは、カンタンに言えばそういうことになる。

本書で繰り返し発せられるメッセージに、ある問題を解決するやり方が一つとは限らない、というものがある。本書で触れるトピックを幾つか挙げると、各言語の例外のスタンスの違い、型はそもそも必要なのかという議論や、オブジェクト指向をどう解釈しているか、などなど。ある言語では当然のように存在するものが、他の言語では存在しなかったり別の手段でなら実現できるものだったりする。同じ名称のものであってもマッタク別物だったりもする。ややこしいけれども、問題を解くやり方が一つとは限らない、という柔軟性の必要性を本書は説いている。そうするメリットは、多様な解決策からより適しているものを選べるようになる。さらには文字コードの章で書かれているが技術的な解決策だけでなく政治的な解決策もまたアリなのだと気付くことも出来るようになる。

そんなわけで世の中には多種多様で大小様々なやり方があふれている。それを後から追いかける立場からすると莫大な情報を泳がねばならず面倒なこと甚だしいが、逆に言えばその解決策にたどり着くまでの苦労をしょいこまずにいられるメリットがある。本書でも、いまとなっては当たり前に使う技術や構文が、実際には長い時間をかけて淘汰の果てに残ったものがあることを紹介している。forやwhileといったものが代表格。スコープもそうで、動的と静的とで揺れ動いた歴史を紹介している。あらゆるものは変化し続ける、いま現在もまた変化の途上にある、といった著者の主張がそこかしこに見受けられて興味深い。

もう一つ本書が興味深いのは、個々のプログラミング言語の学び方ではなくプログラミングをどう学べばよいのか、についての視点を与えようと試みている点にある。第一章での「比較から学ぶ」「歴史から学ぶ」がその要点にあり、それの具体例が本書全体ということになる。加えて、ところどころにあるコラムの内容がまた秀逸である。「理解を確認するためにはまずアウトプット」「何を学べばよいかがわからない理由」「必要なところからかじる」「おおまかにつかんで徐々に詳細化する」あたりは深い共感があった。それは俺がOracleを勉強するに当たって感じていたことどのようにOracleを勉強してきたか - kagamihogeの日記と被る点がちょくちょくあったからである。