新入社員に対して、プログラミング教育を実施してきました。感想は惨敗です。
私の想像以上に、根底から知らないものなんだと痛感しました。
それは分かったつもりで、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メソッドを定義する必要があるのか、足し算ならば、+演算子で記述できるのに、なぜ?」と言われました。
必要性を感じさせないまま、新しいことを教えるのは理解しにくいものなのだと思いました。たとえば、ifで記述できるのになぜswitchがあるのか。メソッドを作成する必要性はなにか、こういった必要性を理解してもらわないと、新しいことは吸収してくれないのです。
メソッドがない状態で苦労してもらって、その上で「メソッドを使えばこんなに楽になったよ。あぁよかったね。」と体感してもらうことが大事なのだと痛感しました。
無駄な事を教えていないつもりですが、無駄でないだけでなく必要だ。と感じてもらわないといけないのです。
もし、私が次回講習をするとしたら、疑問点・問題を明確にし、それを解決する手段を説明したいと思います。