Masassiah Blog

現役サラリーマンのスキルアップのための読書まとめ

プログラマー脳 ~優れたプログラマーになるための認知科学に基づくアプローチ

プログラマー脳 ~優れたプログラマーになるための認知科学に基づくアプローチ』(Felienne Hermans,秀和システム,2023年2月20日)を読了。

ハロルド・アベルソン (Harold Abelson) とジェラルド・ジェイ・サスマン (Gerald Jay Sussman),ジュリー・サスマン (Julie Sussman) によって書かれた『Structure and Interpretation of Computer Programs』(1996 年,MIT Press)という書籍に,「プログラムは人間が読むために書かれ,機械が実行するのは,そのついででなければならない」というよく知られた一文が書かれています。それは確かにそうかもしれませんが,現実には,プログラマーはコードを読む練習よりもコードを書く練習ばかりしています。(p. 16)

コードは書くだけでなく,コードを読もう。コードを読むことで,新しい知見が得られる。

変数の役割のフレームワークを見て,ハンガリアン記法と呼ばれる命名方法を思い出した人もいるかもしれません。たとえば,strName は名前を表す文字列であることを意味し,lDistance は距離を表す長整数を意味します。これは,型システムを持たない言語において,変数型を名前から見分けられるように生まれたものです。(p. 87)

バンガリアン記法は,明示的に型を知ることができて便利。

本書の冒頭で述べたように,平均的なプログラマーは,コードを書くではなく読むことに勤務時間の 60 % 近くを費やしていると推定されています。ところが,プログラマーは多くのコードを読まなければならないにもかかわらず,あまりコードを読む練習をしていないというのが現状です。(p. 93)

コードを書くよりも,コードをレビューすることに時間を費やそう。

すでに知っているプログラミング言語に基づいて形成されてしまった誤認識を,新しく学ぶ言語に適したメンタルモデルに置き換えるプロセスを概念変化 (conceptual change) と呼びます。概念変化とは,既存の考え方が新たな知識によって根本的に変更され,置き換えられ,一体化したものです。概念変化と他の種類の学習との違いは,概念変化が既存のスキーマに新しい知識を追加するのではなく,既存の知識を変化させるものであるという点です。(p. 141)

私が学んだプログラミング言語は,HTML,CSSJavaScript,C,MATLABPerlPythonPHP くらいか。きっと新しい言語を学ぶときに,概念変化が起こっていたのだろう。

ビンクレー教授の研究結果では,プログラマーと非プログラマーの両方において,キャメルケースを使うほうが,より適切なものを選択する確率が高いことが示されています。具体的には,キャメルケースで書かれた識別子のほうが,正しい選択肢を選ぶ確率が 51.5 % 高いことがわかりました。しかし,キャメルケースを使うと,精度は高くなるものの,それと引き換えに答えを出す速度が遅くなってしまいました。(p. 165)

個人的にはキャメルケースは好きだが,生成 AI にコードをリファクタリングしてもらうとキャメルケースは採用されなくなった。