新人研修で「アルゴリズム」を取り上げるIT企業が多くあります。聞いただけで逃げ出したくなるような堅苦しいテーマです。講師は、何とかして講座を盛り上げなければなりません。講座の導入部、楽しく学べる実習、ゴールとする課題、提出物など、私の経験上うまくいった方法を紹介しましょう。

実習でアルゴリズムとは何かを伝える

 新人研修では、実習を多くすると盛り上がります。アルゴリズム研修の導入部でアルゴリズムとは何かを伝えるときも、実習を行うことをお勧めします。フローチャートの基本的な図記号を教えてから、身近なことをフローチャートを描かせます。たとえば、起床してから会社に来るまでの手順、カレーを作るときの手順などをフローチャートに描かせるのです。

 単にフローチャートを描かせるだけでは盛り上がりません。自分が描いたフローチャートを隣の人に見せ、口頭で説明を加えなくても理解してもらえればOK、ダメなら描き直しとすれば盛り上がります。フローチャートだけでなく、説明の文書を添えることも大いによいことだと指導しましょう。

 どのような実習をするときも、新人さんに「なんでこんなことをするのか?」と疑問を持たれないように注意してください。明確な手順のことをアルゴリズムと呼びます。明確になった証拠として、手順を文書や図に示すのです。頭の中に手順があって「説明しなくてもわかるでしょう」ではダメなのです。それを体験してもらうための実習であることを新人さんに伝えてください。まるでタネ明かしをするようですが、実習の趣旨は隠すものではありません。

 「カレー作りのアルゴリズムなんて現実的でない」と思われないように、ITエンジニアがアルゴリズムを考える場面が、大きく分けて2つあることも説明しておきましょう。1つは、プログラムのアルゴリズムを考えることです。もう1つは、業務のアルゴリズムを考えることです。ITエンジニアは、自分がまったく想像できないような業務のシステムを作ることが多々あることを伝えてください。これを体験させるために「イタリア人に天ぷらの作り方を教えるためのフローチャートを作成せよ」という傑作な課題を考えた講師がいます。天ぷらを見たことがない人に、つまりその業務の経験がない人に、明確な手順を示すのです。

紙を使って体得するソートとサーチ

 プログラムのアルゴリズムでは、ソートとサーチのアルゴリズムを指導します。ソートのアルゴリズムとして「バブルソート(交換法)」「選択法」「挿入法」「マージソート」「クイックソート」、サーチのアルゴリズムとして「線形探索」「二分探索」が代表的です。これらのアルゴリズムは、まずイメージをつかんでもらうために、机の上に紙を並べて手作業で体得してもらいます。

 紙をちぎって、1cm×1cmぐらいのカードを8枚作らせ、その上に好きな数字を書かせます。数字の順にカードをソートするのです。まず、バブルソート、選択法、挿入法を一人でやってもらいます。8枚のカードをソートできたら、隣どうしのカードを結合することでマージソートを体験させます。16枚のカードがソートできたら、それをまたバラバラにして「ここで、バブルソートや選択法でソートし直せと言ったら面倒でしょう。いい方法があります」と言って、クイックソートを教えます。サーチのアルゴリズムである線形探索と二分探索では、カードを裏返して並べ「隣の人に、この中から○○を見つけてくださいと言って、どのような手順で探すかをよく観察してください」という実習をします。

 手作業の実習が終わったら、アルゴリズムをプログラムに置き換えるポイントを説明します。変数や配列を教えるのです。最初は、どのような変数や配列が必要かを教えてから、フローチャートを描かせるとよいでしょう。たとえばバブルソートなら「配列A(0)~A(7)がカードです。決定しようとしている順位を変数n、比較を行う位置をpとしましょう」というヒントを与えるのです。慣れてきたら、新人さん自身に、必要な配列や変数を考えてもらいます。

最終日の最終課題を大いに盛り上げる

 アルゴリズム研修の期間は、企業によって様々ですが、3~5日間程度が多いようです。研修の最終日の最終課題は、大いに盛り上げるべきです。何事も、終わりよければすべてよしです。最も簡単な盛り上げ方は「皆さん、お疲れ様でした。お互いのがんばりに対して拍手を贈りましょう」と言って大きな拍手で終わることですが、これは他の盛り上げ方法が見つからない場合の最終手段としましょう。

 私の経験上、最も盛り上がった最終課題は、ゲームのアルゴリズムを考えさせることです。ヒントを頼りにして、相手が決めた4桁の数字を当てるという対戦型のゲームです。交互に数を言って、早く当てた方が勝ちです。プログラムを作るわけでも、フローチャートを描くわけでもありません。ゲームに勝つ方法だけを考えます。まず、隣どうしで対戦させます。だいたい15分ぐらいで1ゲームが終わります。ゲームのルールに慣れたら、グループ内でゲームに勝つアルゴリズムを考えてもらいます。制限時間は、20分ぐらいにします。新人さんは、とっても楽しそうに議論してくれます。

 グループ内で作戦が見出せたら、他のグループと対戦させます。たとえば、6人のグループなら、その中の3人を他のグループに移動させ、代わりに別のグループから3人に加わってもらうのです。対戦が終わったら、グループごとに勝ち、負け、引き分け(時間切れを引き分けにします)の数を報告させ、それぞれのグループにアルゴリズムの概要を発表させます。この研修後のアンケートに「これまで研修で一番楽しかった」という意見がありました。アルゴリズムを考えることを楽しいと感じていもらえたのですから、最終課題として大成功でしょう。遊びのような課題ですが、研修の最後の1時間ですから、何卒お許しください。

提出物を採点して返却する

 もちろん、楽しいだけの研修では、いけません。新人研修としてアルゴリズムを学んだのですから、それに見合う成果を出さねばなりません。アルゴリズム研修の成果として、フローチャートを提出させることをお勧めします。これには、何も心配要りません。全員が、ちゃんと提出してくれます。学生時代を終えたばかりの新人さんには、提出物というものを必ず出すという習慣が残っているからでしょう。

 提出物は、一人ひとり採点して返却します。大学の成績のようにABC評価がわかりやすいでしょう。私は、すべての課題を提出していれば、迷わずAを付けます。工夫があるものは、A+とします。返却されて自分がAだと知った新人さんは、とっても嬉しそうです。仲間の中にA+評価の人がいることを知ると、もっとがんばろうという気持ちになってくれるでしょう。それを期待して、私は、AとA+だけの評価を付けています。

...私のアルゴリズム研修は、こんな風に実施しています。いかがでしょう。皆様のご意見をお待ち申し上げます。