プログラムの勉強において暗記は必要か
答えは言うまでもなくNOである。いやNOはいいすぎかもしれない。暗記が必要なこともあるかもしれない。が、もしあなたが「暗記しきれない」と悩んでいるなら、安心して欲しい。世のプログラマーはすべてを暗記しているわけではないのだから。
暗記よりも考え方を覚える
プログラミング学習において重要視すべきは「なぜそうするか」の理由を理解することだと私は思う。
「サイトではこう書けばできたって書いたあったからそのままやってみたけど動かないです」というのはよくある質問だが、まずはその状態から脱却すべきだと思う。こう書いてあるけど、これはなぜ必要なのだろうか。これがなかったらどうなるのだろうか。そういったところからアプローチして、それがなぜ必要なのかを覚えていくのがいいと私は思っている。
覚えていくというのは若干語弊があるかもしれない。理解していくというのが正しいだろうか。
そもそも本稿の本題は「覚えなくても良い」である。必要なのは考え方を理解しておくことだ。
あとは「やりたいことを実現するために必要なものはなにか」や「それを実現するためにはどこを見れば・調べればよいか」というスキルを身に着けていけば、もうあなたは十分に中級者を名乗れると思う。
すべて暗記よりも効率がいい
ここからは余談である。
私はそもそも暗記するのが苦手だ。そこで取る方法は、必要最低限のことだけ覚えることだった。
私の経歴は若干異色である。公認会計士を目指して勉強をしていた時期があるのだが、このときに取った戦略がまさにそれである。出題範囲はべらぼうに広いので、すべてを記憶することなど不可能である。だから基本的な考え方だけを覚えて、あとはその考え方を元に「これこれこういう理由で設けられている規定なのだから、答えとしてはBとなる」みたいに導き出すようにしていた。
そんな覚え方をしていたので、答えを選択肢から選ぶ短答式よりも、その先の論文式試験の方が好きという変なやつだった。短答式に合格するのにはかなり時間がかかったが^1、論文式は一発合格した。
……そんな過去話はどうでもよいのだが、基本的に覚えなくてもよいことは覚えないのが大事ということが言いたいのである。
この方法はプログラミングにおいても有効である。覚えておくべきことは自分がやりたいことを実現するには「何を使えば実現できるか」と「どこを調べたらそれが分かるか」である。
とはいえそれが判断できない
初学者には、どこを覚えてどこを覚えなくていいかなどの判断はつかないだろう。私もはじめて学習する言語については似たような状態になる。そんなときは、理由に着目するのがよいと私は考えている。
この式はなぜ必要なのか。ここでループ処理を使うのはなぜか。その理由を考えるのである。
一方で理由など一切考えず、書かれていることをそのままやることもある。インストール手順など、いちいち理由を考えるのはムダだ。このプログラムを使うには、別のBというプログラムが必要だからインストールする。ただそれだけなので、そんなことをいちいち覚える必要はない。使いたいプログラムのインストール手順、使い方のマニュアルを読めばすむことなのだから。
中にはそういった、考えたところで仕方のないこともある。ここはもう「そういうもんだ」と割り切ることも時には必要なのだ。理由を考えすぎるとドツボにはまるので、バランス感覚が大事である。それがまた初学者には難しいことなのだけれど。
そういうときは、30分なり時間を区切って、理由を調べてみてわからなかったら「そういうもんなんだ」と割り切ってさっさと先へ進むのをお勧めする^2。
一番いいのは、師となるべき人を探して、枝刈りしてもらえるときっと学習にはずみがでるだろう。ちなみに私をメンターとして選んでほしいとかいう話ではないのであしからず。私はプロダクトをいっぱい作った経験があるわけではないので、こういった程度の話をするのが関の山である。
この記事は「覚えることがいっぱいありすぎてどうしたらいいかわからない」という迷える子羊たちに、全部覚える必要はないんだよということを伝えたいというだけの記事である^3。