プログラマー脳を再読した

ツノ
·

本の目的

プログラマの脳内でどんなことが起きているのかを認知科学をベースに解き明かす

本を手に取った背景

プログラミング能力(認知科学や心理学のような立場からの向上ができたら学習効率が良さそうだと考えていたため)

読んでて印象に残った内容

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

  • プログラミング活動には「短期記憶」、「長期記憶」、「ワーキングメモリ」が存在する →ワーキングメモリは短期記憶の一部で計算用に機能を切り出したもの

  • アイコニックメモリ(膨大)→短期記憶(2〜6個くらい)

  • コードを読むときは、文法ごとにチャンキングして短期記憶に圧縮している

  • チャンク化の練習方法→復習

    • 意図的な練習(小さい練習を継続する)

    • 50行程度のコードの暗記

      • LeetCodeやVueUseとは有効かも?

  • データ構造、デザインパターンを理解しているとチャンク化が捗る

  • 間隔をあけて繰り返す

  • 長期記憶

    • 検索強度

  • ワーキングメモリ

    • 認知不可(内在or外在):ピタゴラスの定理とa,bに外出しされている例

Part2::コードについて考える

  • 変数の種類

  • 文章とコーディング能力には相関関係がある

  • コーディングのメンタルモデルを作り上げる

    • ワーキングメモリの節約になり得る

    • プログラミングをするときにワーキングメモリで何が起きているのか?

  • 既知のプログラミング言語を有効活用するには「習熟度」「感情」

  • メンタルモデルについて少し詳しく

    • そもそもモデルとは

      • 解決手法や解法のイメージ(もっと抽象的なイメージも含むと思うが。)例えば、問題の解き方はモデルを持っていると持っていないで変わる

    • メンタルモデルは、脳内で解決手法が精緻化が行えているかどうか

    • メンタルモデルはワーキングメモリにいる

      • 意図的な練習

      • 図に書くと

      • 自問自答する

    • メンタルモデルは長期記憶にもいる

      • 例え話の引き出しは、長期記憶にある

Part3:より良いコードを考えるために

  • より複雑な問題を解決するためには

  • 6章で、問題解決そのものへの言及がある

    • 問題解決はモデルを使って解決する:脳内ではモデルをメンタルモデルとして取り扱う。メンタルモデルはWMと長期記憶の両方に存在する。

    • ワーキングメモリで何が起きているのか?

      • 長期記憶からメンタルモデルを引っ張り出して、短期記憶に格納されている内容に適合させる

    • メンタルモデルを取り扱うにあたって、ワーキングメモリの活躍を助ける手法はどんなものがあるのか?

      • 意図的な練習を通して、小さなメンタルモデルをたくさん作っておく

      • 表などに切り出すことで、モデルを俯瞰的に確認する

      • 自問自答して、モデルの改善を図る

    • メンタルモデルを取り扱うにあたって、長期記憶側でどんなことをすればいいのか?

      • デザインパターンなどを学ぶ

      • モデリングツールを学習する

    • 「一流のエンジニアの思考法」でもメンタルモデルについての言及があった

      • MSの人たちは、複雑なアーキテクチャをくまなく理解している。理解できている理由はメンタルモデルが出来上がっているから。

      • メンタルモデルを作り上げるには、時間をかけて理解をする。

      • わからない部分はエキスパートに質問する(2時間以上ブロックされたら確認)

      • 著者はシステム思考?を採用している

  • 命名

  • コードの匂い

  • 問題解決能力を高めるためには

    • 記憶の種類

      • 潜在記憶(タッチタイピング)

        • 意識的な練習を継続することで定着する

      • 顕在記憶

        • エピソード記憶(物語ベースの話)

        • 意味記憶(x^2 + y^2 + 2xy)

    • 問題の定義はいかが存在すること

      • ゴール

      • スタート位置

      • ルート(ここのスピードは長期記憶の総量で変わる)

    • どうしたら顕在記憶の総量を高められるか

      • はじめに全体像を理解して、メカニズムを理解することに注力する

        • コードを読む

        • ペアプロをする

        • !!!!難易度の高いものはやっても無価値!!!(学習関連負荷が発生するので)

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

  • 「コードを書く」時に、脳内では以下の処理がなされている

    • 検索:特定の情報を調べる時(短期記憶)

    • 理解:機能を把握する(ワーキングメモリ)

    • 転写:コードを書き出す(長期記憶)

    • 増強:コードの改修(全て)

    • 探索:とりあえず描いてみる

  • プログラミングにもウォームアップが必要。中断が発生するとウォームアップから始めなければいけない。

  • オンボーディング時には、脳内処理をシングルタスクにしてあげるべき

  • 学習の段階は4つあり、常に意識した方が良さそう←「エンジニア思考法」と全く同じこと言っている

    • スラスラかける

    • ググればかける

    • 作業を組み立てるのに時間がかかるができる

    • なんもわからん

  • 理解曲線は波のような波形をとるとりかいしやすい

    • 最初は抽象的

    • 具体

    • 最後に自分の言葉で抽象化する

@2nofa11
ゆっぽくんが好きなエンジニア