Help us understand the problem. What is going on with this article?

やっと分かった。プログラムができるようになるためのたった一つの方法。プログラミング入門者に向けて。

More than 5 years have passed since last update.

最初に私がプログラムの講師をしてから10年以上経ちます。
その間にたくさんの方を教えてきましたが、プログラムの習得が出来る人とできない人がいることに気が付きました。

両者の差は歴然としており、習得が出来る人は、それまでプログラム未経験でも、すぐに内容を理解して課題をクリアしていきます。応用問題も難なく解きいていきました。その方は現場に入ったあとでもどんどん成果を出していきました。

逆に、できない人は、どんなに時間をかけて教えても次の日にはできないようになっていたり、ちょっとした応用問題でも、手も足も出ない状態でした。

その差はどこにあるかをずっと観察していましたが、最近やっと原因と対応方法がわかったのでご紹介します。

wakaru.jpg

プログラミングは自転車の運転に似ている。

プログラミングは自転車の運転に似ているとはよく言われます。
自転車の乗り方を覚えるときは、最初は補助輪をつけて漕げるようになります。補助輪をつけて乗れるようになったら、補助輪を外し、誰かに後ろから支えてもらいながら乗れるようになります。まっすぐに自転車を漕げるようになったら、次に曲がれるようになります。自転車に乗れるようになって、毎日自転車に乗っていると、いつの間にか立ち漕ぎができたり、手放し運転ができるようになったりします。
自転車に乗れるようになる方法は、少しずつ、できることを積み重ねていくことによって、いきなり手放し運転をしようとすると、大怪我をしてしまいます。

この方法こそがプログラミングを修得するときに行うべき方法です。

できることを積み重ねる事。できないことをいきなりやろうとしない。

プログラミングができない人に共通することは、「自分のできないことをやっている」ことでした。教科書に乗っているコードを書き写してはいるのですが、それが何を意味するかがわかっていません。ただ、教科書に書いている文字をタイプしています。そんな方々は、コードが動かなくなった時は対応しようがありません。「なんか動かないんですけど、どうしたら良いですか?」と、自信をなくした目で周りに助けを求めるしかありません。

対して、プログラミングができるようになる人は、うまくいかなくなった場合、自分のできるところまで戻ることをします。教科書を書き写していて、コードが動かなくなった場合も、自分がわかるところまでコードを消し戻し、不完全でも動くようにしてから課題となっているコードに再度とりかかることができます。応用の課題が出た時でも、まずは自分のわかるところまでプログラミングし、その後に必要な要素を積み重ねていくことができます。できる事を積み重ねていくことにより、できる事が広がっていきます。

できる事を積み重ねるためのコツ。

とはいえ、自分のできる事を知る、というのは本当は難しいことです。
「出来た!」「動いた!」と思った時の状態を保存するようにしましょう。出来たソースコードの一連をコピー&ペーストして保存しておいてもいいですし、Gitなどの構成管理ツールにこまめにコミットしておくこともよいでしょう。

プログラムができるようになるためのたった一つの方法。

プログラムができるようになるためのたった一つの方法。それは、
できることを積み重ねる
です。当たり前のようですが、実行するのはなかなか難しいのです。
できるだけ、小さいゴール、簡単にたどり着けるゴールを見つけて下さい。ゴールにたどり着く道筋が見えない、わからない時は、ゴールへたどり着く中間地点、今できるところに一番近い中間地点を見つけて下さい。そして、その中間地点にたどり着くことができたら、その状態にいつでも戻れるように、状態を保存するようにして下さい。自分のやっていることがよくわからなくなったら、一旦やっていることを忘れて、すぐにたどり着くことのできた中間地点に戻るようにしましょう。

教えている方や先輩へ。

要するに必要なのは成功体験なのです。受講者や後輩に、成功体験を積ませてあげられていますか?できた、と思わせてあげられてますでしょうか?
なぜ動くかの説明をしてあげることも重要ですが、まず、動いたことの感動や、新しい体験を味わうことを重要視してあげてください。出来た、という状態に戻れるように、出来なくなったら出来るところまで戻れるように、そして、たくさんの成功体験を積み重ねられるようにしてあげて下さい。

新人さんや、被研修者へ。

まずは、手を動かして、プログラミングしてみましょう。わからなかったとしても、次のアプリを作ってみましょう。動かなかった時は、あまりはまり込まずに、時には動かないソースコードを放り投げて、また1から作りなおしてみましょう。
ソースコードが動かなくなった時、問題の解決にハマり込んで時間を使ってしまうことは効率的ではありません。起きている問題を解決するのは、じつは新しくプログラミングをするよりもとても難しいことが多いのです。ハマってしまって時間を使うよりも1から作りなおしたほうが早い時も往々にしてあります。繰り返しプログラミングをしてくうち、問題点を解決する方法も、少しずつわかってきます。が、それがわかってくるのは相当量のプログラミングをした後です。
良くないのは「わからないからプログラミングできないし、プログラミングしないから分かるようにならない。」というループにハマってしまうことです。一生懸命勉強していらっしゃるのですが、プログラミング量を稼げないので、なかなか出来るようになりません。自転車の乗り方がわからないから自転車にのれなくて、乗らないから乗れる様にならないの、プログラミング版を行ってしまっています。
出来ないことに囚われるより、できることに戻ってみましょう。console.log("hello world")も立派なできることの一つです。できることを少しずつ手に入れて行きましょう。

皆さんがプログラミングの楽しさに辿り着けることを祈り、〆とさせていただきます。

ukiuni@github
投稿内容は私個人の意見であり、所属企業・部門とは関係ありません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした