IT企業の新人さんの中には、学生時代にプログラミング経験が豊富な人もいれば、まったく経験がない人もいます。そこで、多くのIT企業では、入社前に、プログラミングの基礎研修を実施しています。私も、先日、某IT企業でJavaプログラミングの講師をしてまいりました。2日間という短い期間だったので、細かな言語構文はさておいて、プログラミングの楽しさを知ってもらうことに重点をおきました。1日目の講座の内容を紹介しましょう。2日目の内容は、次回紹介します。

最初のプログラムは、Hello World...にはしませんでした

 この講座は、一人一台のPCを使った実習形式です。教材として、市販のJava入門書を使いました。教材のCD-ROMに収録されていたJava 2 SDKをインストールし、全員のプログラミング環境が準備できたら、いきなりプログラムの作成です。

 最初に作るプログラムとして定番なのは、画面に"Hello World"と表示するものですが、それでは楽しくないと思ったので、教材の50ページあたりにあった以下のプログラムを作らせました。これは、変数aとbの加算結果を画面に表示するものです。

public class Sample1
{
    public static void main(String[] args)
    {
        int a, b, c;

        a = 123;
        b = 456;
        c = a + b;
        System.out.println(c);
    }
}

 私は、プログラミングの楽しさとは、自分の思い通りにコンピュータを動作させられることだと思います。したがって、他人が作ったサンプルプログラムをそのまま動かしただけでは、それほど楽しくはありません。そこで、受講者に、サンプルプログラムを自由に改造するように指示しました。「こう改造すれば、きっとこうなるはずだ」と予測して実行し、確かにその通りになれば楽しいからです。

 たとえば、先ほどのプログラムなら、加算だけでなく、減算、乗算、除算、平均値なども表示するように改造したり、変数cだけでなく、変数aと変数bの値も表示するなどの改造ができます。除算の結果で小数点以下が表示されないことがわかれば、そこからデータ型の説明に進めます。ただし、そのときにJavaのすべてのデータ型を教えはしません。網羅的な説明は、楽しくないからです。私は、int型(整数型)とdouble型(倍精度浮動小数点型)だけ教えました(Javaには、その他にbyte、short、long、float、char、booleanというデータ型があります)。変数のデータ型をdoubleに変更すれば、小数点以下が表示されることを楽しく体験できればいいのです。

先生、System.out.printlnって何ですか?

 Javaは、オブジェクト指向プログラミングが可能な言語です。自分でクラスを作り、既存のクラスを使ってプログラミングします。しかし、今日、生まれて始めてプログラミングした人に、いきなりオブジェクト指向プログラミングなんて言葉を出して説明したら、きっと混乱するだけでしょう。オブジェクト指向プログラミングに関することは、決して口にするまいと思っていたのですが、ちょっと困った質問が出てしまいました。「classって何ですか?」「System.out.printlnのSystemとかoutって何ですか?」です。

 「ソースコードの中に意味不明なものがある」という質問が出たときには、「それは、おまじないです」と説明するのが定番です。しかし、おまじないを書かされるのでは、楽しさが半減してしまうでしょう。私は思い切って、以下のように説明しました(冷や汗ものでしたが)。

 Javaは、オブジェクト指向プログラミングというスタイルを使う言語です。町の中に、自分の家を立てるようなイメージでプログラムを作るのです。Java 2 SDKをインストールしたことで、皆さんのパソコンの中にJavaという町ができました。この町の中には、あらかじめ多くの家があります。家のことを、Javaではクラスと呼びます。実際の町には魚屋さんや八百屋さんがあるように、Javaの町にもいろいろな役割を持ったクラスがあります。Systemは、その1つです。System屋さんのoutという売り場にあるprintlnという道具を使うと、画面に表示ができます。皆さんが立てたSample1という家で、その道具を使うのです。

 例え話は、かえって理解を妨げる場合もありますが、プログラミングを始めたばかりの新人さんにこの説明は、いかがでしょうか?IT Proの読者の皆様のご意見をいただければ幸いです。

教材どおりに作ったプログラムは1つだけでした

 教材に掲載されたサンプルプログラムの多くは、1つのクラスの中にmainメソッドだけがあるものでした。mainメソッドの中に、繰り返しのforやwhile、条件分岐のifやswitchといった各種の構文を説明する短いコードが記述されています。Javaという町の中に家を立てるのだと説明してしまった私は、教材の内容どおりに進めたのでは、雰囲気が出ないと感じました。そこで、思い切って、細かな構文は説明しないで、プログラムの構造に重点を置くことにしました。

 説明すべき構文を使ったメソッドを持つクラスを作成し、それを別のクラス(mainメソッドを持つクラス)から使うプログラムを作成させる実習に終始したのです。たとえば、if文の説明をするために、引数の絶対値を返すabsメソッドを持つMyMathクラスを作成し、それをmainメソッドを持つMyMainクラスから使うといった具合です。構文のバリエーションを網羅して説明せず、構文の一例を示すだけになったので、受講者はすぐに理解してくれました。作成したメソッドが正しく動作するかどうかをテストするプログラムを、mainメソッドの中に自由に書かせました。

 結局、教材どおりに作ったのは、最初のプログラムだけになってしまいました(著者さんごめんなさい。教材は、Java構文の辞書として今後も活用させていただきます)。構文も、部分的にわかるだけです。ただし、講座はなかなか楽しいものになりました。ホッと胸をなでおろし、明日は、あらかじめ予定されていた課題プログラムの作成です。受講者は、ちゃんと作れるだろうか?きっと大丈夫だ!今日1日で、サンプルを真似して改造することと、メソッドを持つクラスを作って使うことを知り、そして何より、プログラミングの楽しさに目覚めたのですから。

Watcherから新人へ送るメッセージ