ビル・ゲイツの面接試験-私の場合
2005.06.03
マイクロソフトの採用面接がユニークであることは、「ビル・ゲイツの面接試験-富士山をどう動かしますか」という本で一時話題になった。もちろん、私自身もマイクロソフト本社で面接官として数え切れないほどのエンジニアの面接を担当し、自分なりに工夫して作り出した試験問題を幾つも用意していた。今日は、その一つを披露して、得意のうんちくを展開しよう。
[問題]
二次元座標上に、それぞれの辺がX軸・Y軸と平行に置かれた長方形Aと長方形Bがあるとする。その時、長方形Aと長方形Bが一部でも重なるかどうかを判断する条件式を書け。フォーマットは、CやJavaなどのコンピューター言語でも良し、単なる数式でも良い。制限時間は30分。ただし、考えていることを声に出し、ホワイト・ボードを使って自分の考えのプロセスを説明しながら解くこと。
もし、これからプロのソフトウェア・エンジニアを目指そうという理科系の学生がこのブログを読んだのであれば、いったんここでストップし、まずは自分自身でこの問題にぜひチャレンジして欲しい。とても良い頭の体操になるはずだ。
マイクロソフトにおける採用面接、特に大学を卒業したての新人の採用面接で一番重視しているのは、「raw intelligence」である。直訳すれば、「生(なま)の知性」である。そこには、「知識は必要に応じて付ければ良い。一番大切なのは、新しい知識をすばやく見に付け、それを応用して難しい問題を解決する知性だ」という会社としての確固たる信念がある。
その方針に従って学生を面接するには、単に「今まで学校でどんなプロジェクトをしてきたの?」とか、「どんな言語でプログラムが書けますか?」などという悠長な面接をしていてもほとんど役に立たない(そもそも、その手の情報は既に提出された履歴書に書いてある)。自分の受け持ちの30分から1時間の間に、どれだけその人の「raw intelligence」にチャレンジするディスカッションができるかが勝負となるのだ。面接官によっては、先の本のタイトルにもあるように、「あなたなら富士山をどう動かしますか」などと、あえて簡単な解答が無い問題を出すことにより、脳みその柔軟さを測る作戦に出たりするのである。
私の場合は、上の問題のように一見シンプルだが複数の解き方のある問題を出すことにより、(1)問題を解きながら、どうやったらより簡単に答えにたどり着けるかを探る習慣があるか、(2)複雑な問題をより単純な複数の問題に分割して考えるというトレーニングを受けているか、(3)解答のエレガントさ・シンプルさにこだわるタイプか、を測る作戦を採用していた。
この問題を初めて見た場合、ほとんどの学生は、まずは2つの長方形のさまざまな交わり方をホワイト・ボードに書き始める(学生が既にこの問題を解いたことがあるどうかは、この段階で見極めなければならない。そうであると判断すれば、別の問題に切り替える)。そこで多くの学生が、この問題が意外に複雑であることに気が付く。長方形の交わり方には上下左右の関係を別々に考えれば、16通りもの交わり方があるのだ。ここで、その16通りの交わり方をそれぞれを式にして、ホワイト・ボードを埋め尽くし始める学生がいるのだが、そのアプローチを取ると、ほとんどの場合規定の時間内に答えを書き終えることが出来ないし、作業の煩雑さゆえにどこかで必ずケアレス・ミスをする。こっちは、そんな煩雑な作業に取り掛かる前に、「こんなに手間だけがかかる問題をこの面接官が出すはずがない。もっと簡単な方法があるはずだ。」と気が付くような学生を求めているのである。
そこで、賢い学生は、ここで一旦手を止めて考え始めるのである。「もっと簡単に解く方法があるはずだ。なんとか、この問題を、より単純な複数の問題に分割できないだろうか?」。ここまで来れば、次のステップにたどり付くのは時間の問題である。そして、「ひょっとしたら、X座標とY座標を別々に考えても良いのではないだろうか?」と気づくのである。先ほどの図を見ながらこれを検証するにはそれほど時間がかからない。
X座標だけに着目して考えれば、交わり方は4通りだ(AがBを含む場合、BがAを含む場合、AがBの左端と重なっている場合、AがBの右端と重なっている場合)。そしてそれぞれの交わり方の検証には、2回もしくは3回の比較演算が必要である。これならホワイト・ボードを埋め尽くせずに式が書ける。多くの学生は、このアプローチが正解にたどり着く道と信じて、式を丁寧に書き始める。
この問題のすばらしい所は、これでもまだ「最もエレガントな」解答では無いことだ。多くの学生はこの時点で満足してしまうので、「良く出来たね。でも、もっとエレガントな方法があるんだけど気が付かない?」と催促してあげる必要がある。ここで、相手の目がチャレンジ精神に燃えてキラキラ輝き始めたらとても良いサインだ。
この次のハードルは、就職がかかった面接というプレッシャーのかかった場で越すのは学生には少し難しいので、「確かに交わり方は4通りだけど、もう少し簡単に交わっているかどうかをテストする方法があるんだよ」などのヒントを出してあげる必要がある。この段階で「交わらない場合は(AがBより右にある、AがBより左にある、の)2通りしかない」ことに気が付けば、もう正解は目の前である。後は自動的に、交わらないことの検証には比較演算が1回づつしか必要ないことに気が付き、結果として、トータルで4回の比較演算とわずかな論理演算だけ(プログラムにすればわずか2行で)でこの問題が解けてしまうことに気づくという仕掛けである。一部の学生は、この段階で、最初から交わらない場合を考えていれば、XY座標を分割して考える必要が無かったことに気がつくのだが、そこまで30分でたどり着けるのはごく一部の学生だけだ。
ちなみに、この手の問題を使って面接する場合には、学生を適当に励ましながら、正しい方向に導いてあげることが必要だ。そのプロセスの中で、こちらのガイドラインやヒントにどのくらい敏感に反応してくるか、エレガントな解答にどのくらいこだわっているか、などかが分かってくるのだ。
もし、理科系の学生でこの問題が解けなかった人がいたとしても、ショックを受ける必要はない。大切なことは、上で述べたような、よりシンプルでエレガントな解決法を常に探す気持ちを大切にして、自分自身を鍛えて行くことだ。一つの答えが出たところで満足せずに、「もっとエレガントな手法はないか、もっとシンプルな答えはないか」と考える姿勢を養うことが大切だ。学校の試験であれば、答えを提出してしまえば終わりだが、仕事でろくでもないプログラムを書いてしまうと、後々までタタられるのだから。
[追記]好評に付き、「ビル・ゲイツの面接試験-クイズ編」というのも書きました。面接官としてのうんちくは抜きにして、単に問題だけを書いたので、頭の体操だと思ってチャレンジしてみてください。
蛇足ですが、この手の問題は大好きなので、ひとこと書かせてください。
プロセスを言葉にするのは苦手ですが、今回はなかなかエレガントに捏造できたと思っています。
(プロセス)
まず、一次元だったら簡単なのになあ、円と円の重なりだったら簡単なのになあ、と思いました。
一次元の円と一次元の長方形は、どちらも線分として表されるので、より簡単な一次元の円が重なる条件を考えました。
それを二次元の長方形に拡張し、次にn次元に拡張してみると計算量がn倍だったので、解答として認定しました。
(解答)
問題にある長方形は、中心座標(x,y)とそこから端までの長さ(w,h)を与えると一意に表される。
これを用いると、2つの長方形が重なる条件は、
|Ax-Bx| < (Aw+Bw) かつ |Ay-By| < (Ah+Bh)
と表される。
実装まで考えると、データ構造(この場合は長方形の表し方)もアルゴリズムと並んで大切ですよね。
Posted by: つ | 2005.06.05 at 00:56
>実装まで考えると、データ構造(この場合は長方形の表し方)もアルゴリズムと並んで大切ですよね。
まったくその通りです。だからこそ、この問題を出す時に、あえて長方形A・長方形Bとしか言わず、学生自身にデータ構造を指定させるのです。
ちなみに、「つ」さんの解答、ユニークなアプローチで私は好きです。確かにエレガントだし。比較演算の数が私の用意している答えより2つも少ないけど、絶対値の計算が入るので、総計算量はほぼ同じですね。
この問題、いままで多くの学生に出しまして来ましたが、この解き方で来た人は初めてです。本番の面接でも、こんな風に、「こう来たか~!」と楽しんでしまえる答えを出してくる人がいますね。そういった「賢い人との出会い」がこの業界にいる一番の楽しみです。
Posted by: satoshi | 2005.06.05 at 06:27
トラックバックありがとうございます。
もし私が面接するなら(私は経理畑の人間なので、そういう人を採用するにあたってってことになります)
・まず千円札を100枚用意し
・目の前でバラバラって撒きます
・千円札を揃えてもらって
・数を数えます
・本を20冊、大きさもタイトルもバラバラな物を用意し
・揃えてもらいます
もし経理の才能がある方でしたら、千円札は同じ方向に(肖像画を左とか)に揃え、もっと丁寧な方は新札と旧(ボロ)札に分けて、10枚ずつワンセットにします。本は50音順に並べる。出版社別、作者別でもいいし両者をミックスしてもいい。これを短時間で出来れば経理の才能はあります。簿記を知らなくてもセンスがあるので仕事は出来ると思います。
ちなみに私の上司は数字の書き方を見れば分かるそうです。
ビルゲイツの見方は少し難しいかもしれませんが、結局のところセンスを見抜くところが共通していると思いますし、こういった問題を出せる、センスを見抜ける方って本当によい上司だと思います。
Posted by: 『くり~ぃむ』 | 2005.06.11 at 19:28
くりーぃむさん、コメントありがとうございます。経理には経理なりの人の見方があるんですね。お札の方向を揃えるんですか。そういえば、うちの会社の立ち上げを手伝ってくれた経理の人はそんなタイプでした。
Posted by: satoshi | 2005.06.11 at 21:59
長方形を、 x1 < x < x2 および y1 < y < y2 を満たす点 (x, y) の集合と定義すれば、長方形の一部が重なることは両方の長方形に属する点が存在することと同値であり、つまり次の4つの式を同時に満たす点 (x, y) が存在することと同値である。
x1 < x < x2 x3 < x < x4
y1 < y < y2 y3 < y < y4
こういう(x, y)が存在するための条件は
max (x1, x3) < min (x2, x4) かつ
max (y1, y3) < min (y2, y4)
である(N個の長方形に拡張できそう)。つまり
x1 < x4 かつ x3 < x2 かつ
y1 < y4 かつ y3 < y2
Posted by: か | 2005.10.02 at 16:20
私は文化系の数学なんかさっぱりわからない人間なのですが…
これを見て思うのは、何でここまで独創的な、その人の思惟志向性をはかる試験を受けて
そこをクリアしてきた人間が全世界的に集まり、本社にあるような自律と自由にあふれたキャンパスにて
莫大な資金とインフラを持ってソフトを作るという、ほとんどの人間が羨望せずにすまない
絶対的に良好な人的、資金的、制度的環境にありながら、
どうして作られるOSは昔からスパゲティモンスターの進化系でしかないのか…
嫌味でも何でもなく、マイクロソフトは良い製品を作る上での最上に近い環境を常にキープしていて、トップも世界でもっともサービスと技術動向のわかっている人なのに、
何で結果として、使うユーザーを常にどこかで困らせるような製品を良く作ってしまうのか。
今でもまったくわからないわけでないにしても、やはり非常に不思議だと思えるんです。
Posted by: 設問に最初から躓いてしまいました | 2005.12.02 at 15:01
>マイクロソフトは良い製品を作る上での最上に近い環境を常にキープしていて、
>トップも世界でもっともサービスと技術動向のわかっている人なのに、
>何で結果として、使うユーザーを常にどこかで困らせるような製品を良く作っ
>てしまうのか。
もっともなご指摘ですね。そこがビジネスの面白いところでもあり、怖いところでもあるのですが、私なりにマイクロソフト内部に長年いて、なぜうまく行かないかを理解したつもりです。少し話が長くなるので、別のところできちんと書いてみたいと思いますが、それこそが「イノベーションの
ジレンマ」というやつだと私は理解しています。
Posted by: satoshi | 2005.12.02 at 15:31
TBさせていただきました。
…うーん、この本はおもしろく読みましたが、私はあまり深く考えることなく読んでしまったのかも。
とてもためになりました!
Posted by: double face-d | 2006.01.24 at 00:13