こんにちは、ガルシュアです。
「競技プログラミングって言葉は聞いたことはあるけれど、中身は全然知らない。」
「競技プログラミングに参加するメリットって何?」
「レベルの高い人しか参加できないの?」
こんな疑問をお持ちではないでしょうか。
競技プログラミングの存在は知っているけれど、自分には縁遠いと思っている方もいるかもしれません。
しかし、競技プログラミングは初心者からプロのエンジニアまで一度は参加してほしいイベントです。
私の大学時代の先輩も「競技プログラミングのおかげで、周りに一流のプログラマと認められた」と豪語しているくらいです。
この記事では、競技プログラミングの概要、メリット等について解説します。
ぜひ最後まで読んで下さい。
【まず初めに】競技プログラミングとは何か
競技プログラミングとは、与えられたプログラミング問題に対して複数の参加者が一斉に解くイベントです。イベントに寄ってはプログラミングコンテストと呼ばれたりもします。
Google社主催のGoogle Code Jamをきっかけに、2018年頃から注目されるようになりました。主な特徴は以下の3つです。
- 初心者でも参加できる
- 評価基準がユニーク
- 数学の知識も求められる
初心者でも参加できる
競技プログラミングはプロのエンジニアだけでなく、初心者も参加できます。
出題レベルとしては以下のようなもの。
- 打ち込んだ文章をそのまま出力
- 整数の条件分岐
- バラバラの文字列をアルファベット順に並び替え
競技プログラミングは初心者の学習意欲を刺激する目的もあるのです。極端な話、文字列を出力できるコードが書けたら、競技プログラミングの出場権はあると思って良いでしょう。
評価基準がユニーク
競技プログラミングは、ただ問題が解けたら良いというわけではありません。正解コードを書く以外に以下の評価基準が設けられています。
- どれだけ速くコーディングできたか
- 成果物の実行速度、処理速度
特に実行速度は肝で、規模の大きい問題だと処理速度が遅いせいでマイナス評価をつけられます。アルゴリズムが優れていても実行速度の遅い言語を選んだら、上位入りを逃すリスクもあるでしょう。
解ければOKといかないのも、競技プログラミングのユニークな一面の一つです。
数学の知識も求められる
上位ランクになると数学の知識も影響してきます。なぜなら、数学力が無いとアルゴリズムを組み立てられなかったり、バグが発生するからです。
例えば、最適化問題の知識に乏しかったら、無駄なコードをかいて実行速度を落としてしまうかもしれません。
参加者の声を聞いても、上を目指そうと思うと数学は避けられないようですね。
競技プログラミング、最終的には数学に行き着くっぽいので戦略を練らなくては。目指すは赤、まずは橙って感じでリサーチしよ。
— 澤木星太(Seita SAWAKI) CEO (@DoItAllRightNow) November 28, 2018
コーディングだけでなく、数学力が試されるのでも競技プログラミングの特徴の一つと言えるでしょう。
【良いこと尽くし】競技プログラミングのメリット5つ
競技プログラミングの概要はなんとなく理解できたけれど、参加することでどんなトクがあるのかピンとこない方はいるかもしれません。
ここでは競技プログラミングをするメリットを5つ解説します。
競技プログラミングは本当に良いところしかない素晴らしい企画なので、じっくり読んで下さい。
- プログラミングのモチベーションが上がる
- プログラミングが早く上達する
- 就職・転職で有利に働く
- ソフトスキルが伸びる
- お金を稼げる
プログラミングのモチベーションが上がる
競技プログラミングに参加すると、勉強のモチベーションが上がります。なぜなら、多くの競技プログラミングのサイトでは、レベルごとにランク分けされているからです。
もちろん初心者だと下のランクになりますが、問題をクリアしていくうちに徐々に上位にランクインします。目に見えて自分の成長が分かるので、モチベーションが維持しやすいんですね。
競技プログラミングは成長を可視化してくれるので、モチベーションが保たれやすくなります。
プログラミングスキルが速く上達
競技プログラミングを続ければ、スキルが急速に上達します。
主要なサイトでは、数百題に及ぶ問題を出題しているので練習する分には申し分ありません。解答例も見られるので、自分へのフィードバックにもなります。
「解く→解答を見る→少しレベルの高い問題にチャレンジする」のループを回せるのでプログラミングが速く上達できるんです。
競技プログラミングは、学習意欲をうまく刺激してスキルアップさせる良くできたシステムと言えるでしょう。
就職・転職に有利
競技プログラミングで結果を出すと、就職・転職で有利に働きます。
代表例は、株式会社ドワンゴの「ドワンゴの挑戦状」という新卒採用企画。このイベントの上位入賞者は一次面接が免除される等、選考で優遇されます。
他にも競技プログラミングに協賛している企業からヘッドハンティングされることもあります。競技プログラミングの成績が即戦力の証になるので、就職・転職で優位に立てるでしょう。
ソフトスキルが伸びる
競技プログラミングでは、マネジメントやコミュニケーション能力などのソフトスキルも鍛えられます。
一日がかりの大規模な問題だと、チームを組んでコードを書かなければいけません。要件定義の進め方、コーディングの役割分担など、プロジェクトマネジメント力が求められます。
今の時代、コーディング力だけでは優秀なエンジニアと認められるのは難しいかもしれません。しかし、チームで成果を上げた経験があれば、企業でも活躍できるでしょう。
ソフトスキルを磨く経験として、競技プログラミングは最高の足場です。
お金を稼げる
競技プログラミングに参加すると、お金も稼げます。なぜなら、主要なイベントは賞金がでるからです。
世界で最も有名なプログラミングコンテストの一つであるGoogle Code Jamだと、優勝賞金はなんと1万ドル。他にも、ドワンゴからの挑戦状だと優勝したら10万円ゲットでます。
自分のプログラミングスキルが世に認められる上に、お金までもらえます。参加者とってこれほど嬉しいことはありません。
競技プログラミングにおすすめの言語6つ
「競技プログラミングのメリットは分かったけれど、どんな言語でもいいの?」
「言語によって有利、不利はある?」
こんな疑問を持っている方も多いと思います。
おっしゃる通りで、競技プログラミングはどんな言語でも良いというわけではありません。選ぶ言語によって優劣は出てきますし、初心者が結果を残すためにも言語選びは重要です。
ここでは競技プログラミングにおすすめの言語を6つ紹介します。それぞれに特徴があるので、自分に合った言語でチャレンジして下さい。
- C++
- python
- Java
- C#
- JavaScript
- Ruby
【競技プログラミング人気No,1】C++
競技プログラミングで圧倒的人気を誇っているのがC++です。なぜなら他の言語に比べて処理速度が速いからです。
競技プログラミングは処理速度も評価対象だと述べましたが、C++で実装しないとNGになるくらい大規模な問題も出てきます。また、解答例をC++で公開しているサイトも多いので、復習にも大いに役立ちます。
本気で上位ランクを目指したい方は、C++は外せない言語と言っていいでしょう。
ただし、C++はCの発展版言語なので難易度は高いです。プログラミング覚えたての初心者には不向きかもしれません。
【初心者におすすめ】Python
C++に次いで人気の言語がPythonです。言語自体がとてもシンプルで、初心者が最初にトライする言語としてもおすすめです。実際、アメリカでは子供のプログラミング学習で重宝されています。
AIの実装でも高い人気を集めているので、競技プログラミングをきっかけに勉強するといいでしょう。
ただし、処理速度が遅いので上位入賞を狙うのにはあまり適していません。
上位は目指していないけれど、競技プログラミングを通じてスキルアップしたい方に、Pythonはおすすめです。
Java
C++やPythonには及びませんが、javaで競技プログラミングに挑戦している方も多いです。これは、実務(特にandroidのアプリ実装)などでjavaを使っておられる方が多いからです。
仮想マシンが動く環境ならどんなPCでも動作するので、汎用性はピカイチです。C++と比べて速度が落ちるのが玉にキズですが。
競技プログラミングで上位を目指したいけれど、実務面でも役立てたいエンジニアにjavaはおすすめですね。
C#
C#はUnityでのゲーム開発やWindowsのアプリ制作でお世話になった方も多いでしょう。
Visual Studioという高機能な開発環境で実装できる上に、マイクロソフトが持続的に機能を追加しているので、使い勝手はどんどん良くなっています。
Cのようにポインタの概念もないので、Pythonと同様にC#は初心者がチャレンジするのに適している言語です。
JavaScript
Webページ制作などフロントエンドで力を発揮するJavaScriptですが、競技プログラミングで活用されている人も少なくありません。
一昔前のJavaScriptと言えば機能的にも他言語と比べて見劣りする部分は多かったです。しかし、最近はバージョンアップでPythonやRubyに引けを取らないくらい素晴らしいスクリプト言語に生まれ変わっています。
処理速度の面などで上位ランクを目指すには少し不向きかもしれませんが、手馴れた言語で挑戦したいという方はJavaScriptを使うと良いでしょう。
Ruby
日本人が開発した言語でも有名なRubyですが、競技プログラミングでも力を発揮します。
特徴は何と言っても記述量の少なさです。
書くのが楽しいプログラミング言語と言われるだけあって、文章を書くような滑らかさとシンプルさは絶大な人気を誇っています。
またRubyはJavascriptと同様のスクリプト言語なので、デバックの手間がかかりにくいことも魅力の一つ。
競技プログラミングで結果を出したいけれど、楽しみながらスキルを上げたい人にRubyはうってつけですね。
おすすめの競技プログラミングサイト2選
競技プログラミングに興味は湧いてきたけれど、どのサイトで練習すれば良いか迷っておられる方も多いでしょう。
ここでは、数ある競技プログラミングのサイトからおすすめを2つ紹介します。ぜひ自分に合うサイトで練習してください。
- AtCoder
- TopCoder
【日本語サイトの代表格】AtCoder
(引用|AtCoder日本語公式サイト)
初心者から凄腕プログラマまで万人におすすめしたいのがAtCoderです。
AtCoderは日本の競技プログラミング運営会社で、代表者の高橋直大さんも世界ランキングで上位に食い込む実力者。
特徴は豊富な過去問で、いつでも3000問以上の問題にチャレンジできます。
初心者専用のコンテストを実施するなど、プログラミングを始めたての人にもモチベーションアップの機会を設けています。
また、ランクが上がるとAtCoderの提携企業の求人に応募もできます。プログラミングの腕も磨いて就職・転職に役立てたい方は、ぜひAtCoderを利用してください。
TopCoder
(引用|TopCoder公式サイト)
TopCoderはアメリカのソフトウェア会社主催の世界最大規模の競技プログラミングサイトです。
世界中から腕に自信のあるプログラマが集まるので、レベルの高さも折り紙つき。
しかし、全ての問題が超難解と言うわけではありません。レーティングも7段階に分けられているので、駆け出しのプログラマでも十分挑戦できます。
ただし、使用言語が限られている、サイトが英語のみなど制約が多いのでご注意ください。
まとめ
いかがでしたでしょうか。
最初は競技プログラミングに尻込みしていた人も、チャレンジしたくなったのではないでしょうか。
くどいようですが、競技プログラミングはオリンピックみたいに、選ばれし者だけが集う大会ではありません。初心者から熟練のプログラマまで楽しめるイベントです。
ぜひこの記事を参考に、競技プログラミングで楽しく腕を磨きましょう。