見出し画像

【勉強法・学習法】プログラマー脳 ~優れたプログラマーになるための認知科学に基づくアプローチ

【9分で解説】【勉強法・学習法】プログラマー脳 ~優れたプログラマーになるための認知科学に基づくアプローチ - YouTube

皆さん、こんにちは。今日は「プログラマー脳」という本を取り上げて、私なりに感じた魅力やポイントについてお話ししていきたいと思います。プログラミングを学ぶうえで私たちがどんなふうに脳を使っているのか、そしてどうすればより効率的にコードを読み、書き、学べるのかを、認知科学の視点から解説しているのがこの本の大きな特徴です。それでは早速、内容に入っていきましょう。

まず、「プログラマー脳」は大きく4つの部、そして13の章から構成されています。著者は長年プログラミング教育を研究されていて、そこに認知科学を応用することで、コードの読み書きにまつわる諸問題をより明確に整理・説明しています。このアプローチがとてもユニークで、読んでいて「なるほど、そういう角度で考えればいいのか」と何度も納得させられました。

書籍のタイトルから、「プログラマー脳って一体なんだろう?」と不思議に思うかもしれませんが、要はプログラマーがコードを読む・書く際に、頭の中ではどんな認知プロセスが働いているのかを解き明かし、そのメカニズムを利用して効率的にスキルアップできる方法を提示しています。特に、「コードは一生懸命書くもの」だと思っている方にとって、この本を読むと「実はコードを読む時間のほうが圧倒的に長いんだ」という事実に改めて気づくはずです。実際、開発の現場ではコードを読んで理解する時間が全体の6割ほどと言われています。だからこそ「読み方」を磨くことが、結果として「書き方」を磨くことにもつながるんですね。

本書では、まず「プログラミングをする際に重要な3つの認知プロセス」が提示されます。それは

  • 長期記憶

  • 短期記憶

  • ワーキングメモリ

の3つ。私たちはふだんコードを読むとき、これらの記憶や処理の仕組みを駆使しているわけです。長期記憶には、たとえば「if文の書き方」や「よく使うライブラリの関数名」などが蓄えられます。一方、短期記憶は、その場でチラッと聞いた電話番号や、これから調べる関数の名前を一時的に覚えておくためのところ。そしてワーキングメモリは、それらの情報を組み合わせて、「じゃあこのコードは今どんな動きをしているのか」を推論・計算するための場所、いわばCPUのようなイメージです。

本書で面白いのは、人それぞれワーキングメモリや短期記憶の容量には限界があることをまず受け入れつつ、「だったら長期記憶をフル活用して補強しよう」という提案がなされている点です。結局、長期記憶が豊かな熟達プログラマーは、コードの構造やよくあるパターンをすぐに思い出せるため、ワーキングメモリや短期記憶の負荷をグッと下げられるのですね。結果として、複雑なコードを見ても素早く理解したり書いたりできるようになる、というわけなんです。

次に、本書が強調しているのは「実際は書くより読む方が時間をかけているのだから、読みやすさがとても大事」という点です。私たちはよく「うまくコードを書く術」を意識しがちですが、同時に「他人のコードをどう読み取るか、そしてどう書けば他人に読み取ってもらいやすいか」を考えていかなければなりません。とくに大規模システムやチーム開発では、自分の書いたコードを後から他人が読んだり、数か月後の自分が読んだりする場面が多々ありますよね。そこを考慮せずに書きなぐってしまうと、後々のメンテナンスで大きく時間を取られてしまう。そこでこの本では、読みやすいコードを書くための具体的な戦略も提示されています。

書籍の中盤では、なぜ私たちがコードを「読めない」と感じるかについて、2つの原因が挙げられます。それが

  • 知識不足

  • 処理能力不足(脳のワーキングメモリを超えてしまう)

という問題です。たとえば、普段触れない言語やパラダイムに出会ったとき、文法や構文、ライブラリがわからないという「知識不足」があるとどうにも理解が進みません。一方で、いくら文法を把握していても、コードが複雑で長々とネストしていたり、変数が頻繁に変化してわかりづらい場合、「処理能力不足」に陥ってしまい、頭の中で同時に保持すべき情報量が限界を超えてしまいます。

本書では、この2つの問題を解決するための方法として、フラッシュカードを使った学習や、チャンク化(コードを塊で整理する技術)、そして名前付け(命名則)の工夫などを推奨しています。

フラッシュカードというと、英単語を覚えるための単語帳のようなツールを想像しますが、これをプログラミングにも応用し、よく使う文法やライブラリ関数などを定期的に反復学習すると、知識不足が埋まりやすいというわけです。

また、コードを読むときに重要なのが「チャンク化」という考え方。これは情報を小さな塊に分解して、脳のワーキングメモリへの負荷を下げるテクニックです。たとえば、電話番号を「090-XXXX-XXXX」と区切るように、長いコードを部分的に見出しやコメント、あるいは小さな関数に切り出して整理することで、読みやすさが格段に増します。コードがどうしても複雑になるときは、自分で図示したり、データの流れを紙に書いてみるのも効果的だと本書では紹介されています。

本書が何度も強調しているのは、コードを読むという行為こそが、コードを書く質にも影響を与えるということです。私たちは読みやすいコードと読みにくいコードを経験する中で、「どうすれば他の人や未来の自分が理解しやすい構造になるのか」を自然と学んでいきます。バグを探す際にも、「読みやすいコード」にしておくことで原因追及が簡単になり、結果的に生産性が上がるわけですね。

加えて、この本では「オンボーディング」というキーワードも出てきます。新しい開発者や新人さんをチームに迎え入れる際に、どうすれば彼らの混乱を減らして早くチームに馴染んでもらえるか。そのためには、認知負荷をなるべく下げてあげることが鍵になります。経験豊富なシニアエンジニアは、一度にいろいろ教えすぎるのではなく、小さな課題を出して段階的に慣れてもらう。そしてしっかりフィードバックを行い、徐々に長期記憶を育ててもらう。こうしたステップがとても大事だと説いています。

さらに、本書で私が共感したのが「割り込みのコスト」に関する内容です。例えば、プログラムに没頭しているときにSlackの通知がきたり、誰かから声をかけられたりすると、もう一度同じ集中状態に戻るまで平均で15ふんほどかかると言われています。これは私も肌感覚で「わかる!」と大きく頷いてしまいました。割り込みが多いと、それだけ生産性がガクッと下がるんですよね。そこで本書では、作業を中断する前に必ずコメントやメモを残しておくなど、すぐに脳の状態を再構築できるような工夫を勧めています。ほんの一手間ですが、積み重なると大きな差になるテクニックです。

この本のいいところは、「脳のメカニズムを理解して終わり」ではなく、その学びを活かすための演習やワークショップ的な課題がたくさん用意されていることです。「自分が読むコードを選んで、図解してみよう」「要約してみよう」「読みやすい部分、読みにくい部分を整理しよう」など、単にふむふむと眺めるだけでなく、実際に手を動かして脳のプロセスを体得できるように作られているのが魅力的です。また、コード例がJavaScriptやPython、Java、時にはBASICやAPLのようなレアな言語にも及びますが、どれも言語特有の難しさを強調するのではなく、「初めて見るコードを読むとき、私たちの頭の中で何が起こるか」を浮き彫りにするためにうまく活用されています。

もうひとつ印象的だったのが、「意味波」という考え方です。これは学習プロセスを「抽象→具体→抽象」と行ったり来たりする波になぞらえるモデルで、私たちがある知識を学ぶとき、ざっくりと抽象的に理解したあと、具体的に書いてみたり読んだりして体験し、最後にもう一度抽象レベルに戻って知識を“自分なりに再構成”するプロセスを経る、というものです。本書ではこれをアンパッキングとリパッキングと呼んでいて、初心者への教え方やチームメンバー同士の情報共有にも応用できると示されています。

「プログラマー脳」の魅力は、認知科学がややこしく感じるところを具体例と演習を使ってわかりやすく解説してくれる点にあります。脳の仕組みを知れば知るほど、「ああ、だから自分はコードを読むのがこんなに苦しかったのか」とか、「ああ、なるほど、このタイミングでこう覚えればよかったのか」と腑に落ちることが本当に多かったです。読んだあとにすぐ自分の現場で試したり、自分で練習メニューを作ったりすることができる、本当に実践的な本だと思います。

繰り返しになりますが、プログラマーはコードを読む時間のほうが実は長いということ。だからこそ脳がどう動いているかを理解して、その特性を活かすことが、自分のプログラミングスキルを高め、チーム開発を円滑にし、ひいてはソフトウェアの品質を上げる道につながるのだと、この本は改めて教えてくれます。経験の浅いかたからベテランまで、幅広いかたに読んでいただきたい一冊ですし、新しくジョインしたメンバーのオンボーディングにもきっと役立つはずです。

というわけで、本日は「プログラマー脳」という本の概要と魅力、そして私がとくに面白いと感じたポイントを中心にお話ししてきました。もし興味を持ったかたは、ぜひ手に取ってみてください。演習問題をやりこむと、きっと自分がコードを読むときの思考回路やクセが見えてくるはずですし、チームの開発フローを見直すきっかけにもなると思います。

いいなと思ったら応援しよう!