アプローチは違うがリーダブルコード的な書籍と結論は一緒。
脳の仕組みの面から解説している点がとても面白い。
自分が経験的に無意識でやっていたことが、正しいということがわかった。
プログラミング経験の長い人なら共感できるはず。
長期記憶:文法、アルゴリズムなどを記憶する。PCに例えるとストレージ
...続きを読む短期記憶:メソッド名、変数名などの一時的な記憶。PCに例えるとメモリ
ワーキングメモリ:短期記憶の情報を元に処理をする。PCに例えるとCPU
短期記憶、ワーキングメモリに記憶できる要素は2~6個
それを超えると脳が混乱する。
ゆえに長い関数を理解することは、脳にとってとても負荷の高い作業
これを認知的負荷と言う。
認知的負荷には二つある。
課題内在性負荷:コードが分かりづらいことによる負荷
課題外在性負荷:コードを書いた人と読む人の知識ギャップにより生じる(例えばラムダ式が分からない人がラムダ式で書かれたコードを読む等)
ベテランプログラマは複数の情報を塊で記憶している。
いわゆるアルゴリズムだとかデザインパターンだとか。
これをチャンク化という。
例えば下記のケースはいずれも12個の文字だが、後者の方が覚えることが容易。
・abk mrtpi gbar
・cat loves cake
それは"cat", "loves", "cake"という単語3つにチャンク化しているから。
初学者にはそれができない。長期記憶に情報がないことが原因。
ゆえにベテランプログラマに比べて認知的負荷が高まる。
プロジェクト単位では、コードの書き方に一貫性を持たせると脳への負荷が低い。
命名方法としては、キャメルケースの方が記憶しやすい。
スネークケースは変数を認識しやすいメリットがある。
プログラマが費やす時間の大半はコードを理解する(読む)時間である。
初学者は書き方を学ぶよりも先に読み方を学ぶべし。
短期間で詰め込むいわゆるブートキャンプ的なやり方はうまくいかない。
長期にわたって定期的に学ぶ方がより脳へ定着する。
スポーツの世界ではフォームだとか型が重要。そのための反復練習を行う。
しかし、このやり方をプログラミング界隈では行わない。
forループを100回書いて覚えるというやり方が実は有効。
プログラミング能力と数学的スキルに相関性はない。
プログラミング能力と相関性が高いのは言語能力。
(確かに話が分かりづらい人はコードもわかりづらい)
ある知識が別の知識に活かされることを移転という。
移転は主に近いもので起き、遠移転はほとんど起きない。
論理的思考を養うためにプログラミングを学ぶという考えは間違い。
プログラミングを学んだからと言って、論理的思考が養われることはない。
最後に割り込みについて。
コーディングに集中している最中に声を掛けられたり、チャットツールのメンションがきたりすると一気に集中力がなくなる。
そこから再度コードを書き始めるにはおよそ15分かかる。
集中していることがわかるときには声をかけないのがベスト。