3章は「プログラミング言語の文法を素早く習得する方法」について書かれていました。
フラッシュカードで文法を覚える
有効なんだろうなと思うが、面倒なのでやらないだろうなと思った点としては、プログラミング言語の文法や書き方をフラッシュカードにするといいんじゃないかということでした。
理由としては、「調べているときに別のことに気が移ってしまい、すぐに戻ってこなくて時間を無駄にするから」とのことでした。確かに、正しい。。。Twitterみてしまったり、Microsoftのリファレンスページでおもしろそうな記事があったりして、時間を潰してしまうということですよね。ありますあります。
その点では、Book Clubでも話題になったのですが、生成AIでうろ覚えのコードでも書いてくれることによって、効率という意味では落とさずに作業できるかもしれません。漢字を書けなくても読めるように、コードも読むのとテストを回して正しいことを確認できれば問題ないという見方もあるかもしれません。
その点では、自分で理解していないコードを流してその正しさを確実にチェックするというのは、実際には難しくて、コードを理解していれば、複数のキーになる値をテストすればいいのですが、理解していないコードの場合は、大袈裟に言えば全数値チェック、プロパティーベースドテスティングのようなテスト手法をとっていかないと、正しさを確認できないかもしれません。
個人的にはC#を書いていてもいつも悩む書き方がいくつかあります。
swtich caseではなく、value switch { 1 => true, _ => false } ;のような書き方のもの
LINQでJOINやGroup By
リフレクションを使ったメソッドの実行
このようなものをメモに書いておくなどしておくのはいいと感じました。(フラッシュカードは確かに覚えそうですが、そこまではどうかなとおもいました。)
記憶の貯蔵と検索
もう一つ面白かった点として、記憶には貯蔵と検索があり、貯蔵されていても、検索能力が衰えるということがありえるとのことでした。確かにこれは実感することがあり、覚えているのですが、「あれなんだっけ」と考えてしまうということがあります。
検索能力を衰えさせない方法として、検索して思い出そうとする努力を続けるということがあり、確かにその通りと思います。思い出せないときに、あれなっだっけ、まいっか。と見つける努力をしない内容に関しては、どんどん理解が衰えていきます。
老化によって衰えるということはあまりないとしても、探す努力をしなくなったら衰える速度が早まりそうだと感じました。
また、記憶で見つからなかったときに見つけるために自分のためにメモを残しておくことについても考えることができました。
関連付けて精緻化すること
また、保存の際には自分の既に知っていることと関連付けて記憶することが効率的に記憶する方法として書かれていました。そのため、同じことを聞いても、それぞれの人が自分の既に知っていることと関連付けて記憶するため、残る記憶の形もそれぞれ違うものとなってしまうとのこと。
それで自分のぼやっとした記憶をクリアなものにしていく作業のことが、「精緻化」として書かれていました。この単語の読みがわからなかったのですが、調べたらわかり、勉強になりました。
ソフトウェア開発に関しても、学んだ新しい概念に関して最初聞いた時ははっきり理解できないものの、関連する内容を学んだり、実際に使ってみての知見と比較して理解を新たにしていくことにより、精緻化できるとのことで納得でした。
割り込みをさける
基本的なこの章のポイントとして、調べるために離脱して割り込みが入ることがパフォーマンスの低下につながるとのことでした。これはプログラマーとしてありがちなことで、僕も個人的には1日の中でプログラミングに没頭する時間に関してはヘッドセットをつけて、Youtubeで「自然の音色」や「rain sound」などと検索して言葉ではない雑音を流して集中するようにしています。
特に難しいものを作ったり修正したりしているときに一旦集中が切れてしまうと、同じ理解に戻るのにまた時間がかかったりするので、中断が入るとイラッとしてしまったりしますね。
これに関してはしょうがないところもあると思いますので、できるだけ良い環境を作れるように努力するしかないですね。
まとめ
この本はプログラミングをテーマに書かれているものの、一般的に記憶してそれを役立てるという文脈で書かれているため、とても良い本と感じました。引き続き社内のBook Clubで読んでいきたいと思いました。