自分の頭の中を探検するためのコンピュータ
――今、IT技術者はアルゴリズムがわからないと仕事にならないとすら言われています。鈴木さんは本書『おうちで学べるアルゴリズムのきほん』を始め、社員研修など教育に力を入れていらっしゃいますが、そもそもアルゴリズムに興味を持ち始めたきっかけは何だったのでしょうか。
鈴木:私が最初にパソコンの存在を知ったのは、中学生のときです。顧問の先生がNECのPC-8001を持ってきたんです。当時はインベーダーゲームの最盛期で、100円で5分間ゲームが遊べるという時代でした。ところが、パソコンならタダでいくらでもゲームができます。これはすごい、と思って親に買ってもらおうとしたら、さすがに高くて買ってもらえませんでした。
学校では、中学1年生のときにBASICでゲームを作りました。とにかくゲームがしたかったんです。ですが、ゲームへの気持ちが募る私に、あるとき中学2年生の先輩がこう言ったんです。「そんなことにパソコンを使わず、自分の頭の中を探検するために使え」と。中学生の言葉とは思えませんが(笑)、今でもよく覚えています。
高校の入学祝いでパソコンを買ってもらえることになり、それからはゲームはもちろんプログラミングもやりました。ポケコンを買って、それでプログラミングをしたこともあります。
初めてアルゴリズムに出会ったのはオセロを通してです。高校生の頃、私は硬派な技術誌だった『月刊アスキー』が好きでした。その特集でオセロが取り上げられたんですね。思考ルーチンをどう工夫すればいい手を見つけられるかが解説されていて、「これがアルゴリズムか、おもしろい」とその存在に気づきました。
――オセロが最初だったんですね。今は将棋と囲碁が話題で、そこからアルゴリズムを知った、興味を持った人も多いかもしれません。
鈴木:20年ほど前は、自分が生きているうちにコンピュータが将棋と囲碁で人間に勝つのは無理だと思っていましたが、早かったですね(笑)。やはり様々なアルゴリズムが考え出されてきたことと、コンピュータのパワーが劇的に向上したことが理由です。
将棋や囲碁を話に出すとイメージは掴みやすいですよね。このようにアルゴリズムはいろいろな物事の仕組みとして存在しています。実際に教えるときには苦労していますが(笑)。
作業としてプログラミングをするのではなく、考えて理解する
――今、開発ではなく教育をメインの仕事にされているのはなぜですか?
鈴木:元々私はコンピュータを趣味にして生きていこうと思っていたんです。大学生の頃は、おそらく違法だったはずですが、パソコンのソフトウェアレンタルショップでアルバイトをしていました。そんな折、当時の一般的な時給の2倍で、パソコンでプログラムを作るアルバイトを始めました。
結局、そのアルバイトから正社員になり、C言語やアセンブリ言語を習得しました。普通に開発業務をしていたつもりなんですが、どうやら私は上司に開発が向いていないと思われていたようです(笑)。というのも、上から下りてくるおかしな仕様にイライラして勝手に開発環境を作っていることに対して、指示されたことができないと捉えられていたみたいですね。
でも、喋るのは得意そうだと評価されていたんでしょう、新人研修をやってみないかと声をかけられました。それが、開発から教育に仕事が移ったきっかけです。
そして開発と並行して、サン・マイクロシステムズのトレーニングセンターでUNIXやC言語、シェルを教えるようになりました。のちにJavaが発表されてからは、当時日本で数名だったJava講師として仕事をしていました。
いざ教えるようになると、いかに自分がプログラミングを理解していないか痛感しましたね。bitやbyte、16進数は理解しているつもりでしたが、説明しようとすると非常に難しい。ただ作業としてプログラミングをするのではなく、深く考え、理解することが大事なんですよね。
――開発に携わっていた頃は、アルゴリズムに関する仕事もされていたんですか?
鈴木:よく覚えているのは経路探索です。鉄道会社が運賃改訂するときは、各駅の運賃表を取り替えなければなりません。それは深夜、電車が動いていない時間に一斉に行う必要があるので、できるだけ効率よく駅を回る経路が必要です。
このときは独力で考えてプログラムを書きました。経路探索アルゴリズムを知らなかったので(笑)。今ならバックトラック法で解決できると思いますが、似たようなものを作った覚えがあります。
仕組みを知れば新しい工夫が生まれる
――開発から少しずつ教育がメインの仕事になっていったと思いますが、教えるときはどんなことを大切にされているのでしょうか。
鈴木:難しいことをわかりやすく説明すること、そしてプログラミングはおもしろいんだと伝えることです。
プログラマやSEに憧れて入社する人も多いですが、最初につまずくとすぐに離れていってしまいます。最初は誰にとっても難しいんですよ。なので、得意か不得意かは3年くらいやってみないとわかりません。ですから、始めたばかりの人が諦めてしまわないように気を配っています。新入社員への教育でも、手厚くやってほしいという会社では時間を取って補習もします。
アルゴリズムは、ソフトウェア開発の経験がない人にとって最も苦手とする領域です。本書でも解説したようなソートや検索は新人研修でも扱いますが、わからない人には本当に理解しがたいようです。
しかも、最近の研修は1ヵ月や2ヵ月と昔より短くなっています。2日間でアルゴリズムを教えないといけないときもありますが、それは無理があるというのが本音です。本書でその部分を補えればいいなと思っていますね。
アルゴリズムが難しいのは事実ですが、やっぱりそれ以上におもしろいんですよ。GPSや自動運転でも使われていますし、路線案内、ネットショッピング、画像認識などもそうです。便利で誰もが使っています。多くの人はそれで満足かもしれませんが、その仕組みを知ればもっと楽しいのではないかと思っています。
新人研修では、なによりも「おもしろい」ということを伝えるようにしています。ネットでボタンをクリックしたりタッチしたりして何か購入するだけよりも、仕組みを知っていれば入力した情報がネットワークを通ってサーバーに行って、サーバーからデータベースで処理をすることが見えてきます。そのおもしろさ、楽しさを知ってもらいたいんですね。また、仕組みを知っているからこそ、新しい工夫が生まれてくるに違いありません。
読むのに必要な条件は興味を持っていること
――では、本書はどういった読者を想定されていますか?
鈴木:やはりITに携わる新入社員の方です。これから開発者としてやっていく方に限らず、企画や営業の方も対象です。仕事でIT技術に触れていかなければならない方にとって、アルゴリズムの基礎的な知識は不可欠になっていきますからね。
あとは中高生です。息子が中学2年生になり、自然とコンピュータに興味を持つようになっているんです。他の家庭でもそうなんでしょう。ところが、学校の勉強ではまだ数学や英語といった授業しかありません。また、家庭で教えようとしても、数学や英語の質問ならなんとか答えられても、コンピュータについての授業を受けていない親がほとんどですから、教えられないんです。
今の中高生もこれから生きていくうえでコンピュータの知識は欠かせませんから、何か疑問に思ったときに本書を役に立ててもらえればいいですね。
本書自体は、わかりやすく書いてはいますが、多少難しさを残しています。勉強は簡単すぎると乗り越えがいがなく、ある程度負荷を与えなくてはなりません。
ただ、前提として必要な知識もほとんどなく、プログラミングの知識があれば読みやすいくらいです。数式もなるべく使っていません。元々、プログラマでなくても読める本として企画してあります。
もし必要な条件を挙げるとしたら、アルゴリズムに少しでも興味を持っていることです。
本書はあくまで入り口です。読み終わったあとJavaScriptを始めてもいいですし、セキュリティの本を読んでもいいと思います。自分が次に何を勉強すればいいのか、何に興味を持てるのかを探す導入として読んでみてほしいですね。
言語の前にまずアルゴリズムの基本を身につける
――本書の執筆もアルゴリズムが中心になってきたという変化の一つかもしれませんが、新人研修などで変化を感じることはありますか?
鈴木:どこの会社でも、新入社員には研修でWebアプリケーションを作らせます。そのために、HTMLやCSS、JavaやPHP、データベースを学びます。ところが、Webアプリケーションの完成を目標にせず、基礎、特にアルゴリズムをしっかり勉強させようという会社が出てきました。
やはり、根本を理解していないのにWebアプリケーションのような全体的なことをやることに無理が生じつつあるのかもしれません。もちろん作れはしますが、実際にはよく理解できていないとしたら意味がないですよね。
JavaでWebアプリケーションを作る方法を学んだとしても、世の中にはRubyやPythonなどプログラミング言語はたくさんあり、Webアプリケーション以外のプロダクトも無数にあります。
研修の打ち合わせでも、どの言語を教えるかの話は多いんです。ですが、言語が変わったらどうしますか? 一から勉強するしかありません。しかし、たとえば「エラトステネスの篩」を理解できていれば、C言語やアセンブリ言語、あるいはRubyといった言語の文法さえわかっているとプログラムを書けます。アルゴリズムはプログラミング言語を問わず共通なんです。
ですから、まずアルゴリズムの基本をきちんと身につけておくことが大切ですね。ぜひ本書から始めてみてもらえればと思います。