• Facebook
  • twitter
  • rss

未来が見つかるカルチャーメディア

COTAS

未来が見つかるカルチャーメディア

menu

    • ABOUT COTAS
    • MEMBERS
    • CONTACT
    • SHARE TO

プログラミングコンテストはエンジニアを育てるのか。AtCoder高橋CEOに聞いてみた。

「プログラミングコンテスト」は、決められた時間内に、与えられた答えの無い問いを解くプログラムを書き、その精度を世界中の参加者と競う競技である。

プログラミングコンテストで出題される問題を解くためのコーディング能力がソフトウェア開発のエンジニアリングに直結しているわけではないが、プログラミングコンテストは優秀なプログラマーの育成・発掘に有効であると評価されており、世界ではGoogleやFacebook、日本ではリクルートなどの大企業がプログラミングコンテストを主催。優秀な若いプログラマーの採用に繋げている。

今回インタビューする高橋直大さんが2012年に起業し、代表取締役を務めるAtCoder株式会社は、リクルート、ドワンゴ、KLabなどが主催する日本の多くのプログラミングコンテストに問題を提供している、プログラミングコンテストを専業にしている企業だ。

自身も慶應義塾大学在学中にMicrosoft主催のプログラミングコンテストであるImagine Cup 2008で世界3位になった現役の競技プログラマーであり、プログラミングコンテストの実況・解説でも常に声のかかる有名人でもある高橋さんに、プログラミングコンテストの魅力、コンテストの運営を通じてプログラマーの育成をする意義について聞いた。

Interview by Yoichi Goto | Photos by Naomi Circus

2017.02.08[Wed]

f6_atcoder006
後藤:AtCoderの事業について簡単に教えて頂けますか?

高橋:AtCoderのメインの事業は毎週土曜日に自社サイトで開いているプログラミングコンテストで、現在サイトの登録者が2万人います。他にも、このコンテストで使っているオリジナルのプログラム判定システムを使って企業のソフトウェアエンジニア採用試験を行ったり、企業スポンサーがつけばオンラインでのコンテスト上位者を特定の会場に集めて決勝大会をリアルイベントでやったりしています。

プログラミングコンテストはAtCoderが毎週やっているような数時間で終わるものもあれば、僕が2008年に3位になった世界大会のImagine Cupは、フランスで一週間くらいかけて行われていたり、イベントの長さも大きさもいろいろです。

企業スポンサーがイベントを開く場合には、AtCoderはコンテストの問題の提供をして、僕は問題の解説をやったり、自分のTwitter(@chokudai)で参加者の募集・告知をします。(笑)

最近だと、リクルートが主催した”CodeFestival”という200人のプログラマーが集まる日本最大級のコンテストのコンテンツ(問題)を提供しました。

CodeFestival 2015

 

後藤:数百人の参加者を高橋さんのTwitterだけで集めるのはすごいですね。(笑)

高橋:イベントのスポンサーもTwitterで繋がったのがきっかけでついてくれた企業が多いです。営業は苦手で、スポンサーセールス資料とかも無いです。(笑)

後藤:学生の時に世界のプログラミングコンテストの大会である意味「アスリート」として上位を目指していて、そのままコンテストを運営する会社を立ち上げるに至った経緯を教えて頂けますか?

高橋:AtCoderは学生の時に起業して、2年間は学生社長をやっていたんですけど、卒業しても続けたいと思って、就職せずにAtCoderの経営に集中することにしました。いざとなったらエンジニアとして企業への就職はいつでも出来ると思ったので。

後藤:競技プログラマーって、スポーツのアスリートと非常によく似てるな、と思ってます。高橋さんは言うなれば世界トップクラスのアスリートで、現役バリバリの時に大会の運営側にまわったということですよね。

高橋:AtCoderを立ち上げた理由は、僕が本当に競技プログラミングというもの楽しいと思っていて、こんな楽しいものはもっと広めたい、みんなでやりたいと思ったからなんですよね。日本でも、コンテストが増えて、参加者が増えて、強い人が増えて欲しいなと。

プログラミングコンテストは、世界中から参加者がオンラインで一斉に問題にアクセスしてその速さとか正確さで順位を競うんですが、AtCoderを起業する前まではプログラミングコンテストのプラットフォームには海外の会社が運営している英語のものしか無かったんです。

英語が日本人のプログラマーがコンテストに参加するボトルネックになってるのは分かっていたので、だったら日本語で、日本人のためのコンテストを開催しよう、と思ったんですね。僕も英語が苦手で、プログラミングコンテストの問題は何とか読んで解いていたんですが、海外の大会に出た時にコミュニケーションをとって仲間を作るのは難しくて、日本人の競技プログラミング仲間がもっとたくさん欲しいなと思ってたのも理由の一つです。

widelux_atcoder003
後藤:イベントの運営とかスポンサー企業との調整、会社の経営をするというのは、純粋に自分のスキルを高めて世界中のプログラマーと競う「アスリート」の世界とだいぶ違う思うのですが……。

高橋:プログラミングコンテストを開催することで全く自分が出場しなくなったわけじゃなくて、今も競技プログラマーとしての活動はしっかりやっています。大会の時には仕事を会社の仲間に任せたりしながら、2週間コンテストの出場のために仕事をせずに準備したり。(笑)コンテストの集客は僕のTwitterでの告知がメインなので、現役の競技プログラマーとして活動していることは説得力を持たせる意味でも重要ですしね。

以前は僕しか問題を作る人がいませんでしたが、僕より競技プログラマーとして強い人が入社してきてくれたり、コンテスト上位の参加者に問題を作ってもらうといったことも出来るようになってきたので、自分が競技に参加する時間も増えて、今の環境はすごくいいですね。

f6_atcoder001

コンテンツとしてのプログラミングコンテスト

後藤:プログラミング未経験者とか、子供とか、プログラミング競技のエントリー層を増やすための工夫はしてるんですか?

高橋:コンテストの終了5分後にYouTubeのライブ配信で問題の解説をしたり、初心者向けコンテストを主に情報系の学部に在籍する大学1・2年生をターゲットにして開いたりしています。

初心者向けコンテストの問題は、プログラミングを始めて3時間くらいで出来る問題から、ちょっとずつ新しい処理が出来るようにレベルを上げていって、出ているだけでプログラミングの基礎知識が身につくように考えています。

ただ、やはり全くプログラミングをやったことがない人にまでリーチは出来ていないので、そういう人にも興味を持ってもらう問題とか教材を作ったり、イベントをやったりするのは課題ですね。

後藤:プログラミングとかプログラミングコンテストの楽しさがもっと外から見えると、いまプログラミングに興味がない人にも届きやすいのかなと思います。

プログラミングを「コンテスト」にすること自体面白いし、そのなかで高橋さんが「楽しい問題を作ろう」とされてるのも素晴らしいと思うのですが、やはりそもそもパソコンの前に座ってもらうために、コンテンツとしての見せ方に課題がありそうな気がしますね。

クリスティアーノロナウドのスーパーゴールを見て、少年が親にサッカーボールをおねだりする、っていうようなことが起こるといいですよね。E-Sportsはプレイ画像がそのままコンテンツとして残って拡散するので、競技人口が一気に増えていて、ゲームをやらない人にも知られているプレーヤーが出てきています。

高橋:見せ方の部分は大きな課題です。プログラミングコンテストはとても地味なんですよ。(笑)

プログラミングコンテストはいかに早く問題を解くか、で順位を決めるので、外から見える部分はコンテスト終了後に、オンラインで表示される順位表だけなんですよね。

一つ面白いコンテストは、僕が解説をやらせてもらったリクルートの「CODE VS(コードバーサス)」というゲームをプレーするAIを戦わせるコンテストがあります。決勝戦はニコ生で放送されて4万人くらいが視聴しました。イメージとしては将棋の電脳戦に近いです。プログラミングでAIのプレーヤーを作って戦わせるっていう感じですね。

これは、忍者が忍術を使って相手より長く犬から逃げるというゲームなんですが、ゲームのルールを読み込んで、参加者が事前にプログラミングを組み、本番では完成したプログラミング、つまりAI同士を戦わせます。

f6_atcoder003
他にもロボット同士を戦わせたりする形式のコンテストもありますが、ゲームとかロボットを動かすと開催コストが高くなりますし、とにかく時間をかけられる人が有利になってしまう欠点があります。AtCoderのように、週末に1〜2時間参加するだけで順位が決まるほうが、本当に強い人を決めるという意味では良いかもしれません。

AtCoderは、物とかゲームみたいな具体的なアウトプットが無くても、プログラミング自体が楽しいっていうのを広めていけたら良いなと思っています。

f6_atcoder010

エンジニア人材としての競技プログラマー

後藤:スポーツにはオリンピックとか世界選手権とか、大舞台が用意されていて、それを目指して世界中のアスリートが競争することで、世界記録が更新されていくじゃないですか。

プログラミングコンテストも、日本に大会があることでプログラマーのレベルが上がっていくと思うんです。文部科学省も小学校での「プログラミング教育の必修化」を検討していたり、プログラマーの育成は世界的にホットなトピックだと思いますが、そういうことも考えているんですか?

高橋:世界で最も参加人数が多くてレベルも高いプログラミングコンテストの中には、Googleがやっている”Google Code Jam”とか、Facebookが主催している”Facebook Hacker Cup”、といったITの大企業が主催している大会があるんですが、これらの企業はプログラマーの育成や採用を考えてコンテストを開いていると思います。

後藤:そういう大会で優勝する、「強いプログラマー」はどんな人なんでしょうか?

高橋:今世界で一番強いと言われている人がベラルーシ人の学生さんで、2番目はロシア人のGoogle社員です。

後藤:Google社員ですか。プログラミングコンテストの「アスリート」が他のスポーツのアスリートと違うのは、プログラミングとか、人と競うことが好きで取り組んだ結果身についたスキルをそのまま最先端の仕事に応用出来るっていうことですね。

高橋: 僕は競技プログラミングは遊びだと思ってやっていて、世界3位になった時もプログラミングが世の中の役に立つとかは何も考えてなかったですが、参加者のスキルが世の中の役に立つのは、運営側としても嬉しいことですね。

プログラミングコンテストはスポーツとして見たら「マイナースポーツ」だと思うんですけど、例えば学生の間に集中してプログラミング競技をやれば、就職に困ることはまず無いんじゃないですかね。

f6_atcoder012
後藤:また高橋さんの「コンテストオーガナイザー」とか「会社経営者」としての原動力の話に戻るんですけども、「楽しいことを広めたい」ということ以外に、コンテスト上位になった日本人が新しいサービスを創り出したり、結果としてコンテストで鍛えたスキルで世の中を良くしていく、みたいなことにもモチベーションがあったりもするのでしょうか?

高橋:それももちろんあります。AtCoderの卒業生があちこちの企業で活躍してくれているので、僕が仮にコンテストを開催しないで1人で何かサービスを作っていたとしても、これまでコンテストに参加してくれた人が世の中に与えている影響のほうが大きいかもしれません。

でも、日本は競技プログラミングの世界では強豪国の一つで、強い選手がたくさんいるのに、IT産業が強くないみたいに言われていて、そこは納得していないんですよね。

後藤:そのギャップは何で生まれるんでしょうか?

高橋:競技プログラミングとソフトウェアの開発は別物だというのももちろんありますが、それを差し引いても、日本の会社のソフトウェアエンジニアに対する理解度が低いと思います。日本はものづくりを強みにしてきた国なので、ソフトウェアという目に見えないデータにお金を使わなきゃいけないっていう考え方が根付いていないんじゃないでしょうか。

f6_atcoder008
後藤:今、例えばTESLAがクルマのシステムアップデートをクラウドで一斉に行ったり、UBERやAirBnBはハードを持たない企業で、ソフトウェアの重要性は高まる一方ですよね。

世界トップレベルの競技プログラマーが日本にたくさんいるというのはとても希望が持てると思うんですけど、どうしたらその存在を知ってもらって、もっと社会的に有用な使われ方がされるようになるんでしょうか?

高橋:なかなか難しいですね。僕は競技プログラミングの世界の人間で、エンジニアリングを偉そうに語ることは出来ないんですけど、しいて言えば競技プログラミングでやることは、アルゴリズムって言って、計算を工夫することなんですね。

普通に計算したら時間がかかるところを、数学的な工夫によってものすごい速さで計算できるようにする。ある問題に対して、普通の人が思いつかない工夫が出来るのが「強い」競技プログラマーの強みです。要するに普通の人が書けないプログラムを書けるという所なんですね。つまり普通のエンジニアがやってもできないことが実現できる可能性がある。

例えば有名な問題で、
「板の上に蟻がいて、端から中央に向かって歩いています。蟻はぶつかったら反転して端に向かって歩き始めて、端に到達すると下に落ちます。全部落ちていくまでに何秒かかるでしょうか?」
というのがあります。

さらに前提条件として、「蟻の数は20万匹」、「プログラムの実行制限時間は2秒以内」というのが与えられます。

問題のとおりに計算すると、20万匹の衝突回数が20万の2乗で400億回になって、コンピューターが1秒間に1億回くらい計算したとして、400秒かかっちゃいますよね。

でもよく考えると、「蟻がぶつかって反転して端に向かう」時間は、蟻がすれ違ってまっすぐ端に行く時間と同じだということに気付きます。なので、それぞれが端に行く時間を計算すれば終わりです。これだと、計算回数は蟻の数と同じ20万回で済むので、計算時間は0.002秒くらいになって制限時間に間に合います。

f6_atcoder005
後藤:なるほど……。

高橋:「普通に」計算すると無駄が多くなってしまいますが、「素通りするのと同じだ」と気づくと解ける。この瞬間がプログラミングコンテストの面白いところなんですよね。僕が問題を作る時も、ただ実装量が多いコードを組んでいくだけじゃなくて、気付きがあって面白い問題になるように考えています。

こういう面白い問題を解くのに必要な工夫は、処理数の多いプログラムのスピードや精度を上げるのにも必要なので、膨大なデータを持っているGoogle、Facebook、日本だとリクルートの採用情報検索サイト、Indeedといった企業が、競技プログラマーを積極的に採用していますね。

f6_atcoder007
後藤:例えば金融とか、大きなデータを扱ってる業界は他にもあると思うんですが、今後もっといろんな業界でプログラミングコンテスト出身者が活躍する可能性はあるんでしょうか?

高橋:日本の銀行でいま人材としての競技プログラマーの需要があるかどうかはわかりませんが、もっと色々な業界の企業にプログラミングコンテストに興味を持って欲しいとは思っています。

例えば、自動車業界では自動運転開発で既に競技プログラマーが活躍しています。競技プログラマーとして世界的に有名だった中国人の方は、当時Googleの自動運転部門のエンジニアだったのですが、Baiduの自動運転部門にヘッドハントされました。

他にも海外では以前NASAがスポンサーになったプログラミングコンテストがあって、大会上位5人の書いたプログラムが実際にNASAで使われたり、アメリカの諜報機関のNSAがスポンサーになっていたコンテストもありました。

日本だと研究論文のような成果が専門性として評価されやすいですし、正直言って競技プログラミングのレベルが高くなっても専門性はつかず、汎用的な技術にしかならないんですが、海外ではそこから専門家を育てていこうという動きがあるので、日本でもそうなっていくと良いですね。

  • 高橋直大(たかはし・なおひろ)
  • AtCoder株式会社 代表取締役社長
  • Microsoftが開催した学生プログラミングコンテストImagine Cup 2008年アルゴリズム部門で世界3位。TopCoderOpen四年連続決勝進出、準優勝1回。「最強最速アルゴリズマー養成講座」著者。
    Twitter : @chokudai
  • YOICHI GOTO
  • Creative Researcher / / dentsu
  • 2011年電通入社。社内シンクタンクである電通総研の研究員。主なリサーチ分野はエクストリームスポーツ。