初心者こそおすすめ!競技プログラミングの始め方

パソコンを持っている。プログラミングをやってみたい。でも、何から手をつけたらいいのかわからない……。そんな人に、おすすめの選択肢があります。競技プログラミングです。

競技プログラミングとは、出題されたプログラミング問題を解き、正解数やかかった時間などを競い合うコンテストのこと。自分のレベルにマッチした問題を解いていくことで、効率的にプログラミングのスキルを磨くことができます。

今回お話を伺ったのは、慶應義塾大学在学時にMicrosoft主催のプログラミングコンテスト『Imagine Cup 2008』で世界3位に入賞し、現在はプログラミングコンテストサイトの運営をしているAtCoder株式会社の代表取締役 髙橋直大さん。

髙橋さんに、プログラミングに出会ったきっかけや、競技プログラミングの魅力などについて聞きました。

肘を壊したことがきっかけで、プログラミングと出会った

image1

――高橋さんがプログラミングに興味を持ったきっかけは?

高橋:小さいころ家にコンピューターがあって、いじったりするのがちょっと好きでしたが、それ以上の興味はありませんでした。

プログラミングに興味を持つきっかけは、怪我をしたこと。僕は高校2年生まで野球部だったんですけど、高2の終わりごろに肘を壊して辞めることになったんです。

当時パソコン研究部の人と仲が良かったので遊びに行っていたんですが、その流れで高校3年生でプログラミングの大会に応募することになって。僕はプログラミングの経験なんてなかったんですが、他の人が誰もプログラムを組んでくれなくて(笑)。しょうがないから自分で勉強して組みました。

そうしたら決勝まで残って、うまいこといって、初めての大会で6位に入賞したんです。あ、プログラミング向いているじゃんって思って、そこから興味を持ってやりはじめました。

――その後、自分自身がプログラミングコンテストを開催しようと思ったのはなぜ?

高橋:もともと、Topcoderというプログラミングコンテストのサイトが海外にあったんです。高校3年生でプログラミングの大会に出場した後に見つけて、「これ、楽しそうだな」と思って始めたんですよね。

僕は1人でもくもくとやるよりも大勢でやる方が好きなので、高校の仲間とかには広めたんですけど、問題文が英語なのでそれ以上に広めるのがなかなか難しかったんです。「じゃあ、日本語のプログラミングコンテストを作れば、日本人でもやってくれるんじゃないか」と思って、プログラミングコンテストを開催したんです。

当時はそれほど大規模に運営することを考えていなかったんですけど、結果的に会社を立ち上げるくらいまで、規模が大きくなりました。

数学的な工夫をして、難しい問題を解く楽しさ

image1

▲オンラインで参加できるプログラミングコンテストのサイト「AtCoder」。「AtCoder Grand Contest」「AtCoder Regular Contest」「AtCoder Beginner Contest」「AtCoder Typical Contest」など、さまざまなスキルレベルの方に合わせたコンテストが定期的に開催されている。

――ちなみに、競技プログラミングってどういうものなのでしょうか?

高橋:競技プログラミングは、「〇〇を実現するコードを書いてください」という課題がいくつか与えられます。時間内にその課題に対して適切な処理を行うプログラムを組んで提出し、その正確さや速さを競うものです。

――魅力ってどんな部分ですか?

高橋:いくつかあるんですが、1つは出された問題をどうやって解決すればいいのか考えること自体が、そもそも楽しいことです。

難しい問題になればなるほど、それを数学的に工夫して「こことここの処理はまとめられる」「全部まとめて計算できる」「省略していい」とか、そういった処理を複雑に組み合わせなければいけません。もちろん、難しい。でも、うまく組み合わせることができて、答えが出たときは本当に楽しいです。

2つ目は、プログラムが完成するサイクルが早いこと。競技プログラミングのコンテストって、だいたい4〜6問くらいの課題が出されて2時間くらいで終わるんです。その細かいタスクをポンポンこなしていくことに、達成感があります。

3つ目はコンテストとしてみんなで競い合う形式だということ。「これくらいの順位を取りたい」っていうやる気が出ます。上位に入ると「やった!」という気持ちになれますし、下がると相当悔しいんですけど、そこで一喜一憂するのがまた楽しいですね。

――競技プログラミングに出会って、よかったことは何ですか?

高橋:ものごとを深く考えるようになった気がします。競技プログラミングって論理的に、「この問題にはどういう特性があって、どういうことができるか」をじっくり考えないといけません。

そうやって考える機会って日常生活においてそんなにないと思いますし、業務などでプログラムを書いていても頭に大きな負荷をかけることってそれほどないんです。自分の体感でしかないのですが、日常生活などでも前よりも深く考えられるようになったのかなと感じます。

ゲームを作るのは大変でも、競技プログラミングなら続けられる

image1

――プログラミングを始めたい方のなかには、少なからず「ゲームを作りたい」というモチベーションの方もいますよね。そんな方にも、競技プログラミングはおすすめですか?

高橋:おすすめです。僕も昔、ゲーム開発に興味があったんですけど、結局ほとんど作っていないんです。ゲームって作るのがめちゃくちゃ大変で。

僕が当時興味があったのはRPGゲームなんですけが、作るとなると、フィールド作って、歩くシステムや戦闘システムを作って、ストーリーを作って、絵を描いてと工程がすごく多いんですね。

それに、そこまで作ったところで、完成したものがドラクエなどの大作RPGと比べてどっちがいいかっていったら、そんなのドラクエの方が楽しいに決まってるじゃないですか(笑)。

――(笑)。

高橋:そう考えると、競技プログラミングって初心者にも向いています。自分にマッチした問題をポンポンやっていけば、どんどん成長すると思います。

それにコンテスト形式だと、みんなで一斉に出るからSNSなどで他の出場者とやりとりするのも楽しいです。しかも定期的にコンテストを開いていて、レーティングも出るので、自分の実力の変化がわかります。続けやすい要素がたくさんあるんです。

ちなみに、やっているひとはみんな「もっと早く始めればよかった」って言っています。たまに高校生とかが言っていたりすると、「それは違う。充分早いでしょう」と思いますけど(笑)。

世界中に、AtCoderを広めたい

image1

――今後、やっていきたいことはありますか?

高橋:今はまだAtCoderの外国人の参加者が少ないので、どんどん増やして、世界一のプログラミングコンテストにしたいと思っています。手前味噌ですが、うちのコンテストって良問を揃えているんです。世の中にあるコンテストと比較しても、問題の質でいえばダントツで1位だと思っています。

――質の高い問題を提供できているのはなぜですか?

高橋:実は社内に、僕だけではなくてもう2人競技プログラミングがめちゃくちゃ強いメンバーがいるんです。彼らは、Google競技プログラミングコンテストや、TopCoder Openという特に優れた者だけが参加を許されるコンテストで優勝した経験を持っています。世界トップクラスの競技プログラマーが揃っているんです。そのメンバーが問題の良し悪しを確認して、投稿された問題を選定しています。

――それならば、良質な問題がたくさん揃っているのも納得ですね。

高橋:その問題を、世界中の人たちにどんどん提供していきたいです。そして、競技プログラミング経験者も、プログラミング初心者も、楽しめるコンテストにしていきたい。競技プログラミングに親しんでくれる人を、世の中にもっと増やしていけたら嬉しいです。

取材協力:AtCoder株式会社

この記事が気に入ったらいいね!しよう

いいね!するとi:Engineerの最新情報をお届けします

プライバシーマーク