Facebookで、ある学生さんがプログラミングの勉強をしたいということで、良い自習の方法はないか?という相談をしていました。初心者が「自習」でプログラミングを学ぶことは、どうすれば効率的なのかを、改めて考えて回答しました。私のおすすめ学習法は「写経」という方法です。プログラマの間では今となっては割とポピュラーな学習法ですが、初心者にとってもすごく効果的だと思うので紹介しておきます。

プログラミングは知識だけでは駄目

まず、プログラミングをしたことのある人ならわかると思いますが、プログラミングは知識だけを身につければ出来るようになるものではありません。学校教育における歴史や地理のように猛勉強で覚えれば出来るようになる訳ではないです。もちろん、学ぶプログラミング言語の文法や基本的なAPIについては覚えているにこしたことはありませんが、それらを覚えることはそこまで重要ではありません。プログラミングは、自転車や自動車に乗るといったような身体性の技術に近いと思っています。動かしてみて、試してみて初めて身に付く感覚です。通勤の電車の中で一生懸命、プログラミングの本を読んだとしても、さほど効果は薄いでしょう。

そんなプログラミングを身につける効率のいい方法は、自分自身でプログラムを書くことですが、そうは言っても初心者にとっていきなりプログラムを作ることは難しいです。プログラミングの難しさには、「何を作るか」と「どうやって作るか」の2つの問題が隠されているからです。その辺りについてはプログラマと漫画家〜「何を作る」のか考えたいプログラマと「どう作る」を追求するプログラマで書きました。プログラミング初心者はまず「どうやって作るか」を身につけるべきです。そのために出来ることは、チュートリアルのように実際にプログラムを作っていく内容の本を買って、そこに書いてあることを、自分自身の手で打ち込んでみることです。プログラマの間では、それを「写経」と呼んでいます。

写経しながら少しずつ変えていく

写経の大事なポイントは、自分の手でソースコードを打ってみて、実行してみるということです。そうすることで、プログラムが動く感動も味わえますし、もし動かなければどこが悪ければ動かないのかを知るきっかけになるからです。おそらく、どんな言語でも最初は"Hello World"を表示することから始めたはずです。そのプログラムの表示する文字列の部分を変更していくことで、どこを変えれば、どこの振る舞いが変わるのか、を学ぶことができたはずです。同じように写経をしながら、ソースコードの一部を変えながら、動きがどう変わっていくかを試していくと、より良いでしょう。プログラミングの良いところは、どんな失敗をしても、そこで損失するコストがゼロに近いことです。どんどん試すべきです。

どのプログラミング言語を選ぶ?

最初はソースコードの全ての意味がわからないことがあっても、何度も写経していくことで、そこに書かれたソースコードの意味を理解していき、最終的に見本を見なくても同じソースコードを書けるようになることが最初の目標です。プログラミング言語は好きなもの、好みや今後の就職先などを考慮して選べば良いと思います。もし私に聞かれれば、Rubyをオススメします。Rubyの良いところは表現力が豊かなので、初心者は初心者なりの書き方、上級者は上級者なりの書き方が出来るところです。ただ沢山のライブラリを覚えれば良い訳ではなく、慣れてくれば慣れてくるほど自分自身で上達した感じを持てることがいい点だと思っています。とはいえ、プログラミング言語は宗教論争にも喩えられるほど好みの問題でもあるので、必ずしもどれがベストということは言えません。

写経を続けていきながら、並行して、自分で作りたいプログラムを作っていくと、理解がより進みます。オリジナルのプログラムを作っていくのにあたり、わからないところや、参考にしたいソースコードを必要とする場面が出てきますが、その際に自分で写経したプログラムがサンプルになります。プログラミングの初級者のうちは、自分のストックとして沢山のサンプルコードを持っておいた方が良いでしょう。また、自分で作りだすと、作りかたで難しいところが出てきます。そういうときの為にTips本もあると良いです。例えばRailsのアプリを作るのであれば「Rails3レシピブック 190の技*1」という本がオススメです。(電子書籍もありますね

*1 Amazonのリンク最新版に変えました

写経の次の段階に進む

自分でプログラムが書けるようになってきたら、その先本当にレベルアップをしたいのであれば、自習だけで続けるのは難しいかもしれません。ソースコードの書き方に正解はありません。正しい書き方というのはないのですが、熟練者であれば、保守性の高いソースコードや、可読性の高いソースコードなどの観点からは優劣を付けることはできます。初心者のうちは、その優れた書き方を知る術はありませんが、自分で作ったソースコードを、熟練者からコードレビューをしてもらうことで「良いお作法」を身につけることはできます。もし身近にコードレビューをしてくれる熟練者がいない場合は、勉強会などに参加して、題材に自分のソースコードを出してみるのも良いかもしれません。コテンパンにのされてトラウマになるかもしれませんが・・・

この学習法は、いわゆる「守・破・離」の「守」を実践する方法です。まずは、お手本の通りに打ち込んでみる。それもお手本を見るだけでなく、自ら実践してお手本通りに出来るようになる。そこから、少しずつソースコードを変えていき、自分の理解を深めていく、というやり方です。ただ、プログラミングの学習としての写経の良さは、そんなご大層なものでもなく、ベーシックマガジンという雑誌を知ってる世代であれば、印刷されて掲載されているソースコードを目で見ながら、自分のMSXなどのパソコンに打ち込んだ経験があるはずで、その時の経験って、とても良いプログラミングの勉強になってたと思いませんか?