初心者に対するプログラミング教育

新入社員に対して、プログラミング教育を実施してきました。感想は惨敗です。
私の想像以上に、根底から知らないものなんだと痛感しました。
それは分かったつもりで、0からでも分かるようにと意識していたつもりだったのですが、私が当然と思って話している内容が実は知らないということがあり、最終的に理解が浅いまま先に進んでしまったようです。

受講者のレベルにもよると思いますが、私が教えたのは、プログラミングが全くの初めてという人をベースにしています。
そのような受講者の場合、プログラムそのものがなんなのか分かっていなかったり、構文なのか自分の記述なのか、はたまたサンプルなのかが分からないといったことになりました。いくつか例を挙げてみます。

変数やメソッドのネーミング
変数というものがなんなのかは、当然詳しく説明するのですが、変数名が自分でつけた名前だということ気づかないまま説明が進んでしまったことがありました。
よくよく説明しながら、なにが分からないのかを引き出していくと、「なぜここではiという変数なのに、ここではstrという変数なのか」とか変数名が色々と変わることに混乱していたのです。「変数名というのは自分で名づけられるものだ。」ということを説明してやっと理解してもらえました。
変数や関数という考え方は、数学でも1次関数y=ax+bで、xでyの値を定義するという感覚があると思うのですが、これの理解に手間取るとどう説明してよいのやら。。。と思ってしまいました。
メソッドの仮引数と実引数
これは私も手抜きで説明したのがいけなかったのですが、実引数と仮引数で変数名が違っているのに理解ができないことがありました。

public static void main(String[] args){
    int i = 10;
    show(i);
}
public void show(int n){
    System.out.println("parameter is " + n);
}
このような記述で、なぜiがnになるのかが分からないのです。仮引数と実引数があるということを説明していれば、こんなところでつまづくことはなかったと思います。
やっていることの意図が分からない
サンプルとして扱っている範囲が分からないまま、安直な例を出すと帰って混乱していました。例えば関数・メソッドの説明として、足し算を行うメソッドaddメソッドを定義したとします。
そうすると、「なぜaddメソッドを定義する必要があるのか、足し算ならば、+演算子で記述できるのに、なぜ?」と言われました。
必要性を感じさせないまま、新しいことを教えるのは理解しにくいものなのだと思いました。たとえば、ifで記述できるのになぜswitchがあるのか。メソッドを作成する必要性はなにか、こういった必要性を理解してもらわないと、新しいことは吸収してくれないのです。
メソッドがない状態で苦労してもらって、その上で「メソッドを使えばこんなに楽になったよ。あぁよかったね。」と体感してもらうことが大事なのだと痛感しました。

無駄な事を教えていないつもりですが、無駄でないだけでなく必要だ。と感じてもらわないといけないのです。
もし、私が次回講習をするとしたら、疑問点・問題を明確にし、それを解決する手段を説明したいと思います。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)