最近のIT企業の新人研修で採用されているプログラミング言語は、Javaが多いようです。かつて主流だったC言語やVisual Basicと比べて、Javaは覚える言語構文が多い言語です。オブジェクト指向のための言語構文もあります。私は、これまでに幾度となくJavaを指導してきましたが、上手くいったと思ったことがありません。講座終了後に「こうすればよかった」と反省することばかりです。どのような反省点があったか紹介しましょう。

キー入力に時間がかかる

 私は、自分の経験上、プログラミングは指で覚えるものだと思っています。最近では、プログラムの一部を自動生成するツールもありますが、学数段階ではテキストエディタだけを使ってプログラムをすべて打ち込むべきです。最初は、お手本どおりに打ち込んで動作確認する。次に、自分のアイディアで一部を改造して、その動作を確認する。これを繰り返せば、プログラミングをマスターできると信じています。

 ところが、いざ新人さんにプログラムを打ち込ませてみると、とても時間がかかる人もいます。最近の若者ですから、キーボードがまったく打てないという人はいませんが、10人のうち2~3人ぐらいは、キー入力にとても時間がかかります。これでは、お手本どおりに打ち込むだけで精一杯で、改造のアイディアを考える余裕などありません。講座終了後のアンケートには「プログラムを打ち込むだけで精一杯でした」「これまでの研修の中で一番疲れました」などと書かれています。

 それなら、たっぷり時間を取ればいいと思われるかもしれませんが、そうもいきません。新人さんの中には、キーボード入力が得意な人もいるからです。得意な人は飽きてしまいます。どうしたらよいでしょう。キーボード入力の得意・不得意でクラスを分けられるならよいのですが、研修の予算や会場の都合上、そうもいきません。「早くできた人は、まだできてない人を手伝ってください」と指示してきましたが、キー入力という作業は手伝えるものではありません。今後は、飽きる人が出てしまうのは仕方ないことして、徹底的に時間を取るようにしてみようと思いますが、上手くいくかなぁ。

プログラムの改造をやってくれない

 どうにかお手本どおりにプログラムを作らせることができたら、次は自分のアイディアで改造させます。「何でもいいから改造を加えてください。たとえば、足し算を引き算に変えるだけでもOKです」と指示しているのですが、いざ改造を始めさせると、何もしてくれない人が出てきてしまいます。足し算を引き算に変えるぐらいでは、やっても面白くないからでしょうか。それとも、プログラムに手を加えることを躊躇しているのでしょうか。

 講師が面白い改造案を示せればよいのですが、なかなか難しいことです。たとえば、画面に「皆さん、こんにちは」と表示するだけのプログラムを作らせたとしましょう。その知識を発展させて、「私は、○○○○です」「またお会いしましょう」と表示する機能を追加する改造案を示したらどうでしょう。楽しいと感じる人も、そうでない人もいるでしょう。シンプルなプログラムに対して、できるだけ多くの改造案を用意しておくことが、私の今後の課題です。

オブジェクト指向は難しい

 Javaには、オブジェクト指向でプログラムを作るための言語構文があります。オブジェクト指向でなければプログラミングできないという言語なら指導しやすいかもしれませんが、オブジェクト指向でなくてもプログラムを作れるのが、Javaの便利なところであり困ったところでもあります。そこで、初期段階では一切オブジェクト指向に触れずに、データ型、演算子、分岐、繰り返しなどを学ぶためのプログラムを作らせ、その後でオブジェクト指向に関する言語構文を説明しています。

 オブジェクト指向の指導では「Javaでは、オブジェクト指向でプログラムを作らなくてもいいんだよ」「オブジェクト指向に関する言語構文を大雑把に見ておこうよ」「オブジェクトとは部品のことだと割り切っちゃえばいいんじゃないかな」とでも言ってしまえばよいのかもしれません。ところが、私は、オブジェクト指向という考え方があることをぜひ知ってほしいと欲を出して、インスタンス、メッセージ、カプセル化、継承、多態性といったことをテーマにしたプログラムを作らせています。

 ひとおおりの研修が終わった後で、ある新人さんから「int型やdouble型の配列が作れるのはわかりますが、オブジェクトの配列が作れるのはなぜですか?」という質問を受けました。こんな質問をが出るのは、オブジェクト指向を奇妙なものと思わせてしまったからです。「オブジェクトの配列の方が普通なのであって、ただの数値のint型やdouble型の配列の方が特殊なのだと考えてください」と答えましたが、新人さんをよけいに混乱させてしまったようです。欲を出さずに、新人研修ではオブジェクト指向に深入りするのをやめておけばよかったと反省しています。

newしなくても使えるのですか?

 Javaプログラミングの指導には、各社さんとも苦労されているようです。これは、アルゴリズム研修とJavaの言語構文の研修が終わった某IT企業におじゃましたときのことです。私が担当するのは、これまで学んだ知識を組み合わせて、Javaでアルゴリズムを実装する研修です。アルゴリズムがテーマの研修なら、オブジェクト指向に触れなくても済みそうです。これなら気が楽だと思って研修に望んだところ、実際にはそうではありませんでした。私が示したお手本プログラムを見た新人さんからの最初の質問が「newしなくてもクラスを使えるのですか?」だったからです。

 newというのは、オブジェクトを生成する命令です。つまり、この新人さんにとって、クラスは必ずnewして使うものなのです(実際には、newが不要なクラスもあります)。「今回の研修では、Javaのオブジェクト指向に関する言語構文は登場しません」と答えたのですが、それでは納得してくれません。仕方なく、1時間ほど時間を割いて、オブジェクト指向を忘れてもらうために「プログラミングは、自分の頭の中にある考えをソースコードに書き表す行為です。オブジェクトが生成されると考えたなら、そうすればよいでしょう。ただし、Javaでは、他の考え、つまりオブジェクト指向でない考えでもプログラムを作れるのです」と説明しました。

 やれやれ、これで大丈夫だろう。そう思って休み時間に新人さんと雑談していたら、またまたショッキングな発言がありました。それは「Javaでプログラムを作るときって、クラス分けが難しいですね」です。そんなこと、大規模なプログラムを作るときに考えることでしょう。欲を出してあれこれ言語構文を教えるから、こういう混乱が生じるのです。それでは、どこまで指導すればよいのでしょう。研修のゴールを明確にしていなかったことを反省しています。

...以上、私のJavaプログラミング研修の反省点を紹介しました。もしも皆さんの会社でもJava研修を実施しているなら、同じような反省点があるかもしれませんね。それとも、とっても上手くいってますか。ご意見・ご感想をいただければ幸いです。