新しいプログラミング言語を学習するにあたり、私がいつもはじめにするのはサンプルコードを見ながらそっくりそのままコーディングする、いわゆる写経である。
書籍でコードをみていくら考えてもわからなかったことが、実際に自分でタイプしてみると「ああなるほど」と思えるようなことがよくある。
何も考えずにただ書き写すだけでは意味がないという意見もあるが、私は自身の経験から、ただ書き写すだけでも一定の効果はあると思う。
コードを読んだだけでは理解できない理由
プログラムの流れを理解するためには、コードの構造を把握しなければならない。
おそらく書籍でいくらコードを読んでも理解できないのは、見えているだけで頭には入ってないからではないかと思う。
何かについて考えるためには、考える対象(つまりコード)が頭に入っていないといけない。
たとえばこのFizzBuzzのコード。
Sub FizzBuzz() For i = 1 To 100 If i Mod 15 = 0 Then Debug.Print "FizzBuzz" ElseIf i Mod 3 = 0 Then Debug.Print "Fizz" ElseIf i Mod 5 = 0 Then Debug.Print "Buzz" Else Debug.Print i End If Next End Sub
見ている本人はしっかり頭に入れているつもりでも、ぼやっと画像でしか入ってなかったり、
(↑脳内イメージ)
部分部分もしっかり見ているつもりでも、サーチライトみたいに今見ている箇所しか見えてなかったりする。
(↑脳内イメージ)
なぜただ写経するだけで覚えられるのか
しかしコードを書き写すとなると違う。
まず画像を文字として認識し、それを押すべきキーの位置に変換し、さらに指の動きに変換し、最後に出力された文字を再度認識して初めて一文字入力される。
つまりアウトプットするためには、意識的にせよ無意識にせよ、必然的に情報は脳を通ることになる。
さらにコードを見ているときは見たい場所が見られるのである意味すべての行はパラレルである。これでは頭の中にストーリーが構築されない。
自分で入力するとなると、上から順に入力していくことになるので、頭の中には時系列で情報が刻まれることになる。これが、プログラムの流れの理解につながるのではないか。
コードを見ているだけではただの見学であるが、自分で入力してみるのは体験になる。
体験したことは記憶に残りやすい。
まぁ上達してくるとコードを読むだけで理解できるようにもなってくる。だから闇雲に写経していればどこまでも上達するというわけではない。
でもやっぱり初心者は圧倒的にコーディング体験が足りていないので、まずは写経。
これが私の持論である。
具体的な写経のやり方
- 適当なコードを見繕って、それをタイプする
- コードをよく見る
- コードを見ずにタイプしてみる
- 行き詰る
- 答えを見ながらタイプする。
このとき重要なのは、2と4で頑張らないこと。
2で頑張って覚えようとしないこと。
4で頑張って思い出そうとしないこと。
それぞれ10秒程度で切り上げる。
頑張ってしまうと、まず時間がかかる。テンポが悪くなる。「覚えられない」「思い出せない」といったネガティブな感情が残る。
こと記憶に関しては、覚えよう・思い出そうと頑張って意識しても良いことはない。
記憶の定着は、単純な反復回数で決まる。頑張るなら、回数に関してである。
行き詰ったら、ただちに答えを見ること。
覚えよう・思い出そうと頑張るヒマがあったら、一文字でも多くタイプする。軽快に、何度も、テンポよく。
大体頭に入ってきたら、ようやくコードについて考える時だ。文法を確認し、変数の値を確認し、プログラムの流れを考えてみよう。完全には理解できなくても、読んでいただけの時にくらべて遥かに理解しやすくなっているはず。
記憶について私の考えをまとめた記事があるので参考に。
thom.hateblo.jp