プログラミングを勉強するときはアハ体験を求めてはいけない
プログラミングを学ぼうと思ったときに、書籍やウィキペディアに掲載されている言葉をそのまま読んで「あ〜〜、なるほどねっ!そういうことね!わかったわかった!」ってなることって最初のうちは少ないと思う。かつての僕の考えでは、知識っていうのは自分の中で「理解」しながら進めていくもんだと思っていたから、理解できない文章を読んでも、腑に落ちないし、っていうことは頭に全然入らなくて全然覚えられないし、覚えてもすぐに忘れる。覚えてもすぐに忘れる。覚えてもすぐに忘れる。。。。
覚えてもすぐ忘れるなんていうのは、深く理解してないってこと。80パーセントは時間を無駄にしている。可哀想すぎる!! だからそれを踏まえて、今日は、今だから言えること、少し言いっておきたいんだ。「今にして思うけれど!! プログラミングの学習に限って言えば!!! プログラミングの学習は理解しながら進めていくものではなかったなー!」
はい。まあそんな風に言えば誤解を生むのかもしれないけれど、これは僕の中でたどり着いた真実です。なんだろうな、なんて言えばいいのかな、「理解した」っていう感覚を明確に言葉にするなら「さっきまでは空が曇っていたのに、今じゃ空の曇りは一切吹っ切れて真っ青な青空が広がっている」みたいなね。そういうのを「理解した」っていえばいいかな。文字通りアハ体験した瞬間が、理解したってこと。(プログラミングを長くやっていれば、そういうアハ体験に出会うこと、何度もあると思うのです)
でも、例えば話しが少し逸れるけど、数学の円周率を理解するときに、そんなような「さっきまでは空が曇っていたのに、今が空の曇りが一切吹っ切れて真っ青な青空が広がっている」みたいな理解を求めても、絶対に無理だと思いませんか。あるいは数学の勉強を深く進めていけばさ、3.14の先を「理解」しながら言えるのかもしれないけれど、少なくとも僕たちは最初のうちは、円周率っていうのは、3.14だ。そういうものだ。っていう風に「理屈」で「分かっていた」んだとと思う。
円周率に限った話しではなくて、例えば二次関数がy=ax2+bx+cのグラフだなんてことを「理解」するには、数学をそれなりに深く勉強しないと、無理だと思うんだよなあ。なんの意味があるの?なんの役に立つの?と考えながら勉強するのは不毛です。最初に「理解」しようとしてもダメ。「そういうものだ」という「理屈」で分かる必要がある。そういう訓練をしたほうがいい。
人間は、知らないことは理解できませんから。人間っていうのは、自分が知っている世界しか感じることができません。だから、そもそも知らないことを理解しようとするのは鼻から困難なんです。
だから、プログラミングを勉強するときはアハ体験を求めてはいけない。プログラミングを勉強するときは、まずは、そういうものなんだということを、理屈として分かる、無理やりそういうものだと知る。そうやって覚えていく。そのさきに「理解」という深いものがあるのです。
これが大切です。