【読書記録】プログラマー脳

2025-01-26

Book

Design

⭐️⭐️⭐️⭐️⭐️

情報

ざっくり要約

クリックして開く

Part1 コードをよりよく読むために

Chapter 1 コーディング中の混乱を紐解く

コードを読むときに利用される脳のプロセス

それぞれの弊害となるもの

Chapter 2 コードを速読する (短期記憶について)

Chapter3 プログラミング言語の文法を素早く習得する方法 (長期記憶について)

記憶のメカニズムを理解する

効果的な学習方法

記憶の定着を促進する技術

Chapter 4 複雑なコードの読み方 (ワーキングメモリについて)

認知負荷の種類

認定的負荷を軽減するテクニック

Part2 コードについて考える

Chapter 5 コードの深い理解に到達する

変数の11の役割

  1. 固定値
    • 初期化後に値が変化しない変数。数学定数や読み込んだデータなどに利用される。
  2. ステッパー
    • ループごとに連続的または規則的に値が変化する変数。forループのカウンタや半分ずつ探索範囲を縮める二分探索の変数などが該当。
  3. フラグ
    • ある条件の真偽を示す変数。is_error、is_availableなどの名前が典型。真偽値以外も場合によっては使用される。
  4. ウォーカー
    • データ構造の走査に使われる変数で、どのように移動するかが事前に固定されていないもの。リストや木構造、スタックなどを巡回する際に用いられる。
  5. 直近の値の保持者
    • 連続して入力されるデータや処理結果など、「現在処理中の最新値」を保持する変数。
  6. 最も重要な値の保持者
    • 処理の目的となる値を保持する変数。最小値や最大値、特定条件を満たす値などが該当。
  7. 収集車(ギャザラー)
    • ループなどを通じて、複数の値を1つの変数に集約していく変数。
  8. コンテナ
    • 複数のデータ要素を保持し、追加・削除ができるデータ構造(リスト・配列・スタック・ツリーなど)。
  9. フォロワー
    • 他の変数とセットで使われ、前後の要素や値を追跡するための変数。リンクリストの前ノードを指すポインタなどが代表例。
  10. オーガナイザー
    • データを別の形式に変換・並べ替えするためだけに使われる変数。変換や整理を目的とした一時変数などが該当。
  11. テンポラリ
    • 短期間だけ使用する変数。値の一時保存や入れ替えなど、さまざまな場面で臨時的に利用される。

プログラムを理解に関する様々な段階

  1. フォーカルポイントを見つける
    • コードを読むときに重要な概念
      • main()の時もあるし、バグが発生している関数の場合もある
  2. そのフォーカルポイントから知識を拡張していく
  3. 関連している要素から、そのコードに利用されている概念を理解する
  4. 複数の要素を横断して利用されている概念を理解する

より深くコードを理解する

Chapter 6 プログラミングに関する問題をよりうまく解決するには

Chapter 7 誤認識: 思考に潜むバグ

Part3 よりよいコードを書くために

Chapter 8 より良い命名を行う方法

なぜ名前が重要なのか

変数名に含まれている3つの意味

  1. ドメイン知識
  2. プログラミングそのものに関する知識 (tree構造など)
  3. 変数名そのものが、長期記憶に保持された情報と関連づけられている(i、jなど)

よりよい名前を選ぶには

Chapter 9 汚いコードとそれによる認知的負荷を避けるための2つのフレームワーク

Chapter 10 複雑な問題をより上手に解決するために

Part4 コーディングにおける共同作業

Chapter 11 コードを書くという行為

Chapter 12 より大きなシステムの設計と改善

システム開発における特性

設計上の処置とそのトレードオフ

特性がそれぞれの活動に与える影響

Chapter 13 新しい開発者のオンボーディング

感想

「認知負荷が低いコード」が「良いコード」だと思っている。
認知負荷が低いコードは保守性に優れ、機能拡張もしやすくなり、何より朗らかな気持ちで仕事ができる。
開発スピードも上がり、フィードバックサイクルを早く回せるためプロダクトに関わる人全てを幸せにすると思っている。
この書籍は、「認知負荷が低いコード」とは何なのか、どうしたら認知負荷が低くなるのかが、とてもわかりやすく書かれている。
また、それだけにとどまらず認知科学的に効率のいいコードリーディングの仕方や、自分自身の能力向上、チームとしての開発生産性・開発者体験の高め方まで幅広く書いてある。
また読もうと思う。

お気に入り度

⭐️⭐️⭐️⭐️⭐️