プログラマー脳
https://m.media-amazon.com/images/I/71XoZWS7tjL._SL1500_.jpg
認知科学的側面から〜というサブタイトルにある通り、前半は特に脳の働きのクセのような部分の概念について説明が割かれ、具体的なコードでどのようなケースがそれに当てはまるか、というような対応を確認しながら話が進むので読みやすい。
コードをプリントアウトして自分なりのメモを書き込みながら噛み砕いて理解していくというアプローチは、想像してみただけでもすごく理解が捗りそうだなと思った一方で、今まで思いつかなかったなぁという気持ちにさせられた。
一方で、似たようなアプローチをやったことがあるのを思い出した。Laravelを初めて触ってWebアプリケーションフレームワークの使い方が全く頭に入ってこなかった時、動画教材を見ながら写経するのを諦めて処理の流れと使われているメソッドの概要をひたすら紙に書き出して理解した経験がある。変数の定義から、どこでどのように呼び出されているか、みたいなことを紙の上で矢印引っ張って書いたりしていたので、実は似たようなアプローチだったんだなと思った。
関連するファイル全部持ってきてコードをプリントアウトする労力がすごそうなので、結局みんなコードを見ながら紙にメモするくらいになるんだろうな。コードリーディングどうやってやっているかを先輩エンジニアに聞いた時、その場でササっとMermaid記法で遷移図書いたりするよー、と言ってた人がいたけど、私はまだまだ手書きで理解してからじゃないとまとめられないなぁ。
自分が数年間学びながらやってきたことを、改めてしっかりと言語化してくれている感じがする箇所も多いと感じた。こういう本から引用して教えることができると、とてもよさそうに思った。
以下、役立つなと思った概念やトピックのメモ。
そもそもコーディング中の混乱は、知識不足、アクセス可能な情報の不足、脳の処理能力の不足、という3つも問題によって引き起こされる可能性があるということ。
自分が今、何が原因で混乱しててるのかを立ち止まって考える時の道しるべになるなと思った。
分からなくてドツボにハマっていく前に深呼吸することができるようになりそう。
変数の役割に注目する。ほぼすべての変数は11種類の役割に分類される。変数を見た時にどの役割を担っているのかに着目することで書かれているプログラムの特徴を掴むことができる。
主に変数名などから無意識的に分類していることが多かったかも。意識的になることで変数名の命名にも役立ちそう
知の転移が悪影響を与えてしまう場合もあり、これは負の転移と呼ぶ。新しいことを学んだり新しいタスクを実行したりするのを既存の知識が邪魔することを意味する。
既存の知識によって誤認識に気づかずに前提がズレることがある。これはプログラミングに限らず、だなと思う。老害もこれが原因。アンラーニングの大事さ。
より良い命名の3ステップ。1. 名前に含めるべき概念を選択する、 2. それらの各概念を表す単語を選ぶ、3. それらの単語を使って命名を行う
無意識的にやっていたが意識的にステップを踏襲するとよさそう。
1のステップの時に概念が絞り込めなかったら良い実装ではない、という判断ができそう。