google のプログラミングコンテストについて調べてみる。
『米Googleがプログラミングコンテストを開催 〜自分のコードがサーチエンジンに採用される可能性も』
(2002-02-07, Internet Watch)
ポイント1. 90 万ページの web データと、このデータを処理するためのプログラムのソースコードが提供された点。つまり、ソースコードを読む能力と、それを改造する能力が要求されている。
ポイント2. 課題が、このプログラムにコード追加して、何か「非常に興味深いこと」を成し遂げることであった点。つまり、「非常に興味深いこと」を提案する能力が求められている。
ポイント3. 20億ページにもデータが拡大した場合でもそのプログラムが問題ない時間で動作することを説得できなければならない点。つまり、最初からスケーラビリティとパフォーマンスを考慮する必要がある。
『米グーグル:「プログラミングコンテスト出場者を求む」』
(2003-09-19, CNET Japan)
第二回目について。課題については書かれていない。
『グーグル、謎の人材募集広告--シリコンバレーのビルボードに』
(2004-07-12, CNET Japan)
『グーグル、今度はユニークな適性テストを技術雑誌に掲載』
(2004-10-18, CNET Japan)
この辺にいたっては、ウィリアム・パウンドストーン『ビル・ゲイツの面接試験』 (青土社, 2003) で紹介されているようなクイズになっているような。プログラミングコンテスト Code Jam は毎年行われていると紹介されている。
そろそろ google のサイトを見てみるか...
ということで、その適性テスト
Google Labs Aptitude Test 『Pencils down, people』
「We're a little obsessive about digging into hard computing problems, and we love finding more people like us.」とのこと。問題は gif で提供されている。ざっと見てみると、なるほどこういう課題が与えられるとわくわくしてきてつい解きにかかってしまうような人 (でかつ答えを見つけちゃうような人) を求めているんだなと思う。
『米Google主催のプログラミングコンテストの登録受付開始』
(2004-09-03, Internet Watch)
2004 年の Code Jam について。「競技会場となるJavaアプレットを実行してから提出された問題を解き、コンパイルした実行結果によりポイントを獲得する方法で行なわれる。プログラミング言語はJava、C#、C++、VB.NETが使用できる。」とのこと。
http://www.google.com/codejam/
今年のコンテストについては
Where: http://www.topcoder.com/googlecodejam
What: Solve increasingly difficult coding problems within a set time period
とのこと。
上記 TopCoder のページを見ると、もう少し詳細な内容が書かれている。
* Java, C++, C#, VB.NET のどれを使ってもいい。
* TopCoder Competition Arena という Java Applet をダウンロードし、問題文を読み、ソリューションをコーディングし、コンパイルし、テストし、コードを提出する。コンテストの前にダウンロードして、サンプルの問題を使って練習することも可能。
* コーディング・フェーズ: 指定された日時に、参加者はアリーナ (上述の Applet) に参加する。そうすると 10人のグループごとに仮想ルームに配置される。全ての参加者には同じ 3 つの問題が与えられる。3 つの問題は順に難しいものとなっている。これは誰が正確な解法をもっとも短い時間であみだせるかを競うもので、参加者は思考力とコーディング力で相手をうち負かすことになる。Leader Board が各ステップのポイントを記録する。
* チャレンジ・フェーズ: このフェーズでは、他の参加者のコードを見て、自分が提出したコードを通じてテストケースを出して、他の参加者のコードを打ち負かそうとする (=他人のコードが十分な結果を出せないことを祈って)。他の開発者のコードを打ち破るのは、プログラマーにとってももっとも直接的な競技形式である。このフェーズでは、ポイントはチャレンジの成功者に与えられ、チャレンジへの失敗者からは減点される。
* システムテスト: チャレンジフェーズの最後の数分では、自動化された客観テストが、全ての提出物の正確さをはかり、全ての参加者に最終的なポイントが与えられる。あなたの能力評価と統計の表示がほぼ即時に行なわれ、そのまま、あなたが競争的な領域に対して行なったことを知る満足となる。
なんというかよくできているというか、よく作ってあるな。参加する側はけっこう楽しそうだけど、フレームワークを作って、問題を作って、その評価自動テストを作るのは大変そう。ただ、先述のクイズがおもしろくてしょうがない google のエンジニアって、こういうの作るのも好きそう。
特におもしろいのはチャレンジ・フェーズ。これは、相手のプログラムを読み、動作を理解した上で、バグや仕様の弱点を見つけるということ。コーディングじゃなくて、テストやコードレビュー、仕様レビューの能力も見ているということになる。