TopCoderで世界と渡り合う日本IBMの異才――夷藤勇人

もしあなたが美しい(あるいはトリッキーな)コードが飛び交う世界を知りたいと願うならそれはTopCoderに参加することで容易に実現することができる。このTopCoderに参加している数少ない日本人で、生涯プログラマーを宣言する人物にTopCoderの魅力を聞いた。

» 2007年03月01日 08時00分 公開
[西尾泰三ITmedia]

 世にハッカーと呼ばれる人は数多く存在すれど、日常生活においてわたしたちがそうした人たちのコーディングを目の当たりにする機会はまれである。

 しかし、美しい(あるいはトリッキーな)コードが飛び交う世界を知りたいと願うならそれは容易に実現することができる。そこには国籍、年齢、過去の栄光……そのいずれもが何の意味も持たない、コードのみが支配する世界が広がっている。

 そんな世界の1つとしてTopCoderが挙げられる。世界中からトップレベルのプログラマーが参加するプログラミングコンテストとして知る人ぞ知るTopCoder。日本ではいまひとつ知名度は低いが、海外であればその上位にランクインしているというだけで、誰しもが称賛を惜しまないほどの人気を博し、プログラマーが自らの実力をアピールするための場として知られている。

 コンテストはすべて英語で行われることも影響してか、国別のランキングで30位前後だった日本のランキングは、最近では17位前後まで上昇している。このTopCoderに参加している数少ない日本人で、生涯プログラマーを宣言する日本アイ・ビー・エム(日本IBM)ソフトウェア事業部の夷藤勇人氏にTopCoderの魅力を聞いた。

夷藤勇人氏 穏やかな外見からは想像もつかないほどコードへのこだわりを見せる夷藤氏

 夷藤氏は、京都の大学に在籍し、電子工学と知能情報学などコンピュータサイエンスを学ぶ傍ら、Perlなどの言語に親しんだ。「JavaやC++にも触れたが、個人的にはPerlのおかげで今の自分がある」と自身を分析するが、「今はPython。著名な方々が自身のブログなどで『Pythonはいい』と書いていたのも影響していますが、Perlだと自分の書いたコードですら自分で理解できなくなることがありましたので(笑)。Pythonを知ってからはPerlで書くことはほとんどなくなりました」とも話す。

 大学院卒業後は日本IBMへ入社。最初の配属は花形とも言える金融サービス関連の部署だったが、程なくしてメインフレーム向けのシステムインテグレートを主とする仕事が自分に向いていないのではと感じるようになったという。「COBOLのような言語があるのかと、軽いカルチャーショックを覚えるほどでした。仕事としてはつまらなかった」

 悩んだ結果、1年半ほどたった後、社内の人材公募でソフトウェア事業部に異動した。WebSphereやEclipseなどJava関連技術を多用する中、「Pythonならもっと楽に書けるのに」とは内心思いつつも、日々の業務をこなしていった。その後、米IBMラーレイ研究所にて、「SpecJAppServer2002」の開発に従事することになった際、Apache Geronimoにフルタイムでかかわる技術者に出会ったことなどが縁でApache Geronimoに深くかかわるようになり、国内でもGeronimoに関する講演を多数行うなどはた目には順風満帆の日々を過ごしているように見えた。

 しかしそれは、夷藤氏の心の中からプログラミングに対する情熱を消し去ったわけではなかった。

Boys Be Ambitious!

 大学時代と比べて自身のスキルがどう変わったかについて、「学習欲求は今の方が強いです。あのころに比べてさまざまな言語に触れたことで、物事の考え方が豊かになったようには思います」と話す。反面、今の学生がうらやましいという。「常時接続環境が当たり前で、TopCoderのような自分の力を気軽に試せる場も用意されている。早いうちにこうした場を通じて世界の壁を早めに意識すれば、グローバルな方向に意識が向くでしょう」

お勧めの1冊

 プログラミングを学ぶにあたって参考になる書籍を挙げてほしいと質問すると「トレンドを追い求めて現代的なものを読みあさるよりは、古典、もしくは名著と呼ばれるようなものをじっくり読むのがよいと思います」とし、例として、マサチューセッツ工科大学(MIT)などでもテキストとして用いられている『Structure and Interpretation of Computer Programs』(計算機プログラムの構造と解釈)などを挙げる。


TopCoderで燃え上がるプログラマー魂

 コードへの飽くなき関心を持つ夷藤氏が最近目を向けたのが、前述のTopCoderだった。実際にはTopCoderのシステムを使い、Googleが主催しているプログラミングコンテスト「Google CodeJam」が同氏にとっての新たな世界への入り口となった。

 TopCoderではアルゴリズムマッチやデザインマッチ、デベロップメントマッチなど幾つかのプログラミングコンテストが用意されているが、夷藤氏が参加しているのはアルゴリズムマッチ。毎週のようにオンラインで実施されており、誰でも参加可能だ。

TopCoder 「TopCoder」のトップ画面。すでに登録者は10万人を超えている

 アルゴリズムマッチでは、3つの設問を制限時間75分で解き、5分の休憩の後、チャレンジタイムと呼ばれるお互いのバグを見つけ合う時間が用意されている。利用可能な言語は、Java、C++、C#、VBの4種類で、最近ではPerlを加える話もあったが、実装の差による影響が生じかねないといった配慮から現在でも4種類のままとなっている。「Pythonならもっとうまくコーディングできるのに、と思うことはよくあります。わたしに限らず、Pythonを利用可能にしてほしいという声は結構あるようです」(夷藤氏)

 参加者は約20名ずつにグルーピングされており、チャレンジタイムでは同じグループ内の参加者が提出したコードを見ることができる。コードにバグがありそうならそのバグを誘発するようなコードを示し、“撃墜”するとポイントが付加される。そして、チャレンジタイムで撃墜されることがなかったコードにはシステムテストが走り、そこで正解であれば、提出時間の速さに応じたレーティングが付与されるという仕組みだ。

 レーティングによって問題のレベルも分けられており、レーティングが1200未満であれば、Devision2という比較的易しい問題を解くことになる。「Devision2は問題に対して素直に実装することで解けるもの」と夷藤氏。

 そんな夷藤氏のレーティングは現在、1800前後。レーティングの分布では上位10%程度の数値である。「上位を占めるのは圧倒的にロシアが多いです。米国に比べると、有名になりたい、という思いが高いモチベーションにつながっているのかなと思います」。

 レーティングによるモチベーションはもちろん自身の喜びだが、それ以上に「純粋に楽しい」と夷藤氏は話す。その喜びの源泉は、やはり世界のトップレベルのプログラマーのコードを見ることで自身の成長につながる点にある。

 「TopCoderのアルゴリズムマッチで出題される問題は、日常生活でプログラマーが直面するような問題ではなく、パズル的な要素が強い特殊なものですので、業務に役立つかといえばそれは分かりません。また、TopCoderの参加者のコードに見た目の美しさがあるかと言えば、マクロを多用するなどゴチャゴチャした非常に読みにくいコードが多い気もします。しかし、シンプルでエレガントであるという点では共通しています。問題の解法として『こんな解き方があるのか!』と感じることもしばしばあります。そうしたコードを見ることができるのは喜びなんです」

シンプルでエレガントなコード

 以下のコードはレッドコーダーの一人、Eryx(ポーランド)のコード。このコードは、与えられたいくつかのドミノを規則に従って並べてサイクルをつくるとき、そのサイクルの作り方は何通りありますか? という問題に対する解として同氏が用いたものだ。

 見慣れない「FOR」、「PROD」、「ll」などはCのマクロで、「コードそのものは、オイラーグラフの性質を利用したもので、非常にシンプル」と夷藤氏。いかに問題解決の方法を思いつくかが重要な要素であることを示すよい例だろう。


class ExtendedDominoes {
    public:
    long long countCycles(vector  pieces) {
        // !FDI
        int cnt[10];
        FOR(k,0,10) cnt[k] = 0;
        FOR(t,0,Size(pieces)) FOR(u,0,2) cnt[pieces[t][u]-'0']++;
        ll vals[20];
        vals[0] = 1; vals[1] = 0;
        FOR(k,2,20) vals[k] = (k-1) * vals[k-2];
        return PROD(k,0,10, vals[cnt[k]]);
    }
}; 

Copyright c 2001-2007, TopCoder, Inc. All rights reserved.

 Googleが優れた人材を発掘するためにGoogle Code Jamを開催していることからも分かるように、TopCoderも企業に対して優秀なプログラマーをリクルートすることをビジネスモデルの要としている。「レーティングが2200を超えた人物は、表示文字が赤くなるため、レッドコーダーと呼ばれるのですが、そうしたRedCoderたちがGoogleへ入社した、といった話もよく耳にします。就職へのパスが開けるなどの要素ももちろん1つとしては挙げられるでしょうが、それよりはやはり純粋に楽しいからという理由で参加者は集まっているのではないでしょうか」。

 当面の夢はGoogle Code Jamでのファイナリストに残ることだと話す。「40歳、50歳になっても、TopCoderやGoogle Code Jamで戦い続けると思います」と夷藤氏。プログラマー35歳定年説などどこ吹く風だ。

プロフィール

夷藤氏

日本アイ・ビー・エムソフトウェア事業部 夷藤勇人

1999年、日本IBM入社。2001年からWebSphere Application Serverの技術支援を担当し、多くのJ2EEプロジェクトにおいてシステムデザインやアプリケーション開発の助言を行う。2002年には、米IBMラーレイ研究所にて、業界標準パフォーマンス評価団体・SPECにおけるJ2EEアプリケーションサーバ評価システムである「SpecJAppServer2002」の開発に従事。Apache Geronimoなどサーバサイドのみならずクライアントサイドのテクノロジー、Python、Eclipse、TopCoderでのアルゴリズムコンテストへの参加などその興味は多岐に渡る。著書に「Eclipseパーフェクトマニュアル」などがある。

夷藤氏のTopCoderでの戦跡や現在のレーティング


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ