書籍「プログラマー脳」
概要
よりよいプログラミングのための認知科学的アプローチ
モチベーション
コードを読み書きする時、様々な認知負荷が伴う
設計手法やデザインパターンの背景となっていることも多い
プログラミングの認知科学的側面を学び、学んできた設計手法(+普段の苦しみ)への体系的理解の糧にする
まとめ
認知科学に関する語彙の習得
コードを読み書きするときの苦しみが、どこでどのように生まれるのかを俯瞰
言語化の一例を眺めることができたのは貴重
具体的なプラクティスの提案は 、 (自分にとって) 難のあるものもいくつかある
エッセンスは分かったので、自分なりの方法で取り組む必要がありそう
言語仕様レベルで解決できる要素も多かった
Effective ~ やクックブックにあるコーディング規則にはしっかりと裏付けがあることも理解できた
第1部は、コードリーディングに関する認知負荷
ワーキングメモリと長期・短期記憶の関連性
以降にもしきりに言及される
認知負荷は、ワーキングメモリが処理しきれないために発生する
認知負荷は、振る舞いそのものの複雑さ(内在性)と、コードの書き方や知識のギャップ(外在性)に分かれる
外在性の課題を可能な限り減らす
リファクタリング、共通言語の共有
第2部は、コードそのものついて深く理解
コードを構成する要素(変数)の意味を意識する
変数の意味のパターンは多くなく、カテゴライズできる
変数の名前にも反映することで、より読みやすくなる
自然言語とコードは、多くの共通点がある
効率的な自然言語の読み方と同じ方法を適用できる
目の前にある問題の抽象化によって、コードを読み書きする際に関心事に集中できる
ドメイン駆動設計に近いものを感じる
メンタルモデル
直面する問題を、ワーキングメモリ中で抽象化して捉える
想定マシン
コンポーネントの振る舞いを抽象化して捉える
メンタルモデルと近いが、プログラミングで用いられるもの
想定マシンが悪影響を及ぼすこともある
後に説明される「誤認識」に関連
知識の転移
既存の知識を新しい状況に転用
かならずしもいい方向に働くとは限らない (誤認識)
例えば、OOPに基づき構築されたプログラミングのメンタルモデルは、関数型プログラミングの理解を阻害し得る
吸収には、メンタルモデルを更新する必要がある
既存の知識との類似点や相違点を明確にすることで回避できるかもしれない
第3部は、問題解決について
無意識に働く記憶=潜在記憶(手続き記憶)と、記憶していることを自覚している記憶=顕在記憶(宣言的記憶)
潜在記憶は、繰り返しによって時間的段階を踏んで強化される
作業の自動化により、タスクの実行を推論なく行えるように
繰り返しを増やすことができ、潜在記憶を改善できる
第4部は、効率的な共同作業への認知科学に基づいたアプローチ
設計についてもこちらに書いていた