遥か彼方の彼方から このページをアンテナに追加 RSSフィード Twitter

2009年06月07日

サンプルを丸写ししてもプログラムの理解は出来ない

プログラムの勉強をするのに、参考書を丸写しして勉強するという方法があります。はっきり言って、あれはほとんど意味がないと思う。

無意味とまでは言わないものの、中途半端に「頑張った感」を味わえるので気をつけた方がいいのは間違いないです。個人的には、丸写しするくらいならただ読むだけの方がいいとも思っています。


じゃあどうすればいいのかっていうと、プログラムの勉強をするときは参考書と少し違うことを書いて勉強するのがいいかなと思います。


最初にどうしようもないことを言うと、プログラムなんて書いても覚えないんですよ。漢字や英単語をたくさん書く練習だって怪しいのに、ましてやプログラムです。参考書を丸写しにしたから指が覚えているなんてことは、特殊能力の領域です。そういえばモンスターのルンゲ警部はキーを叩くことで頭の中のフロッピーディスクにデータを記録していましたね。

それに、暗記そのものには意味なんてないわけです。大切なのは理解。書き方なんてのは調べればいいわけで。


それじゃあ理解するために書くことになると思うのですが、困ったことに理解しなくても書き写すことは出来る訳ですよね。オブジェクト指向なので、一部どこにプログラムを書くべきかわからないってことに遭遇することはあるかもしれませんが、そういう事を除けば丸写しに理解なんて必要がないわけです。

大学のプログラムの講義で「例題を書き写し実行結果を提出せよ」なんて課題が出るわけですが、頭が痛くなります。案の定、誰もが理解を放棄しています。僕も書き写しているときはただの文字列にしか見えません。先生としては理解して欲しくてたくさん課題を出すのでしょうが、やる課題があればあるほど書き写すだけで手一杯になります。


もちろん、まったくの無意味じゃない。IDEの整形機能がただ読むよりも理解を手助けすることがあるかもしれないですし*1。ただ、実際に動くかの確認や、ステップ実行を行いたいならCDからコピーしてしまう方がずっと手っ取り早いと思う*2。どうしても読むだけだと読み飛ばしちゃう人が、どうしようもない手段として選ぶべきなのが丸写しなのであって、何も考えずに丸写しすることを選ぶのは良くないなと思う。

プログラムを書き写すことに何ら疲労感を抱かない人ならともかく、少なくとも僕は何百行とあるプログラムを一字一句間違わずに入力する作業は面倒です。それこそ、プログラムにやらせるべき作業だろと。


それじゃあ何を書けばいいのかっていうと、サンプルとほんの少しだけ違うプログラムだと思うわけです。


まず、さっと読む。簡単にでもいいから理解してみる。そして、それを試すようなプログラムを書く。サンプルよりも簡単でいいし、今理解したことを包括的に扱っているようなプログラムなんかじゃなくてもいい。

例えばif文の例として「tek君の点数が80点以上ならA、70点以上ならB、60点以上ならC、それ以下ならDと表示するプログラム」があったとします。それを読んでみて、動作が何となくでも頭の中で終えたら今度は試しに「tek君の点数が30点以上なら合格、それ以外なら不合格と表示するプログラム」を書いてみればいい。

プログラムの難しさは、ほんの少しとは言え、後の方が簡単です。でも、何も考えずに丸写しする難しいプログラムなんかよりも、理解を元に簡単に書いてみるプログラムの方がずっとためになります。

ときには意図していなかったようなもっと難しい問題に出会うことがあるかもしれないです。例えばさっきの延長で文字列の比較を行おうとしてうまくいかない、とか。でも、そういうことも含めてプログラムはうまくなるんだろうと思う。


とりあえず、意味もなく同じ事を書くのはやめたほうがいい。それで勉強した気になってしまうのが、一番よくない。あるとき「意味がわからないからとりあえずサンプルを打ち込んでいる」と言っていた友人がいたけれど、それで出来るようにあったかは怪しいと思う。

わからなくてもグッと堪えてサンプルを読んでみるべきだし、それで少しでもわかったかもと思ったらそれを試すような簡単なプログラムを書く方がいい。


いきなりプログラムを書いてしまうのも同じくらい駄目で、まずはよく読んでみることだと思う。よくわからないけど丸写しにするとか、よくわからないけどとりあえず書いてみる*3とか、そういった考えでもプログラムさえ正しければきちんと動くけど、それをもう一度組めないようじゃ、少なくとも勉強にはならないよな、と思います。


サンプルプログラムのコンパイルが通ったところで、理解したことにはならないのですから。

*1:それに、環境がちゃんと整ったかの確認をするためにも、HelloWorldくらいは書いた方がいいと思います

*2:それが出来なくて、むなしくも手打ちすることはある。けど、それは勉強の準備にはなっても、勉強ではない

*3:もちろん、色々と試してみるしかない、という状況は発生する。でも、そういうときも、なぜそれなら動くかという風に振り返るのは大切だと思う