いわゆるプログラミング言語における写経について、色々な意見があります。色々な意見、を割と幅広くまとめた記事にはこんなのがありますね。大変参考になります。
蛇足に蛇足を加えるのが私のスタイルなので、大ざっぱに「サンプルソースコードを自分でも実行可能な環境で入力してみて習得する」=「写経」とした時、何が有効なのかを述べます。
先人達も諸々の工夫はしています。しかし、どちらかというと技巧的なレベルの話が多く、例えばAction Learningの知見が活かされていたりするものはあまりないように思います。
「読む」という行為が持つ曖昧さをどう乗り越えるか?
読書でよく発生する問題は、「分かったつもりなのに、読み終わったところで全然使えない」という問題です。それを乗り越えるために、心ある教科書は「演習」を設けていますが、残念ながら、そうでない書物もあります。しかし、それでもプログラミングの教科書であれば、サンプルソースは載っています。だから、演習が無い場合、演習の代用として「写経」を行うという可能性が生まれます。
その場合、覚えてから記憶を頼りに書き、間違っていないかを見比べる、というのが重要です。書見台は要りません。ない方が良いのです。記憶が間違っていないかどうかは、実行してみればある程度分かります。実行してみて動かないようなら読み直して、もう一度記憶を頼りに直しましょう。WEBからサンプルソースをダウンロードできるなら、diffを取っても良いですが、ちょっと易きに流れますね。
ただし、普通IDEの支援機能を使って書くような言語の場合、その支援機能をフルに使って下さい。JavaのコードをEcripse無しで書ける、というようなエクストリームプログラミングができるようになる必要はないでしょう。
Action Learningの応用
Revans' FormulaというAction Learningの親玉が定式化した、とてもアバウトな式があります。
Learning = Programming + Questioning
というやつです。先の「写経」はRevens' Formulaで言う「Programming」に相当します。このレベルは、教科書の本文中に書かれたコード片くらいで充分です。それ以上の粒度のものを「写経」しても、労多くして実りの少ないものになります。
次は、「読経」です。
コードサイズにして数百~数千行くらいのコードを読んでみるのが、入門書+写経の次のステップです。本当はロール紙が良いのですが、最近は見かけ無いでしょうから、できればA3サイズくらいにびっしりプリントアウトして、のりで繋げましょう。長い机の上にそれを拡げて、コードリーディングをします。ノートPCとWiFi、お菓子とドリンクも欲しいところです。後は赤ペンとプロッキー2色があると良いですね。
人間の認識上の視野は、不思議と「ワークスペースの広さ」に影響されます。そのコード全体に意識を拡げるには、広い場所で頭を使うのが一番です。
学習目的のコードリーディングは、幅優先探索がオススメです。まず一番表層の流れを理解したつもりになるところまで読みます。構造化プログラミングのパラダイムはあらゆる言語に広まっていますので、関数を適用しているところをブラックボックスとして読み飛ばせば、表層の流れは読めます。ここで、赤ペンで、疑問を書いていきます。「なぜ?何のために?」が主たる問いになります。意味が分かった行に印を付けながら進むと、大体関数呼び出しと内部用の設定値以外の最上層に印が付きます。
そして、今度はもう一段中に踏み込みます。幅優先で理解を深めていきます。かつての自分の疑問に、自分で解答しつつ、適宜遡りながら、読み進めれば良いのです。
疑問の解消の仕方は4通り。
- コードの中に答えがある
- 実験用コードを自分で書いてみて答えを明らかにする(そのためにノートPCがあります)
- インターネットに答えがある
- 先輩や上司の中に答えがある
という順です。仕事の一環として勉強するなら最後のふたつは順序が逆転しますが、いずれにせよ、初めのふたつが本命です。「ぐぐれかす」というのは、ある意味簡略化されすぎた表現で、ぐぐってみれば「質問者はなんで自分で試してみないの?」みたいな模範解答に辿り着くことがままあります。
ちなみに、さっきの「仕事の一環」に関して言うと、インターネットで自分で答えを検索して、変なの拾って、変なドグマに支配されるのは勘弁なので、私だったら「ぐぐる前に俺に聞け」と言います。まあ、結局、後ろに立ってぐぐらせることも多かったですけどね。新人だと記事の目利きがなかったりしますからね。
とゆーわけで、自分の疑問を全て解消できれば、「読経」は完了ですが、改めて全体を見渡すと、「これがこのプログラムの構造だ!」という印を書きたくなってきます。一番大事なブロック、最もトリッキーな制御構造など。それを大胆にプロッキーで書きこみます。これが、成果物です。社内の勉強会で発表するもよし、書き初め風に飾ってもよし、後は好きになさいませ。
最後は「瑜伽」だっ!
ゆが、と呼びます。いわゆるヨーガ。実践的な修行ですね。「やりたいこと」を設定して「How?」という問いに自分で答えるのです。もう、そこからは無数のやり方があるでしょう。個人でも学びは多いですし、チームでやればもっと濃密になります。ハッカソンなんかも良いですよね。んでもって、チャクラが開きまくって、素敵なプロダクトが生まれますように。