虎の穴開発室ブログ

虎の穴ラボ株式会社所属のエンジニアが書く技術ブログです

MENU

「プログラマー脳 ~優れたプログラマーになるための認知科学に基づくアプローチ」を読んだ感想

はじめまして。5月に入社しました虎の穴ラボのよしだです。
現在はFantiaチームの一員として開発を行っています。
私は気になった技術書はとりあえず積んでおきたい派で、ここ1年で大量の紙の書籍・電子書籍の積読が溜まっています。。。
さて2023年上半期に発売された書籍かつ私が積読していた中で、周囲での評判が良かった「プログラマー脳~優れたプログラマーになるための認知科学に基づくアプローチ」を読んでみたので自身の感想も交えて紹介します。

基本情報

タイトル プログラマー脳 ~優れたプログラマーになるための認知科学に基づくアプローチ
著作者名 Felienne Hermans
翻訳者名 水野 貴明
監訳者名 水野 いずみ
判型・ページ数 B5変・288ページ
ISBN 9784798068534
発売日 2023/02/16

紹介ページ:https://www.shuwasystem.co.jp/book/9784798068534.html

書籍の内容

本書は大きく4つのパートに分けられており、全編を通してプログラミングと脳の働き・認知科学の関係性について演習を混ぜながら紹介されています。
具体的なソースコードによる説明もありますが、その言語を習熟していなくても基本的には問題なく読み進めることができます。

Part1 コードをよりよく読むために(第1~4章)

コードを読む際にどのように脳が利用されているか、「短期記憶」「ワーキングメモリ」「長期記憶」という3つの認知プロセスを用いて説明がされています。

また、その3つのプロセスを上手く活用して、プログラミング文法を効率良く覚える方法や複雑なコードの認知的負荷を低減するためのテクニックが紹介されています。

Part2 コードについて考える(第5~7章)

コードを読み解く上で重要な変数の役割、頭の中に存在する抽象的なモデルであるメンタルモデル、2つ目の言語を学ぶ際の高速道路に乗るかのような良い転移・他言語に引きずられて誤認識してしまう悪い転移などが紹介されています。

どのように頭の中でコードが理解されるのかや、学習を進めていくときに起こり得ることが中心となって書かれています。

Part3 よりよいコードを書くために(第8~10章)

変数やメソッドの命名、いわゆるコードスメルのあるコードが認知に与える影響、記憶のシステムとスキルの自動化によって複雑な問題を解決するための長期記憶を強化する方法が紹介されています。

Part4 コーディングにおける共同作業(第11~13章)

Part3までのメカニズムのような話からやや離れ、開発者の仕事の様子・大きなコードベースの読み解き方・オンボーディングプロセスにおける熟達者と初心者の思考法の違いの比較などを紹介しています。

これまでのパートに比べると、プラクティカルな内容も多く含まれています。

良かったところ

認知とプログラミングとの関連性について書かれた書籍は少なく新鮮だったのですが、特に良かったポイントを3つ挙げます。

冒頭のツカミが気持ち良い

本書の構成自体の話になりますが、第1~2章のワークの体験が非常に良かったです。
APL/Java/BASICの各言語で二進数に変換するためのコードが書かれていますが、実際のコードを見ながら「それぞれどういった要因で混乱を生じさせるか」や「脳の中でどのようなプロセスを経てコードを読み進めるか」がまるで頭の中を覗かれているかの様にピッタリと当てられているかのように解説されていました。
最初に心を掴まれスルスルと読み進めることができたので、皆さんもぜひ書籍を見て体験してみてください。

綺麗なコードの書き方のナゼがわかる

昔から今まで多くの良いコードの書き方に関する書籍や記事があります。しかし理由がわかっていない状態でHowだけを学んでも、誤った判断をしてしまいがちです。
本書では認知の観点から汚いコードによって負荷が高まる理由が述べられており、認知負荷という判断材料があることを提供しています。
綺麗や美しいといった主観に頼った話だけではなく、他の人が見たり自身が後から見ても混乱が生じないか・認知的な負荷が少ないかで議論ができるようになります。

一方で認知的負荷の大きさは利用する言語やフレームワークにも依存し、どれかを利用すれば必ず認知的負荷が低くなるということはないので、組織の成熟度や対象としているドメインに応じて適切かつ一貫性のある決定をしていく必要がありそうです。
この点については12章に詳しく記載があります。

開発者間の困りごと・サポート方法がわかる

特にPart4では実際のコーディングにおける開発者が行う活動や、初心者と熟達者の思考の違い・思考プロセス別の新規参入者向けサポート方法が書かれています。
単にスキルや経験の差という話で片付けるのではなく、一歩踏み込んで認知の面からどういった混乱が生じやすいのかという書き口が非常に興味深かったです。

虎の穴ラボはフルリモートでの業務であり、対面と比較すると密なサポートや状況把握が難しいのですが、本書に書かれている以下のようなオンボーディングの改善を取り入れることができるのではと思いました。
(これら自体は特段珍しいものではありませんが、本書の内容を踏まえると意識するポイントが変わってきそうです。)

  • 長期記憶のサポートのため、関連情報も併せて説明する。
  • 短期記憶のサポートのため、小さくて1つのことだけに特化したタスクを用意する。
  • コードを新入社員と一緒に読む。

まとめ

本書は技術書としてはまだ少ないと思われる、認知科学とプログラミングの関係性について言及された書籍です。
他の開発者とのコミュニケーションにおいて、言語化できないけどモヤモヤする場面でも、認知科学の面から考えると建設的な議論が可能かも知れません。
設計・実装の考え方の幅を広げることにも繋がりますので、気になった方はぜひ本書を購読してみてください。

Fantia開発採用情報

虎の穴ラボでは現在、一緒にFantiaを開発していく仲間を積極募集中です!
多くのユーザーに使っていただけるtoCサービスの開発をやってみたい方は、ぜひ弊社の採用情報をご覧ください。
yumenosora.co.jp