理解が浅いと記憶も悪くなる
同僚やマネージャは、はるか前に書いたコードについても、私が聞いたらすぐにレスをくれるし、オンラインの会議でコードやアーキテクチャに関してディスカッションしても効率よくやれる。
なぜ彼らは記憶力がいいのだろう? 私なんて、つい先日自分で書いたPull Request のコードですら、すっと思い出せないことが多いのに。
これを突き詰めて考えたとき、ふと頭に思い浮かんだのは「もしかすると、これも理解の浅さが原因じゃないだろうか?」ということだった。
つまり、私がアドリブではうまく説明できないのも、あまりディテールを覚えていないのも、実は十分に理解できていないからではないだろうか。
自分がコードを書いて、既存のデザインを変更し、各種テストもしっかり通して、新たに動くと確信を持てるコードを書いたのであれば、大抵「理解しているだろう」と思いこんでいる。だが、試しに書いたコードについて口頭で説明しようとしても、曖昧模糊として、全然うまく伝えられない。
「そうか、自分がやったからといって、理解できてるとは限らないんだ」という事実に行き着いた。
人に説明可能な状態にもっていく
そこで、時間は気にせず、自分がやったことをクリアに説明できるよう時間をかけて言語化してみる。すると、いろいろな箇所で「あれ、俺なんでこここうしたんだっけ?」「ここって、他の実装でもいけないかな?」「この部分って、こういうペイロードが来たら破綻するのでは?」と疑問点が湧いてきた。
結果的に、書いたコードを書き換える必要はなかったが、説明のためにコードを見なおして整理して考えると、自動テストを通すことによって、動いているけど「わかっていない」部分をたくさん発見した。
また、説明可能にするということは、構造を整理して把握して、脳のメモリに乗せる必要がある。
先に、「どうしたらそんなに細かいところまで把握できるのか?」という私の疑問に対し、スキップマネージャのアニルーダが「メンタルモデルをつくる」ことだと示唆してくれたエピソードを紹介したが、まさにメンタルモデルを使った構造的な把握こそがそのまま記憶にも直結する。
逆にいえば、メンタルモデルを脳内に作成するためには、単にやって終わりではなく、細かいところまで自分で「ハンドル」できるレベルまで理解して、整理する必要がある。つまりレベル1の領域だ。そのためには単に「できた」ではなく、少なくとも「説明可能か?」というセルフチェックを入れたほうがよい。