@hihihiroroのLog

ダラダラと。本ブログは、個人の意見であり、所属会社とは関係がありません。

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

自分がコードを書く割合と人が書いたコードを読んでレビューする割合がだいぶ偏ってきた時に、自分ってコード読むの遅くないって思うことがあった。
その時に見かけたので読んでみることにした。

目次は以下

Chapter 1 コードをよりよく読むために
Chapter 2 コードを速読する
Chapter 3 プログラミング言語の文法を素早く習得する方法
Chapter 4 複雑なコードの読み方
Chapter 5 コードの深い理解に到達する
Chapter 6 プログラミングに関する問題をよりうまく解決するには
Chapter 7 誤認識:思考に潜むバグ
Chapter 8 よりよい命名を行う方法
Chapter 9 汚いコードとそれによる認知的負荷を避けるための2つのフレームワーク
Chapter 10 複雑な問題をより上手に解決するために
Chapter 11 コードを書くという行為
Chapter 12 より大きなシステムの設計と改善
Chapter 13 新しい開発者のオンボーディング

コードの理解をする際の混乱について本書では以下のように紹介されている。

  • 知識不足 = 長期記憶の問題
  • 情報不足 = 短期記憶の問題
  • 処理能力の不足 = ワーキングメモリの問題

それぞれが相互作用しながら機能している状態を認知プロセスとして説明されている。
短期記憶は2〜6個の要素を保持できるとされており、この容量制限を克服するためには短期記憶と長期記憶が協調して理解をしようとする。長期記憶にない十分な知識がない場合は、文字やキーワードなどわかりやすい単純な情報に頼り、短期記憶の容量が足りなくなってしまうとのこと。単純な情報ではなく、抽象的な概念として記憶するためには、長期記憶に十分な関連情報を溜め込んでおく必要がある。
長期記憶に貯めるためには文法を理解し記憶することで関連情報同士がネットワークとして保存され、新しい情報が入ってきてもそのネットワークに繋がることで、思い出すことが容易になっていくことが大事と紹介されておりなるほどと思った。

ワーキングメモリが処理できる量の限界を超えることを認知的負荷と呼んでいる。認知的負荷が大きいと、コードを適切に処理することができなくなる。
認知的負荷を下げるために、作業内容を考えなくてもわかるようにコメントを書くや、名前からすぐに推測できるようわかりやすい名前を変数や関数につけるということは納得感があった。確かに名前と処理が揃ってないと、まずは流れを追うことを考えてしまうので理解への処理がすすまなくなるなと。

後半では理解しやすいコードを書き、曖昧な名前や怪しいコードの臭いを避けるにはどうしたら良いかの方法について説明がされている。
理解しやすい名前とは何かを考え、ルールが紹介されていることで品質の高い名前をつけるためにはどうやって考えていくのが良いかが紹介されている。その後では、理想的ではないコードはどういったものかという、これがあったら怪しいと思ったほうが良いというこれまた法則が紹介されている。それぞれになるほどと思うことがあるのでぜひとも調べてみると面白いなと思った。

最後の方では認知的負荷の説明から問題解決やオンボーディングのプロセスについても書かれている。タスクを行っている時や新しい知識を身に着ける時に何を気にするべきかが説明されており、これから新しい人が来た際の説明をする際には気をつけてみようと思った。

まとめ

  • 認知的負荷はコードだけではなくどんな仕事にでも関わっていそうだなと思ったので引き続き勉強してみたい
  • 今まで読むことに時間がかかったコードを再度読んで修正しておけるところは修正しておきたい
  • 長期記憶にもっと溜め込んでおくようにするため勉強は続けよう