「競技プログラミング」というものをご存知でしょうか?
競技プログラミングでは、プログラマーが数学などの出題課題を解くプログラムを正確に記述することを競い合います。
また、競技プログラミングにはオンラインゲーム的な要素も含まれていることから、「eスポーツ」と競技プログラミングが似ていると言われることもあります。
人気の高まりとともに、さまざまな競技プログラミング大会に世界中から多くの人々が参加して、腕試しをすることも増えました。また、その評価の客観性の高さから、採用の指標に使う企業も現れています。
今回は、そんな競技プログラミングの世界の一部を紹介していきます。
- もくじ
1.競技人口増加の「競技プログラミング」とは?
現在人気が高まっている競技プログラミングについて、概要や広まった背景について解説していきます。
競技プログラミングとは
「競技プログラミング」とは、プログラミングの能力や技術を競い合うコンテストの一つです。
大会では、参加者にコンピュータサイエンスや数学などをテーマにした同じ課題が出題され、この要求を満たすプログラミングを早く、正確に記述することを競います。勝敗判定にはオンラインの判定システムが採用されていることがほとんどです。
現在、世界中で多くの競技プログラミング大会が開かれています。レベルは易しいものから難しいものまで幅広く、規模も1日から数ヶ月にわたるものまでさまざまです。
参加する人は「競技プログラマー」と呼ばれることもあります。
競技プログラミングが注目される背景
競技プログラミングに注目が集まっている理由としては、インターネットやスマートフォンの普及により、アプリケーションを開発する人が増えてきたという背景があります。
また、慢性的に不足するIT人材を育成するために政府も本腰を入れ始め、小・中学校でもプログラミング教育が始まりました。
さらに最近では、後述する「PG Battle」など、初心者でも参加しやすい敷居の低い競技プログラミング大会も増えていることなどから、知的な趣味として楽しむ人が増え、裾野は着実に広がってきました。一部では「eスポーツ」のような盛り上がりを見せることもあります。
学ぶ「人」も「場」も増えて、その流れで「競技プログラミング大会」も頻繁に開かれ、注目が集まるようになりました。
2.世界三大競技プログラミング大会が有名
一口に競技プログラミングと言っても、ジャンルもテーマも幅広く、ゲームからAI、データマイニング、セキュリティなど、多岐にわたる大会が開催されています。
競技時間も2時間ほどの短いものから、数日、数ヶ月と長い時間をかけて競い合う長期戦まで、さまざまな形式があり、バラエティに富んでいます。
特に有名な大会を挙げるとすると「世界三大競技プログラミング大会」があります。
ロシア発祥の「Codeforces」、アメリカの「TopCoder」、日本の「AtCoder」の3つです。
Codeforces (ロシア発祥)
Codeforcesは世界で最も利用者が多く、レベル的に強い参加者が集まっていると言われています。Codeforcesには、参加者を能力別に分類したDiv1、Div2、Div3の三部門があり、自分が配属されたコンテストに参加できます。
TopCoder (アメリカ)
TopCoderは2001年から始まり、「世界最強プログラマー決定選手権」と言われるほど権威を持った歴史あるコンテストです。
競技プログラミングのほか、アルゴリズム、ソフト開発、UI/UXといったコンテストが用意されています。
競技プログラミングの主な種目には、問題のプログラム提出時間を競う「Single Round Match(SRM)」や、1~2週間という長期間にわたる戦いで、厳密解を求められない問題に対して近似解を求める「Marathon Match」などがあります。
たんにTopCoderと言うと、SRMを指すことが多いようです。
AtCoder (日本)
日本のAtCoderは、問題が日本語で提供されることもあり、国内で数千人が参加する人気の高い競技プログラミング大会です。
AtCoderには定期開催コンテストのほか、初心者/初級者向けの「AtCoder Beginner Contest」(ABC)、中級者/上級者向けの「AtCoder Regular Contest」 (ARC)、上級者向けの「AtCoder Grand Contest」 (AGC)などがあります。
AGCでは上位8名が「AtCoder World Tour Final」に進出できます。
ちなみにAtCoder代表の高橋直大氏は後述の2008年の「Microsoft Imagine Cup」アルゴリズム部門で3位、TopCoderのMarathon部門で世界2位に入賞するなど数多くの実績を残しています。
競技プログラミング大会に参加すると、コンテストの成績に応じて、自身のプログラミングの腕前を表す「レーティング」(数値)やカラーが付与されることがほとんどです。そのランクに基づいて、参加できるコンテストが決まることがあります。
AtCoderでは、一定以上のレーティングを持ち、名前が赤で表示される参加者は「レッドコーダ」と呼ばれ、参加者から尊敬を集めています。
「AtCoderランクとは」より引用
3.競技プログラミングに参加する3つのメリット
プログラミングに興味がある方は、競技プログラミングに参加してみてはいかがでしょうか。
参加するメリットについてご紹介していきます。
プログラミング能力が飛躍的に高まる
競技プログラミングは、自分のプログラミングスキルを判定できる場でもあり、ゲーム感覚で気軽に楽しみながら、自分の腕を試せる点も魅力です。
参加者と競い合うことで、実際に順位などから、自分の実力を客観的に把握でき、実力の度合いを可視化することができます。
また、スポンサーを通じて、賞金や賞品などが得られることも参加者にとってはうれしいポイントでしょう。
このようにまるでゲームを楽しむ感覚で、「飛躍的にプログラミング能力を高めることができる」ということが、競技プログラミング大会に参加する最大のメリットと言って良いでしょう。
プログラマーとして友人が増え、人脈が広がる
大会に出場することで、参加者のコミュニティの人脈を広げることができます。
また、その繋がりが、キャリアアップのチャンスになったりすることも。
最近では、リスキリングという言葉があるように、これまでプログラミングにあまり興味がなかった参加者が、新たなスキルとして習得しようというケースもみられるようになりました。
採用活動で利用できる
最近では、競技プログラミングの結果を採用の指標に使う企業も現れ、IT企業の採用担当者も注目するようになっています。
企業に就職や転職をする際に、競技プログラミング大会の出場歴や受賞歴があれば、そのスキルが認められ有利に働くこともあります。
たとえばAtCorderが運営する「AtCoder Jobs」では、AtCoderで評価されたレーティングを使って企業に応募できます。
水色コーダ(上位10%ぐらい)以上になると、就職にも有利だと言われるほどです。
AtCoder Jobsより
4.大手IT企業が主催する大会も登場
競技プログラミングがその注目度の高さから、著名なIT企業が主催することも多いです。例えば、「Facebook Hacker Cup」といった大会が有名です。
これらの大会は新聞・テレビなどで報道されるケースも見られています。この章では大手企業が主催する大会についてご紹介していきます。
Facebookは「Hacker Cup」を主催
Facebookが主催する「Hacker Cup」は2011年に始まった競技プログラミング大会。一部報道では、同社がトップクラスのプログラマを雇用する目的もあると言われています。
予選ラウンドでは、3日間で出題された4問のうち最低1問を解くとラウンド1に進むことができますが、少しずつ条件が厳しくなります。いくつかのラウンドを上位でクリアすると最終ラウンドに進出できる流れになっています。
賞金が高額と言われることが多いようです。
学生向ITコンテスト「Microsoft Imagine Cup」
学生向ITコンテスト「Microsoft Imagine Cup」は、2003年にMicrosoftがスタートさせた学生ITコンテストです。
ソフトウェアデザイン部門のほか、ビジュアルゲーミング部門、テクノロジービジネスプラン部門などいくつかの部門に分かれています。ソフトウェアデザイン部門は各国で予選を行い、優勝チームが世界大会に出場できます。
2005年には横浜市で世界大会が開かれました。
ユニークな団体戦でビギナーも参加しやすい「PG Battle」
「PG Battle」も国内で人気の高い競技プログラミング大会です。
PG Battleは、1チーム3名でプログラミングを競い合うユニークな団体戦の企業・学校対抗コンテスト。AtCoder社が問題を作成しています。
参加部門は高校・中学・小学校(その他スクール)、大学&大学院・高専・専門学校、企業の各部に分かれ、制限時間内で問題をコーディングして解いていきます。
オンラインでプログラムを提出する形式で、2022年は10月22日(土)に開催されます。
5.大会に参加する前に準備すべき3つのこと
競技プログラミング大会に参加したい!と感じた方は、大会に備えて準備をしておきましょう。
この章では、大会参加前にしておくべき3つのことを解説していきます。
大会で使えるプログラミング言語を確認しておく
はじめに、自分が参加したい大会で、どのプログラミング言語が使えるのかを調べておきましょう。
競技プログラミングでよく使われているのは、C++、Python、Java、C#、JavaScriptです。
各言語によって特徴があるため、まず、自身が仕事や趣味で日ごろから親しんでいる言語でチャレンジするのがベストでしょう。
C++
C++は現在、競技プログラミングの主流です。参加者の約半数はC++を使っています。AtCoderの解説もC++となっています。C++は記述しやすく動作が速いため、スピードと正確性が求められる競技プログラミングでは最大のメリットになります。
Python
Pythonの実行速度はC++に劣りますが、コードの記述が少なくてすむこともあり、人気がある言語です。AI開発に向いており、データ分析などでPythonを扱うシーンも多く、AI系の課題に強いと言われていることも人気の要因といわれています。
Java
Javaは汎用性が高く、根強い人気があります。言語ではC++の次に高速で、競技プログラミングに向いています。オブジェクト指向でコードが読みやすく、変更や修正が簡単にできるメリットもあります。
C#
Microsoftが開発したC#もオブジェクト指向で、Webアプリやゲームの開発がしやすいため使う人が多いようです。
JavaScript
JavaScriptはWeb上で動くスクリプト言語として使われますが、実行速度が遅いという課題があります。ただ初心者が学びやすく、Web開発に欠かせないため、ニーズが高いという背景があります。競技プログラミングにあまり向かないといわれることもありますが、ゲーム感覚で参加できる手軽さが好まれています。また、業務などでJavaScriptを使っているプログラマがスキルの底上げを目指し、上級者が「あえて」使用している事例もあるようです。
「過去問題」で練習をする
競技プログラミングでは、正確さとスピードが重視されますので、良い成果を出したいのであれば、やはりぶっつけ本番ではなく、事前の準備が大切になります。
チャレンジにあたり、大会サイトで公開されている過去問を実際に解いて出題パターンをつかんでおくと良いでしょう。
手を動かして問題を解いてみると、思わぬエラーが出ることもあります。慌てずバグをつぶしていく作業も本番では大切です。
参考書や参加者のSNSをチェックする
参考書を読んで、代表的なアルゴリズムを応用できるようにしておくと、問題解決の糸口に大いに役立つでしょう。基本的なアルゴリズムに改善を加えると、より高速に動くプログラムになることがあります。
このほか競技で優秀な成績を収めた参加者が発信しているSNSやブログをチェックしてみましょう。
具体的にどのように問題に取り組み、どう解決したのか? といった貴重な体験が書いてあるため、とても参考になります。
まとめ
競技プログラミング大会とは、プログラミングの能力や技術を競い合うコンテストの一つです。
競技プログラミングは「難しい」というイメージがあるかもしれませんが、実際は「楽しい」ことが多いようです。
最大のメリットはプログラミングスキルが飛躍的に伸びることにあり、プログラミングを学ぶモチベーションにもなり、自身のスキルアップにもつながります。
ゲーム感覚で楽しく競技に参加することで、現在の自分の実力を客観的に把握できるなど、メリットばかりなので、興味を持った方は、ぜひ参加してみてはいかがでしょうか?