はじめに
Felienne Hermans著『プログラマー脳 ~優れたプログラマーになるための認知科学に基づくアプローチ』
プログラマー脳 ~優れたプログラマーになるための認知科学に基づくアプローチ
を読みました。
きっかけは図書館にあったからです。出版から新しくてきれいな状態でした。
翻訳本で少し読みづらかったですが、認知科学からのアプローチで興味深い内容でした。
以下はメモ兼感想になります。
認知プロセス
- 長期記憶
- 短期記憶 (30秒以上保持できない)
- ワーキングメモリ (実際の思考)
プログラミング時には長期記憶と短期記憶の両方をワーキングメモリで処理する
コードの速読
コードを正確に早く読むことがプログラミングのスキルを向上させるのに役立つ
- コードを読むときに最初に情報が格納されるのが短期記憶
短期記憶を鍛える(何度も読む)のと同時に記憶に残りやすくする(わかりやすい単語、デザインパターン、コメント)
忘却に対する対応
- 忘却曲線
感覚をあけて繰り返す
積極的に思い出そうとする
能動的に考える
複雑なコード
ワーキングメモリに認知的負荷がかかる
負荷を軽減する方法
認知的リファクタリング(コードの保守性を高めるためではなく、自分がわかりやすくするために行う)
使い慣れない言語構造の置き換え
PDFなどに印刷してマーカーをつける
サポートアプリケーションの活用(PythonTutor)
変数の役割を考える
コードの読み方
- 理解できたところ、理解できなかったところをはっきりさせる
- コードの中の重要な行を判断する
- 変数の意味を推論する
- 自問自答を行う
- コードの要約を行う
問題解決
問題解決には長期記憶が用いられる
- 問題をどのように表現するかがその問題を考えるのに大きな影響を与える
- 見慣れた問題なら、脳はより簡単に解決できる
- 他の人の問題解決を研究する
- 同僚と共同作業を行う
記憶の種類
潜在記憶
顕在記憶 エピソード記憶
意味記憶
潜在記憶の強化 意図的な練習を行う
熟達者と初心者の違い
長期記憶に蓄積されている記憶の量が違う
→初心者にとっては認知的負荷が過剰になり、コードの全体像を見れない状況
-
認知的負荷を正しく管理するために活動を1つずつ行ってもらう
探索:コードベースの全体像を把握
検索:特定のインターフェイスの実装箇所を探す
転写:作業の手順について明確な計画を与える
理解:特定メソッドを自然言語で要約するなどでコード内容を理解する
増強:クラスへの機能追加 -
新人の記憶をサポートする
長期記憶のサポート:関連情報の説明
短期記憶のサポート:1つのことに特化したタスクの用意
理解するだけのタスクを割り振る
コードを一緒に読む
感想
脳科学的な記憶領域がプログラミング作業でどう使われるかの説明だけではなく、強化するための具体的な方法まで示してくれていて素晴らしいと思いました。
良いコードのためのレビュー観点につかえるものもまとめられていて活用していきたいです。
また、変数名の付け方については1章分割り当てられていて、重要性が伝わりました。