写す事は無駄じゃない

「プログラミング言語を覚えるための練習問題」の重要さ - 遥か彼方の彼方から
また脊髄反射エントリ。
プログラムを勉強した事のある人の多くは、HellowWorldかそれに類似したプログラムを一番最初に書いたと思います。
このプログラムを書くには文字を表示させる道具が必要です。
その道具は使った言語によって違うとは思うのですが、どんな言語でもその用いるべき道具を知らなければできません。
その道具を知るのに、最初に何をするべきでしょうか?
道具の使い方を見るのも確かにその一つの方法でしょう。使い方を見るだけで理解できるのならば。
しかし、実際は使用例を見て、その例のとおりやってみて、道具の使い方を覚えてから別なことに応用するわけです。簡単な道具の使い方を一通り学んだら次は練習問題に取り組んでみましょう。どんなものでもいいです。作りたいものがあればいきなりそれに取り組んでも構わないでしょう。

この勉強方法が何かと一緒だと思った人は居ないでしょうか?
私は、算数・数学と一緒だと思っています。
定理の形や使い方を見ても正直な話さっぱり使えません。それを本当に使うには、例を見て、それから別のものに応用します。いずれはその式を例を見ないで扱えるようになり、更には他の式とあわせて用いると言った成長の仕方をするはずです。

あなたが道具の使い方、プログラムで言えば関数リファレンスやその類を見ただけですぐに使いこなせるスーパーマンならば私は何も言いません。しかし、世の中のほとんどの人はそうではないはずです。見よう見まねで何かをすることから学習は始まるのです。
人間が発明した物だってそうです。結構なものが既にある物を真似て作っています。
真似る事を否定するべからず。
それが例え劣化コピーになったとしても、車輪の再発明だったとしても、その結果自らが成長したのならいいのです。大事なのは学習方法を定めることではなく、状況に応じて学習方法を選択することなのです。

ちなみに、元記事の問題をくだらないと言う人が居るそうですが、それはそれで言いすぎだと思います。
元記事:新しくプログラミング言語を覚えたいときに行うべき10の練習問題 | IDEA*IDEA
絶対にこれをやれと言うわけではないですし、この問題が簡単めなのも確かです(言語によってはちょっと厳しい物が含まれていますが)。
当たり前のことかもしれませんが、力がつくのは大きな問題を解いた時、難しい問題を解いた時になります。しかし、いきなり大きい問題に取り組んでも挫折する事は目に見えているので小さな事からやります。これもまた大事な事です。

元記事の反応のひとつに404の弾さんが書いた記事があります
404 Blog Not Found:私の言語遅延学習法 - 三つのルール+1
リンクを飛ぶのが面倒な人のため適当な概要を書くと、システムを直してと言われて必要になったからそれに関して学んで、直すと言った感じです(本当はもっと色々書いてあるので興味のある方は自分で読んでください)。
私はどちらかと言えばこっちに似た感じでプログラムを学んだと思います。
私は高校時代にVBを使ってゲームを作ってました。ただゲームを作ってみたかったと言うのが大きかったように思います。大学に入ってからはC/C++を使ってゲームを作っていました。それを通して分かったのは、小さな問題を複数解くのと、大きな問題を一つ解くのは身につく力が全く違うなという事です。

大きな問題を解ききった時、同じ時間をすべて小さな問題に時間をかけたときよりも必ず大きな経験を得ることが出来ます。先程も言ったとおり、いきなり大きな問題を解くのは挫折するだけではあるのですが、自分の好きなものや必要な物だったとしたら、その勉強にかける情熱や力が増します。だからこそ、好きなものを組めという言葉が出てくるのでしょう。

また、先程の弾さんの記事に原典に当たる、基礎を抑えると言う物も含まれて居ます。これも大事です。理由は弾さんの記事でも述べられていますが、原典で設計者の意図を知り、基礎を抑えることで自分が学んだ事の抜けた部分をカバーするためです。

なんだかばらばらになりましたがここで何かを学ぶ時に大事な事をまとめます。
1.学習は何事もモノマネから始まる。道具の使い方を学ぶ。
2.道具を自分の物にする。使い方を見なくてもある程度使えるように。
3.道具を自分のためになる方向へ使う。大きな問題を解く。
4.自分の学んだ事に間違いや抜けはないか確認する。
これらの事を螺旋的に行っていくべきです。全ての道具を覚えるのは無理ですし、道具の使い方を完全に身に着けなければ大きな問題を解決できるわけではありません。4はひと段落着いたときなど随時行うべきです。ここから学ぶべき道具が見つかることもあります。

あなたは、勉強する上でどこか抜けていませんか?
常に自問自答したい質問です。