競技プログラミングとは
Google系のAI開発企業として知られるDeepMind社の問題解決型AI「AlphaCode」が、競技プログラミングに挑戦して上位54%の推定ランクを達成したというニュースが話題になりました。
いよいよプログラマーの職までAIに奪われると感じた人もいるのではないでしょうか?
この記事では、競技プログラムとは一体何なのか、エンジニアにとってどんなメリットがあるのか、その始め方などについて解説していきます。
【参考】:マイナビニュース:DeepMindの問題解決型AIが競技プログラミングに挑戦、上位54%にランクイン
今話題の競プロとは
GAFAの一角、人気企業の技術面接ではアルゴリズムの問題が出題されます。アルゴリズムとは、問題解決を行うための手順や計算方法のことです。平たく言えば「やり方」のことです。
Googleが時々、検索アルゴリズムを変えているという話は有名ですが、それは「検索のやり方」を変えているということを意味します。
ここまで、アルゴリズムについてお話をしたのは、アルゴリズムが「競技プログラミング」(以下競プロ)と大いに関係しているからなのです。
競プロとは、アルゴリズムとプログラミングのスキルを競うプログラミングコンテストの総称です。
競プロではプログラミングの速さと正確さを競います。もちろんプログラミング技術は必要ですが、アルゴリズムに関する知見がないと、スピーディにプログラミングを行うことはできません。
与えられた課題に対して「いかに速く、いかに正確に」答えを出せるかを争うのが競プロです。
競プロはどこで行われているのか
競プロは、主にインターネットサイト上で開催されています。参加するために特に資格は必要ありません。プログラミングができる人であれば、誰でも競技に参加できます。競技といっても、競い合うという感覚は薄く、決められたルールに則って、出題された問題を解いていくだけですので、参加者の中にはゲーム感覚の人もいるようです。
競プロのメリットとデメリット
競プロについてSNSなどでは「意味ない」「無駄」「仕事に役に立たない」と言ったネガティブな見方が一部にはありますが、競プロには数多くのメリットもあります。ここでは競プロの「メリット」と「デメリット」について見ていきましょう。
競プロのメリット
競プロのイメージはつかめても、参加するメリットが分からなければ、参加してみようという気にはなれません。これから、競プロの主なメリットについて5つ挙げていきます。
1.プログラミング上達へのモチベーションになる
競プロは自身のプログラミングスキルを判定できる場でもあり、ゲーム感覚で気軽に参加できます。達成欲や名誉欲を刺激され、それが競プロ参加へのモチベーションにもなります。
2.速く正確にコーディングができるようになる
競プロではプログラミングの速さと品質(正解さ、実行速度)が評価基準となり、参加し続けることで自ずとプログラミングスキルが上がっていきます。
3.アルゴリズムについて学べる
競プロではクイズのような問題が出題されますが、その受験対策を行うことで自然にアルゴリズムについて学べます。
4.就職や転職で有利になる
企業の中にはプログラマーの採用試験で競プロの過去問、類似問題を出題しているところもあります。
また、企業が主催する競プロで入賞すると、その企業から仕事のオファーが来る可能性もあります。他、採用面接で趣味や特技などを尋ねられた際に、競プロについてアピールするとポイントが上がるでしょう。
5.収入を得られることがある
競プロでは上位入賞者に対して賞金が出ます。国際レベルの競プロ大会では100万円以上の賞金が出ることもあり、上位者は収入面のメリットがあります。
競プロのデメリット
ではこれほどメリットの多い競プロに対して「競プロは意味ない」「無駄」と考える人がいるのはなぜなのでしょうか?それは、次のようなデメリットを意識する人がいるせいではないでしょうか。以下、デメリットとなり得る点について挙げてみましょう。
1.習得できる知識、スキルに偏りがある
確かに競プロによってプログラミングスキルを高めることは可能ですが、プログラミングに要求される知識はアルゴリズムばかりではありません。プログラマーには言語スキル、ITの基本知識、一般常識、コミュニケーション能力、情報収集スキルなど、さまざまな知識やスキルが要求されます。
競プロで上位になったからといっても、必ずしも優秀なプログラマーとは呼べません。
2.実務能力は身に付かない
競プロで成果を出せたからといって、いきなり業務アプリを組めるわけではありません。業務システムの開発には業務知識、実務経験などが求められます。競プロで上位入賞して、自分は優秀なプログラマーなのだと勘違いをしてしまわないよう謙虚であることが大切です。
競プロの始め方
競プロは基本的にインターネット上で行われていますので、競プロのコンテストを主催している組織や企業のWebサイトを見つけるところからスタートします。
日本はもとより、世界中に競プロサイトがあります。語学力に自信のある方は、いきなり海外の競プロに参加しても構いませんが、まずは日本の競プロサイトで経験値を高めることをおすすめします。ここでは国内外のよく知られた3つのサイトを紹介します。
AtCoder
AtCoderは日本最大のプログラミングコンテストサイト(競プロサイト)AtCoder株式会社が運営しています。競技は毎週土曜日の21時からスタートしています。日本語と英語の選択が可能で、世界中から自信のあるプログラマーが5,000人前後集まり、腕を競い合います。
AtCoder社は就活支援も行っており、競プロを自社のリクルートで活用する企業も増えており、高額賞金が出るコンテストもあります。
【参考】:AtCoder公式サイト
JOI 日本情報オリンピック
日本情報オリンピック「JOI」は、高校生以下の学生や生徒を対象とする競プロの大会名称です。IOI「国際情報オリンピック」日本委員会が主催する「JOI」は、プログラマー日本一を決める大会であるとともに、IOI「国際情報オリンピック」の予選としての役割を担っています。
「JOI」を勝ち抜いた生徒は、日本代表選手としてIOI「国際情報オリンピック」に出場できます。この「JOI」は高校生以下の優秀な生徒の発掘と育成を目的としていますが、予選までは誰でも参加が可能です。
【参考】:日本情報オリンピック公式サイト
Google Code Jam
「Google Code Jam」は、Google社主催の国際的な競プロ大会です。「Google Code Jam」は5つのラウンドから構成され、ラウンドの通過ごとに賞金や賞品を獲得できます。コンテスト登録は16歳以上に限られます。また、最終ラウンドに出場すると、1位で15,000$(約180万円)の賞金を得られます。
【参考】:Google Code Jam公式サイト
競プロにおすすめの言語
読者の皆さんはどんなプログラミング言語を習得されていますか?世の中には実際に利用されているプログラミング言語だけでも250種類はあると言われていますが、競プロによって利用できる言語には制約があり、主催団体によっても差があります。
先ほど挙げたAtCoderの場合は、約30種類以上のプログラミング言語の利用が可能ですので、恐らく皆さんが学ばれている、あるいはこれから学ぶ予定の言語は網羅されているでしょう。ここでは、AtCoderで利用可能な言語の内、初心者の皆さんにはぜひ学んでいただきたい言語を紹介します。
以下は人気上位の言語3つですが、他にC言語、Ruby、C#、Haskell、Rustなども使用されています。
C++
競プロで最も人気が高いのはC++です。その理由は、C++は他の言語と比較して、処理速度(実行速度)が速いからです。
競プロの評価基準として、処理速度があります。C++を利用しなければ処理速度で圧倒的に不利となるような大規模処理の問題も出題されることがあるため、上位を争うレベルのプログラマーの多くがC++を選びます。
とはいえ、プログラミング初心者にとってC++はハードルが高いのがネックです。C++を扱うにはC言語の知識が欠かせません。そのため、学習時間や学習コストが余分に掛かります。C言語を習得しても、さらにオブジェクト指向、テンプレート、増えた予約語や型、例外処理など新たに覚える事が多いためです。
Python
皆さんお馴染みのPythonでも競プロに参加ができます。Pythonは機械学習や深層学習などAI開発向け言語のイメージがありますが、Webアプリ開発などでも利用され、平易な文法と汎用性の高さから人気の言語となっています。
またPythonは「ライブラリ」が非常に豊富なため、ライブラリを上手く活用することで、さらにプログラミングの工数を削減できます。
これからPythonを学ぶ方は、競プロを切っ掛けにして学ぶと良いでしょう。ただし、PythonはC++やJavaと比較して処理速度が遅いため、上位入賞を狙いたい人には向いていません。
競技プロにPythonで参加したい、Pythonを使用してアルゴリズムについて基礎や考え方を学びたいという方には、以下の書籍を紹介します。Pythonの例題も載っていますので一度手に取って見てください。
【参考】:Pythonではじめるアルゴリズム入門 伝統的なアルゴリズムで学ぶ定石と計算量
Java
JavaはOSに依存せず、あらゆる環境で動作が可能な汎用言語です。開発の際には開発ツールのJDK(Java Development Kit)を公式サイトからダウンロードして環境を構築します。
Javaのキャッチフレーズ「Write once, Run anywhere」は「一度書けば何処でも使える」という意味ですが、その通り、JavaはWebアプリからオンラインゲーム、スマホアプリ、家電などの組込アプリまで、さまざまな用途での利用が可能です。
競プロではJavaで参戦する人が多く、C++よりは多少速度は遅いもののPythonよりは速く、また汎用性に優れていることから、実務でも利用したい方にはおすすめの言語です。
趣味と実益を兼ねて競プロに参加してみよう
ここまで競プロについて解説をしてきました。競プロに対して興味が湧いた方もいらっしゃるでしょう。プログラミングの学習は、何か具体的な目的や目標がないと、なかなか続きません。そういう意味で、競プロは1つのモチベーションになるはずです。競プロによって、自分のレベルが分かり、またランクアップという目標もできます。
さらに、上位を目指せば賞金や賞品を得る事も可能であり、さらに希望する企業への就職、転職の機会も生まれるでしょう。参加費無料、オンラインで気軽に参加でき、ゲーム感覚で楽しめる「競技プログラミング」、ぜひチャレンジしてみませんか?
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから