コーディングを支える技術、読んだ

流行りの技術や特定の言語によらないプログラミングの学び方を学ぶ本。構成がよく考えられていて首尾一貫しているので自然に頭に入ってくるし楽しく読むことができた。少し感想を書きたい。

名前というものがある

名前を使う前までは番号を使ってたんだけど、人間は番号だけ見ても何のことかわからないしすぐ忘れちゃう。だから番号に対応するオブジェクトに名前をつけてあげたらわかりやすくて便利になった。とても便利でよかったんだけど、名前とオブジェクト対応表が一つだけだと、うっかり同じ名前を使ってしまうと競合して壊れるから注意して憶えておく必要がある。人間は無意識に記憶を改竄したりするし、ずっと対応表について思いを馳せていることはできない。じゃあどうしたかというとそこでスコープというものが産まれた。

こんな感じで人がいろいろ工夫して言語が進化していく過程が書かれている。普段考えもしない細部にも歴史がある。

多重継承に対する言語間の違い

多重継承には複数の親クラスの間で同じ名前のメソッドがあったとき、どちらを優先するかという問題がある。僕はc#メインで使っているので、多重継承禁止*1するのがすっきりしてていいと思ってた。でも果敢にも多重継承できるようにしちゃって、やっぱり結構苦労していたりする言語とか、moduleのみmix-inを可能にしたrubyとか、scalaなんかは初期からtraitがあったりする。それぞれの言語の実装の違いが簡潔にまとめられていてとてもわかりやすいと思った。

コラム

コラムがいくつかあって、その中でも

  • 理解を確認するためにはまずアウトプット
  • 何を学べがよいかがわからない理由
  • 具体的な知識と抽象的な知識
  • 噛み砕く
  • 必要なところからかじる
  • おおまかにつかんで徐々に詳細化する
  • 端から順番に写経する

このあたりなんだけど、なかなかこういう技術の学び方って文章化されにくいし、初心者の人はこのコラムだけ読んでもかなり参考になると思う。

僕は去年、応用情報技術者試験を受けていたのだけれど、その試験用に勉強した、こういうものがある、そういうものもある、みたいな広く薄い知識に、歴史という重みを与えてくれたのがこの本だった。海苔だけだったのに海苔に餅が包まれて質量あるし砂糖醤油で食べると美味しいみたいな感じです。もっと早く読めばよかった。

こちらに補足記事が載っているので全部読みましょう。

*1:interface除く