プログラミング脳
参考書:プログラミング脳
始めに
プログラミングを初めて3年、他の人間よりも知識の定着が悪い?と感じている所、
他の人はどういう頭の使い方をしている?という疑問を持ち、何か蓄えになる本は無いか探していたところ丁度発見し、面白そうなので読んでみました。
どういう本だった?
人間の脳の働きを理解する所から、プログラマとしてのスキルや習慣を向上させるための術が書かれています。
「プログラミング」をする際に自分が抱えている課題をどうクリアしていき、どうコードを読んでいるのかを振り返りながら読むと、「そういう考えもあるのか!」とか、「ああ、なるほど確かに」と思うような内容が客観的に分かる本になっていたかと思います。(個人的には前半が役に立った。後半は難しく。。)
コードレビュー時の混乱
下記のコードがあった場合どういう思考で内容を読み取って行くかと考える
こちらはYoutubeなどに設定しているチャプターがあると仮定した時に
引数の時間に該当するチャプターの情報を「chapters」から取得してくる関数となります
// 60000/ms (1分)
chapters = [
{time:60000, title:チャプター1},
{time:120000, title:チャプター2}
]
function getCurrentChapter(ms){
return chapters.filter(c => c.time < ms).at(-1)
}
console.log(getCurrentChapter(60001))
この本ではこれらを考える時に
「知識不足」「情報不足」「処理能力不足」の3つに分類し、なぜコードが分からないかを考えていきます。
知識不足
filter
やat
などが分からない場合はメソッドについてそもそも
何をするためのものかという「知識」が不足している事が原因で混乱が発生していると考えられます。
情報不足
仮に、getCurrentChapter
しか書いていない場合はどうでしょうか
const chapterTitle = getCurrentChapter(60001).title
console.log(chapterTitle)
getCurrentChapter
が何を返すか正確には分からないため
他のファイルで定義されているgetCurrentChapter
がどう使われているか、
どういうパターンで使える関数化という事を調べるプロセスが必要となります。
これは「情報」が不足しているという事が原因で混乱が発生していると考えられます。
処理能力の不足
getCurrentChapter(60001)
では何が返って来るか、定義を見ればわかる人は分かるかと思われます。
ですが
for (let i = 1; i <= 12; i++) {
for (let j = 1; j <= 12; j++) {
console.log(i + " * " + j + " = " + (i * j));
}
}
このようなコードがあった場合、吐き出される内容をすぐに導き出すのは困難かと思います。(少なくとも私は)
この場合1周目はiが0でjにも0が入ってi=0
j=0
0*0=0
だから0*0=0
で2週目は・・・
という風に頭の中で処理する必要があります。頭の中に記憶しながら読み進める事が困難に感じる
これは「処理」能力の不足による混乱とされます。
つまり?
どれも厄介ではありますがそれぞれで違う原因で発生する混乱わかります。
が、それぞれは最初の目的をきちんと頭にとどめつつ、新しい情報を取得・処理をする必要があります。
この本では
知識不足=長期記憶に関する情報が不十分
情報不足=短期記憶に関する能力が不十分
処理能力の不足=ワーキングメモリの問題
※ワーキングメモリ(入ってきた情報を頭の中で保持して、どの情報を覚えておけばいいのか、どの情報は削除していいのかを整理する能力)
とされる
そして、ワーキングメモリは限りがある。長期記憶である知識を豊富に蓄える事で
短期記憶やワーキングメモリを使わなくて済む様にする事で、コードを書く速度や頭での処理スピードが上がる。との事
結論
今回本の一部を備忘録として書きましたが、読み物としても面白く感じました
特に、被験者の頭に電波計を付けて脳活動を測定するという実験で
プログラムミングを正確に行うという点については、数学的なスキルよりも一般的な認知能力(ワーキングメモリと推論)が重要な因子であるという結果が得られたという内容もありました。
(読解力を付けるというのもプログラムを書く上でかなり利点がある?)
定期的にインプットを行い、その内容は自分なりに解釈してアウトプットする事が大事なんだなーと改めて感じる本でした。
その他、記憶の定着やコードを速読する方法の手順やコードを深く理解する方法・考え方などの方法が脳科学の分野から様々書かれていました(短期記憶にはフラッシュカード(暗記カードみたいなもの)が役立つなど)
気になった方は手に取ってみては如何でしょうか。
Discussion