掲載日:2014.4.21
このエントリーをはてなブックマークに追加

三年予測ートップリーダーと考えるエンジニアの未来ー


アルゴリズムとプログラミングの複合競技

このようなコンテストの上位に入賞するには、どのような資質、訓練が必要なのだろうか。
「プログラミングコンテストは、アルゴリズムとプログラミングの複合競技だ」と秋葉は説明する。
まず、アルゴリズムを自分で組み立てる能力が必要だ。プログラミングコンテストでは、プログラムに与えるデータの大きさを指定して、制限時間内に解けることを求める。アルゴリズムを工夫しないと計算量が大きくなりすぎ、プログラムが制限時間内に問題を解けない場合も多い。アルゴリズムしだいで計算量が100倍、1万倍といったレベルで差が付くことは、この世界では常識だ。
良いアルゴリズムを自分で組み立てるには、幅広いアルゴリズムの知識、それにある種の数学的センスが必要だ。このアルゴリズムの能力の重要さは、秋葉が高校時代に挑戦した「情報オリンピック」で思い知らされた。
プログラミングの能力も、やはり必要だ。アルゴリズムが組み立てられたとしても、特定のプログラミング言語を使い実装する過程で結果に差が出る。プログラマとしての熟練、センスが問われる。
秋葉は、「アルゴリズムだけでもダメ、プログラムを書けるだけでもダメ」だと説明する。「アルゴリズムを、どれだけきれいに短くプログラミングできるかが本質だ」。
しかも、TopCoderの問題を解くのに要求されるプログラミングテクニックは高度で、「それまで日本では誰も知らなかった」テクニックも数多く含まれていた。
そこで秋葉は、プログラミングコンテストの挑戦者達が集まる掲示板を大量に読んだ。ロシア語や中国語の情報も機械翻訳を使って読んだ。ロシア、中国には挑戦者の大きなコミュニティがあったからだ。TopCoderの国別ランキングでは、1位、2位をロシアと中国が占める状況が続いている。一方、日本は現時点でこそ3位だが、秋葉がTopCoderへの挑戦を始めた2007年頃にはトップ10にも入っていなかった。
こうした苦労を経て得た知識が、書籍『プログラミングコンテストチャレンジブック』には盛り込まれているわけだ。
書籍の企画と編集を担当したのは、『CPUの創りかた』など異色の技術書を作ってきたフリーランス編集者のUSU-YAだ。この企画が、当時大学3年生で「時間がありそうだった」秋葉達に回ってきたのだ。
書籍の目次作りでは、相当議論をした。どのような分類で、目次の各項目を立てていくのか。既存のアルゴリズムの教科書で使われている分類は使えず、オリジナルな構成を考えなければならなかったのだ。結果、書籍ではレベルにより初級、中級、上級の3部に分かれ、それぞれのレベルに応じて主なアルゴリズムとその実装方法を紹介する構成となった。「上級編」では、例えばC++言語で膨大な文字列データからの検索をどのようにこなすか(『プログラミングコンテストチャレンジブック第2版』、p.327)、といった、他の参考書ではあまり見かけない実装上のノウハウも盛り込まれている。

インターンシップでは社会への影響について考えた

秋葉は、インターンシップでPreferred Infrastructure (PFI)、Microsoft Research Asia、Google Japanなどの企業で働いた経験がある。秋葉にとっては、インターンで訪れた企業のどれもが刺激的だった。
PFIは、自然言語処理、機械学習、情報検索などに強みを持つソフトウェアベンチャーだ。実は、会社設立のメンバーはプログラミングコンテストの参加者だった。代表取締役社長の西川徹は、2006年のACM-ICPC世界大会に東京大学チームで出場している。
このPFIでのインターンシップは、秋葉の価値観を変える体験になった。プログラミングが現実の世界に影響を与える現場を見る機会となったからだ。「社会に技術で貢献することは、格好いいと思った」とそのときの感想を話す。
Googleにはプログラミングコンテストの経験者が多数いることから、「知り合いばかりで楽しかった」と話す。このときの経験は、C++を使って大規模で高品質なプログラムを書く勉強になった。プログラミングコンテストで書くコードは、問題を素早く解けばそれで役割が終わる。いわば使い捨てのコードだ。だが、大きな製品・サービスで使われるコードは、複数のプログラマにより長年にわたり保守することが求められる。「コーディングルール、リポジトリの使い方、コードレビューなどのやり方がとても勉強になった」。
Microsoft Research Asiaは中国の北京にある。雰囲気は大学の研究室に近かった。一緒に働いた中国の人たちの考え方も興味深かった。「みんなやる気があって、トップ学会にがんがん投稿するんです」。異文化との出会いも興味深い体験となった。
こうした企業でのインターンシップは、秋葉にとっては経験だけでなく、視野を広げる機会となった。

アルゴリズムと実装の両方を追求したい

博士課程1年に在籍する秋葉の「本業」は、研究者としての実績を積み上げることだ。専門はグラフ理論だ。自分の研究の方向性を、次のように話してくれた。「理論と実装の真ん中です。プログラミングコンテストの経験を活かした研究をやりたかったので」。
実は、数学の一分野であるグラフ理論の研究者の多くは、実装を重視しない。現存するコンピュータを相手にした実装は、やがて古くなるからだ。秋葉は「現時点での実装や実験結果が、例えば100年後に役に立つかというと、それはない」と説明する。こうした考えから、グラフ理論の論文では実装には立ち入らないのが普通だという。
だが、秋葉は「僕は実装を伴う研究をして、現実の問題を解きたい」との意欲を持っている。グラフ理論とプログラミングの両方を追求した研究を目指しているのだ。
グラフ理論は活用の幅が広い。例えば、ソーシャルネットワークサービス(SNS)もグラフで表現できるし、Webの世界もWeb Graphという概念で表現できる。そして、現実のSNSやWebをグラフで表現してみると、そこにはある特徴があることが分かる。特定の「ハブ」に経路が集中していたり、あらゆる2点が短い経路で結べたり(6次の隔たり)、といった構造がある。秋葉の研究では、このような現実の世界で観察されるグラフの特徴をアルゴリズムに取り入れ、現実の問題を解くのに活用していこうとしている。
進路はまだ決めかねている。研究者の道を進むにせよ、企業に所属して働くにせよ、自分の行きたい道に進めるだけの実力があることは間違いない。

面白さと、ライバルと、訓練と

秋葉の話を聞くと、プログラミングコンテスト上位入賞者への印象が少し変わってきた。彼らの多くは、最初から高度なプログラミング能力という才能の持ち主だった訳ではなく、日々の鍛錬で能力を得ている。問題を解く訓練を日常的に続け、そしてライバルたちと競い合うことで能力を高め合っているのだ。
秋葉にしても、最初のうちはレッドコーダーは「憧れ」であり、「自分がなれるとは思っていなかった」。「情報オリンピック」の世界大会でも思うような成績を残せず悔しい思いをした。過去の経験をバネに、訓練を続け、ライバルと競い合うことで、今の地位を手にしたのだ。
重要なこととして、秋葉には優秀なライバルや先輩がいた。例えば麻布学園パソコン同好会の先輩には、ベンチャー2社を創業し、現在はDeNAでHTML5開発に取り組む紀平拓男がいる。同世代のライバルには、数学の天才、渡部や、一緒に書籍を執筆した岩田らがいた。「先輩やライバルをよく観察した。自分にもできることがあるかな、と」。
なぜ、秋葉がプログラミングコンテストに挑戦しつづけたのかといえば、最大の理由は「楽しかった」からだ。「解いて楽しい問題がいっぱいある。アルゴリズムを考えるのも、パズルのようで楽しい」。楽しいからこそ、訓練を続けることができたのだ。
プログラミングの分野で突出した仕事をしている多くの人が「プログラミングの楽しさ」を口にすることから分かるように、ITの進化の速さの大きな理由のひとつが、課題への挑戦に「面白さ、楽しさ」を感じるプログラマの存在なのだ。アルゴリズムや実装の能力を磨き、関心を深めていく場として、競技プログラミングの存在感は高まっている。
このエントリーをはてなブックマークに追加
dodaエージェントサービス 専任のキャリアアドバイザーが、キャリアアドバイスから求人紹介、退職フォローまでを一貫してサポートします。ご利用になりたい方は、こちらからご登録をお願いします。はじめて退職する方のために3分でわかるエージェントサービスのメリットを紹介 エージェントサービスに申し込む(無料) 3分でわかるエージェントサービスのメリット
ITエンジニア・クリエイター合格診断

エージェントサービスに申し込む(無料)

IT業界に精通した専任のキャリアアドバイザーが、エンジニアの転職活動を無料でバックアップします。

GEEK ACADEMY

GEEK ACADEMY

先端を走る技術を、ギークに学ぶ

メールマガジン無料配信

簡単登録で最新の転職情報、
希望の求人が届く

開発意欲を刺激するEngineerrise