「数学的なひらめきの感覚が好き」 『AtCoder』高橋直大さんに聞く競技プログラミングコンテストの面白さ

慶應義塾大学在学時にマイクロソフトの技術コンテスト『Imagine Cup 2008』アルゴリズム部門で世界3位に入賞し、その後も数々のプログラミングコンテストで世界上位の順位に入る活躍を続けている高橋直大さん。現在はプログラミングコンテストサイト『AtCoder』の開発・運営に携わりつつ、現役で競技プログラミングコンテストへの参戦も続けています。

今回、ガジェット通信では高橋さんにインタビュー。競技プログラミングに魅せられる理由から、プログラマーがコンテストに参加する意義についてまで語っていただきました。

「プログラム書くことをみんなで同時に競い合えることがコンテストのポイント」

ーーまず、高橋さんがプログラミングに興味を持ったきっかけからお聞きできればと思います。

高橋直大さん(以下、高橋):もともと小さい頃からコンピュータ自体には興味があったんですけれど、最初はコンピューターゲームに興味があったんです。家にパソコンがあって「ゲーム楽しいな」という感じで。プログラムを始めたのはだいぶ後で、中学3年生の時の技術の時間の授業で触れたのが最初です。それから高校2年生のときにパソコン研究会に入ったんですけれど、3年生の時に東京工業大学が主催する『スパコン』というコンテストに僕のチームも加わって参加したんです。その時にC言語を勉強してひとりで書き上げたというのがプログラムをしっかりと書いた最初になります。そこで予選を突破できて、チームメイトが強かったこともあって、6位に入賞したんです。それで競技プログラミングが「向いているな」と思ったのがきっかけになります。

ーーどういったところがご自分に向いていると思いましたか?

高橋:数学がもともと得意だったので。僕が触れたプログラミングはグラフィックのデザインとかそういうのではなくて、数学に寄った部分があったんですよね。それで、実際コンテストに出て、いきなり入賞ってかなり向いていないとできないじゃないですか?

ーー入賞できて「自分はいける!」と思った?

高橋:そうですね。その時のメンバーもみんな競技プログラミングで、僕以外は情報オリンピックで入賞していて、周りが強かっただけというのもあったんですけど、「これ自分に向いている」って思ったんですよね。

ーー競技プログラミングというジャンルについて馴染みのない人も多いと思います。通常のプログラムの違いはどういうところになるのでしょう?

高橋:ひと言でプログラムと言っても幅が広すぎるというのはありますが、基本的には「ものを作ること」を目的していると思います。それに対して、競技プログラミングっというのは、「何をしてください」というミッションが与えられるんですね。そのプログラムをするということ自体が目的になっています。だから、競技プログラムは問題ごとに点数があって、難易度順に点数が振り当てられていて、それをどんどん解いていくわけです。だから、一般的なプログラミングコンテストの場合は、プログラムを書く量とか時間とかは多くないというのが特徴の一つだと思います。

ーー最近ではアプリの企画も含めたコンテストも多いと思うのですが、とりわけ数学寄りのプログラミングコンテストではどういう点が評価の基準になるのか教えてください。

高橋:特に数学寄りのプログラミングコンテストというのは、解いた瞬間に点数が出るんですね。だから、最適化系の問題で、どれだけ圧縮率を高められますか、といった内容ならば、圧縮したファイルサイズがそのまま点数になる、みたいな感じで、点数が決まっていきます。だから課題をよりよくこなしたり、早い時間で解けるといったことが評価されます。

ーーそういった、競技プログラミングのどこに面白みを感じているのでしょう?

高橋:競技プログラミングで一番の醍醐味は問題を解く面白さですね。これは人によって面白いと感じるか、そうでないか分かれるところではあるんですけど。僕がやっている領域では、数学的なひらめきの部分をかなり重要視したコンテストになっているので、そのパターンはいくつかあったりとかして、知識的な部分も当然あります。プログラムに落とし込んで、実際に答えが出る形になっていくので具体性があるのが、いわゆる数学がどんどん抽象的になっていくこととの違いだと思います。解いている問題の、具体的に「こういうことが出来たら嬉しいな、ならばどうやればいいのかな」と考えた時、普通にやるとすごい時間がかかるのが、ある1つ2つの気付きで、パッと計算が早くなった時のひらめいた時の感覚がすごく好きですね。それに加えて、プログラム書くことをみんなで同時に競い合えるっていうのが一つのポイントで、ランキングが出てレーティングが付くんですね。最初のうちはあんまり解けなかった問題が、どんどん解けるようになるとレーティングが上がっていくんです。レーティングが上がっていくと自分の世界の順位がどんどん上がっていってみたいな感じなって、勝った負けたとか、全然思いつかなかったことを友だちが解いていたりして「すげー」ってなったりしますし、いろいろ話して相談したりするの面白かったりして、一人だとつまんなくても、みんなでやると結構楽しいみたいなところはありますね。実際コンテストでやるのは一人なんですけど、終わった後に話ができて、途中の順位表を見れるのも楽しみの一つだと思っています。

ーープログラムが公開されていると、参加する人にとっては勉強にもなるし、次のコンテストへのモチベーションになりそうですね。

高橋:そうですね。みんな『Twitter』で「この問題はこう解いた」とかツイートするんですよね。特に「うまくできた」とおもったことは。それを見るといろいろな気付きがありますね。

ーー世界的に、この国が強いといった傾向はあるのでしょうか?

高橋:一番強いのはロシアです。次に中国。三番手が日本ですね。

ーーロシアが強い理由は?

高橋:競技者が若いうちからやっているというのと、基礎技術が強いっていうところがありますね。アルゴリズムは基礎技術の方にあたるので、ロシアや東欧が全体的に強いですね。2016年に『AtCoder』で開催したデータだと、ロシア・中国・日本の順に参加人数も多くて強いですね。Googleが開催しているコンテストだとアメリカも上位に来ますが、全体を見てもポーランドやベラルーシ、ウクライナが結構多いです。アジアも、台湾や韓国、日本がそこそこ強いという数字になっていますね。

ーー現在、高橋さんはAtCoder(アットコーダー)という会社の社長でもあるわけですが、起業した理由について教えてください。

高橋:まず日本に、プログラミングコンテストを定期的にやっているところはなかったんですよね。当時、アメリカにサイトがあったんですけど、コンテストをする時間がバラバラだったりとかして、日本人が出づらいという状況でした。あと自分が英語全然できないんですね。それで、周りの人に勧めても、「英語だからやらない」って言うんですよね。僕はゲームをみんなで一緒にやりたい派なんですよね。だから自分でコンテストシステムを作って持とうっていうのは、大学生のうちから考えていて。一回コンテストの大きいので3位を取ってから、連載を持たせてもらったりとかして、コンテストの布教とかするのが楽しい、みんなに広めるのが楽しいという考えになっていきました。でも最初は会社を立てるというのは考えてなかったですね。

ーーシステムありきみたいな?

高橋:そうですね。システムだけ作って、それを適当に応用すればいいかなって思っていたんですけど。当時Web系のプログラミングを僕が全くやったことなかったんで、一から作るより誰かが途中まで作っていたそれを使った方がいいと思っていました。『@wiki』を運営しているアットフリークスという会社が、『AtCoder』というプログラミングコンテストのシステムを少しだけ動かしていたんですね。自分の知人が作っているシステムをそこで使っていると知っていたんで、「そのシステムを売ってくれ」みたいな話をしたんですね。そうしたら、アットフリークスの人に繋がれて、色々やった結果、「それ会社立てたほうがいいよ」という話になって。いつの間にか起業相談みたいな話になって、アットフリークスの中の学生さん3人くらい『AtCoder』側に来てもらって、4人で会社を立ち上げました。

「競技プログラムの会社の社長が最高ランクならかっこいい」

ーー高橋さんは競技プログラミングを開催する会社のトップでありながら、現役の競技プログラミングのプレイヤーでもあるわけですよね。それを続けている理由も教えてください。

高橋:そうですね。100%遊びじゃないですけど、遊び要素の方が大きいと思ってコンテストには参加しています。もちろん、僕が勝った方が会社の評判は上がると思いますし、業務としての部分がないわけではないですけれど、だから辛いとかそういうのはなくて、選手として出ればほんとうに楽しいからというのはありますね。プレッシャーも少し増えましたけど。競技プログラミングの会社で社長をやっていて、社長が最高ランクだったならかっこよくないですか? 僕はそういう「かっこいい」を目指しているので。

ーープログラミングコンテストは、参加人数が多い方がより楽しくなるのでは、と思います。現状での知名度やもっとその世界を広げるために何が必要だと考えていらっしゃいますか?

高橋:現状、情報系の大学の学部に入った学生には、『AtCoder』の知名度は高いと思います。一方で、高校生以下はまだ学部選択をしていないので知らない率が高いです。また、社会人の1、2年より上の層は競技プログラミングというもの自体がなくて、知らない人が多いですね。30代のエンジニアとか競技プログラミングって知らないんですね。また、情報系の大学以外だと知らないかもしれないな、と思っています。例えば、文系からSEになった人なども競プロを全然触れてこなかったというケースはかなり多いともいますし、とにかく知らない人が上の世代も下の世代も多いですよね。

ーーなるほど。とりわけ学生に知られることが大事なように感じます。

高橋:まず、下の世代に知られてほしいですね。若いうちからやっておくと、数学の楽しさがわかりやすいと思います。数学でログって習うじゃないですか? 指数対数の対数は、何に使うかいまいちわからないって感覚を持っている人がかなり多いと思うんですけど、競技プログラミングだとログがたくさん出てくる。コンピュータが二進数の世界なので、使い方がよくわからないツールが実用的に使って出てくるようになって楽しいっていう部分があるんですよね。なので、中学や高校の頃から競技プログラミングに触れておくと、数学的なのが楽しいって思って大学で情報系へ進路を決めるということになるのでは、と思っています。

ーー現状では開催されていないような内容のプログラミングコンテストのアイディアがあればお聞かせ頂ければと思います。

高橋:やってほしいのは、本当に世界一を決めるコンテストを『AtCoder』でやってほしいというところですね。今、各企業10社くらいが興味持って開いてくれているんですけど、就職目的なんですよ。ほとんどの企業が日本人向け、しかも学生向けってすごい絞った層になってしまっているので、もっとオープンな無差別級の大会をやってもらいたいとずっと思っています。例えば、世界から50人くらいを日本で呼び寄せますという感じのものを。何回かラウンドを重ねて、2000人から1000人、そこから300人になって、50人まで絞り込んだ人の決勝を日本で開催しますとなったなら、途中まで参加していた人も見に来てくれるだろうし、興味を持ってくれると思うんです。こういった世界大会は、GoogleやFacebookがやっています。今、各企業で英語のコンテストをすると約2000人集まる状態なので、『AtCoder』で世界大会を開いてほしいな、というのはありますね。

ーーちょっと『ドラゴンボール』の「天下一武道会」っぽいですね。

高橋:あと、ターゲティングをもっと狭くするのもやってみたいなって思っています。というのも、学生のコンテストはたくさんあるんですが、参加者がみんな同じになってしまうんですよね。なので、例えば地方限定とか、現状では男性率が非常に高いので、女性限定とか、そういったコンテストをやってみてほしいな、とも思います。そうすると、普段は来れない人や、上位向けではないコンテストになるんじゃないかな、と考えています。そういった多種多様なコンテストがどんどん開かれていって、ターゲティングが広いコンテストで上位を取ってもらえるようになってほしいですね。

ーー最後に、競技プログラミングに限らず、プログラムに関わる人にメッセージがあればお願いします。

高橋:もしプログラムを少しでも書けるなら、コンテストにぜひ参加してくださいということですね。一回くらいは競技プログラミングをやらないともったいないと思うんですよね。それで、どんな世界か体感してもらって、合わなければ合わないでよし、もし合うようならそのまま続けてくれれば。無料で参加できる上に解説生放送もやっていますし、かなりサポートもしているので、もっと多くの人にやってもらいたいですね。

ーーありがとうございました!

AtCoder
http://atcoder.jp/ [リンク]

―― 会いたい人に会いに行こう、見たいものを見に行こう『ガジェット通信(GetNews)』

  1. エイドリアン(70歳) ID:2Dfw5・01/24

    COBOLは高校の授業でやった。でも綺麗に忘れた…

このページのトップへ