吉田の雑記

エンジニアとしてのアウトプット中心でその他のことも書きます

プログラマー脳読了

初めに

今年発売された本の中でも評判の良い、プログラマー脳を読んでみた。 (というか周りで良いぞという声を聞いて積読の山から手を取った感じ)

結論としては、今まで言われ続けていたことのメカニズムを知った気持ちになって面白かった。

感想

リーダブルコードやプリンシプルオブプログラミングのような書籍では、極端に言ってしまうと命名やプログラミングするときにはこうすべしと原理が書いているが、「なぜそうしなければいけないんだっけ?」があまりわからない場合が多い。

そのため、オレが読めればそれでいいという状況や、原理主義的に全てXXXすべしと曲解をしてしまうパターンがあるかと思う。

本書ではプログラミングにおける諸問題に、認知科学脳科学の結果を用いて、

  • 人間の脳にとって読みやすさとは
  • 認知負荷が高まっている状態とは
  • 変数とはどんな役割をしている
  • オンボーディング時の新人のツラミ

といった「なぜそうやってプログラミングすべきなのか」を考える材料を与えてくれている。

熟年のプログラマーは経験則的にわかっていることではありそうだが、実際に認知科学といったエビデンスがあると、本を読みつつなるほどなと納得・腹落ちした章は多かった。

そのほかのプラクティス

端的にキーワードだけ並べると、以下。

  • 脳は長期記憶・短期記憶・ワーキングメモリの3つのプロセスを使い分けている
  • コードは意味のある小さいチャンクであれば記憶できる量が増える
  • メンタルモデル(メリットデメリット色んな側面が語られている)
  • 変数は主に11種の役割がある

結構使えるプラクティスは多いが、最後の章にあったからか、意味波の話が良かったなと。(日本語にするとエセ科学っぽさはちょっとある)

意味波は抽象→具体→抽象という学習の流れを表している。

抽象:可変長引数は複数の引数を持つ

具体:引数を「*」で始めれば定義でき、全ての引数リストを受け入れる

というPythonの例を述べている。

このアンチパターンがわかりやすく、「抽象的な話かしない」「具体的な話しかしない」「抽象→具体は落とし込めているが最終的に抽象化していない」というもの。

コーディングする上では最後のアンチパターンが厄介で、陥ると重複まみれのコードになってしまう。

考えてみる

個人的にはRuby on Railsの経験が多いため、どんなものかをザッと考えてみる。 メリットとして以下のような感じ?

  • 設定より規約(CoC)をコンセプトとしていて、長期記憶を頼っている
  • 暫定性を持ち、粘性も低いため、走りながらコードを自由に変更できる

一方で逆もまた然り。

  • 長期記憶でヒットしない、Rails Wayから外れたコード、一時的に書き散らかしてしまったコードが多くなってくると途端に認知負荷が増大する
  • 変更は手軽だが整合性が取れなくなるのもまた早い。実行時までエラーを知ることはできない

というわけで大きなRailsアプリケーションなぜ辛い問題は色々な要因がありそうだが、認知負荷の観点からも説明できるところはありそうだと感じた。

速く小さなアプリケーションを作る分にはメリットが上手く効きそう。

こちらも

前にお世話になったところでもこの書籍について話しているので、手軽に分かった気になりたい方はこちらもどうぞ

【プログラミング】読むだけで学習効率が上がるオススメ書籍 - YouTube

話は変わって

この書籍に限らず、初級〜中級向けくらいの良書が最近は多く出始めているなという印象を受ける。

設計で言えば良いコード/悪いコードで学ぶ設計入門、昨今のソフトウェア開発について述べている現代版人月の神話のような人が増えても速くならないだとか。

よわよわエンジニアなので、難しい良書との橋渡しとして大変助かる、、、

以上。