kumamotone’s blog

iOS/Android アプリエンジニアです https://twitter.com/kumamo_tone

「プログラマー脳」を読んだ

www.amazon.co.jp

「プログラミング”力”を”鍛えて”、”優れた”プログラマーになりてぇ〜」というあるあるBIG煩悩に、筆者の個人的な経験や主観……ではなく、できるだけオープンになっている定量的な研究結果を引用して誠実に回答しようとした本だと思った。

優れたプログラマーとは?

この本で想定されている優れたプログラマーとは、以下のような人を指している。

  1. 人のプログラムを効率的に(短時間で)読むことができる
  2. バグの発見を効率的に(短時間で)行うことができる
  3. 良いコード(わかりやすく、保守性の高い)コードが書ける
  4. 大規模なシステムでも共同作業を行い、オンボーディングを行うことができる

地に足についたシゴデキ感があり、たしかに目指すべきはこれだよな〜と改めて思った。

この本では4章に渡って、以上のようなプログラマー像になるためのヒントやテクニック、それの根拠となる研究結果などを紹介されている。

認知負荷について

一冊を通じて語られていて、個人的にも意識していきたいなと思ったのは「認知負荷」についてだった。

人は見慣れないものを理解するのには時間が掛かるし、短期記憶に入っていないものは取り出すのには時間が掛かるし、日常的に慣れた操作以外を行うときは操作そのものに意識が持っていかれる。

認知負荷が高まると課題の解決に時間が掛かるが、逆に、できるだけ他人の認知負荷を高めさせないことが、チームメンバーとしては良い振る舞いだ、というメッセージを感じさせられた。

「メソッドを細かく分割するのは何故良いのか」「なんで変数名はあんまり省略すべきでないと言われているのか」みたいなところの答えにもなっていて、「焦ってとにかく一度に複数のことをやろうとするな」というのは前から感じていたことではあるが、この本によって思考が一歩前に進んだ気がする。

プログラミングに当てはめると

具体的には、以下のようなことが言われていた。

  • 短期記憶やワーキングメモリに蓄えれる情報はそんなに多くないため、メモなどの補助ツールなどを利用したり、練習などを経て、長期記憶や外部装置を充実させることにより、複雑な課題に取り組みやすくなる
  • 「関数やクラスを細かく分ける」「変数名は省略されていないものを使う」「一貫性をもたせる」などのプラクティスに従うことで、認知負荷がかからないコードを目指すと良い
  • 新人にオンボーディングするときは、新人がそもそも慣れない環境で色々慣れるべきことがあることを考慮して本当に小さいものや、慣れさせるためのタスク(リファクタリング)などから渡していくと良い

まとめ

多くのプログラマーが抱えているBIGペインに対して、できるだけ筆者の個人的な経験や主観を廃して向き合って体系的に整理された情報として、尊い書籍だなと思った。

speakerdeck.com

iOSDC Japan 2023 の shiz さんの発表資料は本書の一部が非常に良くまとまっていて、振り返るのにとても良かったのでここで紹介させていただきます。