IT企業の内定者さんたちに、2日間でプログラミングの楽しさを教えるセミナーの2日目(最終日)です。私の経験上、自分がこうなると思って書いたプログラムの実行結果が確かにその通りになったとき、とっても楽しい気持ちになるものです。自分の思い通りにコンピュータを操れたと感じるからです。内定者さんたちにも、この気持ちを体験させれば、きっとプログラミングを好きになってくれるでしょう。コンピュータに、もっともっと愛着を感じてくれるはずです。
先生が示したプログラムにはバグがある
1日目のセミナーでは、Java 2 SDKを使ってWindowsのコマンドラインで動作するプログラムを作る手順を教えました。Java言語の文法も、ほんのさわりだけ教えました。これだけの知識で、何か楽しいプログラムを作るのです。何がいいでしょう?あれこれ考えて、ありきたりですが、コンピュータとユーザーが対戦する「じゃんけんゲーム」を作ることにしました。
まず、キー入力された文字列を返すgetStringメソッド、キー入力された整数を返すgetIntegerメソッド、そして指定された範囲で整数の乱数を返すgetRandomメソッドを持つMyUtilityクラスと、これら3つのメソッドの動作をテストするmainメソッドを持つMyUtilityTestクラスを作らせました。MyUtilityクラスは見本を示し、MyUtilityTestクラスは自由に作るように指示しました。この「自由に作る」というのが、なかなか楽しいようです。
納得するまでテストできたら、じゃんけんゲームの本体となるJankenクラスの作成です。これも、以下のような見本を示しました。「この見本には、最低限の機能しかありません。たぶんバグもあります。後で、皆さんに修正してもらいます」と伝えてから、作らせました。
public class Janken { public static void main(String[] args) { int player, computer; String judge; final int GU = 1, CHOKI = 2, PA = 3; System.out.println("グー(1),チョキ(2),パー(3)を選んでください:"); player = MyUtility.getInteger(); computer = MyUtility.gerRandom(GU, PA); if (player == computer) { judge = "あいこです!"; } else if ((player == GU && computer == CHOKI) || (player == CHOKI && computer == PA) || (player == PA && computer == GU)) { judge = "プレイヤーの勝ちです!"; } else { judge = "コンピュータの勝ちです!"; } System.out.println(judge); } } |
隣の人が作ったプログラムをテストする
自分で作ったプログラムをテストしても、きっと面白くないでしょう。そこで、隣どうし席を代わって、他人が作ったプログラムをテストし、目一杯バグを出してもらうことにしました。見本の通り作ったのですから、自分のプログラムをテストしても同じなのですが、他人が作ったプログラムをテストしているという気分を味わってほしかったのです。「どうぞ遠慮なく、厳しくテストしてください」と伝え、ノートにバグを書き出すように指示しました。各自が書き出したバグを発表させ、私は、それらをホワイトボードに書いていきました。以下のようなバグがあがりました。
- 1、2、3以外の値を入力すると、コンピュータの勝ちになってしまう。
- 何も入力しないと、コンピュータの勝ちになってしまう。
- コンピュータが出した手がわからない。
- 素早く何度も再起動すると、コンピュータは常に同じ手を出す。
- あいこで終了するのはおかしい。再戦とすべきである。
皆で、(1)~(5)がバグなのか、それとも制限事項なのかを話し合い、(3)だけはバグでないが修正すべきだという結論になりました。さらに、修正を行う優先順位を付けさせ、順位が高いバグから修正を行うように指示しました。「仲間と大いに教え合ってください。教材も大いに参考にしてください。遠慮なく先生に何でも質問してください。自由にプログラムに手を加えてください」
もっと楽しくするアイディアを出し合う
次の作業として、ゲームをもっと楽しくするアイディアを考えさせました。「自分でやってみて感じたと思いますが、現状のゲームは、あまり面白くありませんね。どうしたら、もっと面白くなるか、各自1つ以上アイディアを出してください。どんな奇抜なアイディアでもOKです」こう伝えると、以下のような案があがりました。
- 対戦回数を指定でき、最後に何勝何敗かを示す。
- 「最初はグー」機能を付ける。
- 対戦結果をファイルに保存できるようにする。
- コンピュータ側にいくつかのキャラがあり、それぞれ得意技があるようにする。
- グラフィカルに、グー、チョキ、パーを表示する。
- 1対1でなく、複数のプレイヤーがじゃんけんできるようにする。
- 対戦結果が表示される前に、少し時間を置く(ドキドキさせるため)。
- 「じゃんけん」「ぽん」という音声が出る。
- ネット対戦型にして、世界中の人とじゃんけんできるようにする。
- 対戦型にしたら、じゃんけんのランキングが表示されるようにする。
私は、これらの案に、実現しやすい順にA、B、Cランクを付け、各自で自由にプログラムを改造するように指示しました。1日目のセミナーで、生まれて初めてプログラミングしたという人が多かったにもかかわらず、内定者の皆さんは、一生懸命取り組んでくれました。自分で教材を調べて、新しい構文を使う人もいました。
私は、教室の中をグルグル歩き回り、面白く改造できたものがあると、皆に見に行くように指示しました。グラフィックスの変わりに顔文字を使ったり、文字と記号だけでノマネコ風のキャラを作る人もいました。表示だけに凝るのでは、あまり勉強になりませんが、自分のアイディアでプログラミングを楽しんでいるのですからOKでしょう。
最後に、皆でソースコードを回覧して採点する
しかし、「皆さん、2日間楽しかったですね。私も、楽しかったです。それでは、さようなら」では、セミナーを依頼してくださった企業の教育担当者様だけが楽しくありません。何かしらセミナーの成果を示すもの、内定者の成績がわかる数字が必要です。私がプログラムを添削して採点するという方法もありですが、皆で楽しくやってきたセミナーなのですから、採点も皆で楽しくやることにしました。各自にソースコードをプリントアウトさせ、それを回覧して5段階評価で採点するのです。
「プログラミングのテクニックではなく、プログラムの書式がみやすいかどうかで採点してください。つまり、この人のソースコードなら喜んで引き継ぎます、と思えるかどうかで判断してください」内定者の中には、学生時代にプログラミング経験が豊富な人もいて、多くの改造を加えたプログラムを作っていましたが、採点はオール5になっていませんでした。彼は、ちょっとショックを受けたかもしれませんが、よい勉強になったと思います。逆に、短いプログラムしか書けなくても、かななかよい評価をもらえた人もいます。彼女は、きっと嬉しかったでしょう。皆さん、入社後の研修もがんばってください!