頭のいい人でも理解に時間はかかる。『世界一流エンジニアの思考法』には、著者の優秀な同僚の「いやあ、ビデオを見ても難しいので10回は見てるね。何回見直しても、わからないところはポーズしてメモを見てます」という言葉が出てくる。
検索して(StackOverflowやBing、ChatGPT)、コピペで解決することを繰り返していると、毎回調べるはめになり、効率が悪い。根本を理解していないからだ。「何かを早くできるように急ぐ姿勢や努力」は最終的な生産性を下げ、本質的な理解を遠ざける。
理解に時間をかける。
では、「理解」とはなにか。 ①その構造をつかんで、人に説明できること。(explainable) ②いつでもどこでも即座に取り出して使えること。(anytime usable) ③知見を踏まえて応用がきくこと。(applicable) だと『世界一流エンジニアの思考法』では定義されている。
私の言葉で言うなら、「『理解』とはメンタルモデルを構築すること」だ。メンタルモデルとは、人々が世界を理解し、予測し、解釈し、新しい状況に適用するための、自己の心の中のイメージや理論のことだ。つまり、「私の言葉で言うなら」という言葉は、「(上記の内容を)私自身のメンタルモデルに当てはめて説明するなら」という意味になる。私の頭の中では、理解するという行為は、自分の脳内に点を打ち、その点同士をつなげたり組み合わせたりして、外界の理解対象を自分の脳内構造の一部にする行為であり、それはつまり「メンタルモデル構築すること」と言える。この表現に、私のメンタルモデルについての理解も如実に表れているだろう。
ピアジェの「構成主義」によると、知識というのは客体として存在するのではなく、学習者が構成するものだそう。すなわち、学習者が自分の言葉で理解したり、腑に落ちたと感じられたり、自分一人で実践できるようになったりするときに、学びが起きると考える。
表面的にではなく、構造としてこういう仕組みで成り立っている、という本質をつかんでいると、シンプルにも詳しくも人にわかりやすく説明できる。別の角度から解釈したり、例え話をすることもできる。
基本的な構造から把握した知識は、参考書を見たりググったりせずとも、いつでもどこでも即座に使えて、応用範囲が広い。似た課題における問題解決はもちろん、複雑な難題も因数分解して、ここにあれを組み合わせれば解決できるのではないか等、新しいものを生み出すこともできる。
コード理解の場合、読み飛ばさず、一つ一つ丁寧にサンプル数値を代入し、コードの意図とその背後のアークテクチャを把握する。
「基礎」練習は「誰でもできる」ことだが、「基礎」習得には「時間がかかる」。