競技プログラミング入門!おすすめ言語は?初心者必見徹底解説!

プログラミング
競技プログラミングとは、参加者に対してプログラミングの問題が出題され、より早く正確に回答することを競い合うコンテストのことです。
アルゴリズムなど数学、コンピュータサイエンスに関する出題が多く、オンラインジャッジなどにより採点されます。

競技プログラミングに参加するメリット

競技プログラミングに参加するメリットとは、どんなことでしょうか。数多くのコンテストが開催されていますので、メリットも多いはずです。

他人の書いたプログラミングを学習できる

競技プログラミングコンテストでの問題はみんなで同じですが、回答はそれぞれ違います。
通常コンテストでは、参加者のコードが公開されたり、ブログで回答が掲載されたりします。

プログラミングを学習する上で、他人のコードを見ることは大変勉強になりますが、通常業務では、このような機会はあまりないので、新たな発想や気付きが生まれるのです。

プログラマーと知り合いになれる

プログラミングを学習している仲間を見つけることができます。
知り合った仲間と、勉強会やコミュニティに参加することで、初心者で分からないことなどがある場合も、いろいろ相談に乗ってもらえるかもしれません。

楽しみながらプログラミングの勉強ができる

初心者のうちは、プログラミング言語の習得で精一杯かもしれませんが、ある程度分かってくると、次にチャレンジしたいことを見つけたくなるものです。

そういった意味でも競技プログラミングに挑戦することはうってつけです。

実際に初心者でも学習しやすいPythonを入門として学習してから、競技プログラミングにチャレンジする人も多く、
コンテストでは、結果がランク付けされ、自分がどのくらいのレベルなのか示すことができます。

モチベーションの向上

モチベーションの向上のため、競技プログラミングにチャレンジするという方もいます。

コンテントの中には、世界大会の開催やテレビ放映があったりするものもあります。
上位に入賞できれば、相当な名誉を得られるため、情報系の大学生、コンピュータ系のサークルの人、数学とプログラミングが得意な高校生や中学生、プログラミングが趣味の方など、大勢の方がチャレンジします。

先ほど申し上げた通り、初心者がプログラミング言語の到達度確認のためにも使えますし、AO入試のためのアピールポイントにもなります。
将来の仕事獲得にも役立ちますし、自分のレベルを世界的に示すことができるのです。

また、競技プログラミングコンテストの中には、求職者や転職希望者向けの求人の紹介が行われているところもあります。
世界規模の競技プログラミングコンテストに参加すれば、海外のプログラミング仕事を獲得することも、決して難しいことではありません。

競技プログラミングのジャンル

競技プログラミングのジャンルには、「アルゴリズム」「ゲームAI」「セキュリティ」「データマイニング」などがあります。代表的なものは、「アルゴリズム」で数学系の問題が出題されます。

競技プログラミングの主なコンテスト

 

競技プログラミングの主なコンテストについて説明します。コンテストは国内、海外と多数ありますが、有名なものについて説明します。

TopCoder(トップコーダー)

まず初めに紹介するのは、「TopCode(トップコーダー)」です。

米国のアピリオ(Appirio)社が運営する世界最大規模の競技プログラミングコンテストです。
有名な競技プログラミングコンテストと言えば、初めにTopCoderの名前が挙がるくらい有名です。

問題文は英語ですが、毎月定期的(毎月3回)に開催され、挑戦者の実力に応じて色分けされたランクが表示されます。
初心者からグレーコーダー、グリーンコーダー、ブルーコーダー、イエローコーダーとレベルが上がり、最高レベルはレッドコーダー呼ばれます。

レッドコーダーはエンジニアとしての実力の証となり、有名IT企業からオファーを受ける場合もあります。
開催されている種目は、アルゴリズム、デザイン、開発など多岐に亘ります。

https://www.topcoder.com/community/competitive-programming/

AtCoder

日本の会社であるAtCoder株式会社が運営するプログラミングコンテストです。
多くのプログラミングコンテストが英語のサイトである中、日本語で回答できるので入門編としては参加しやすいコンテストになります。

AtCoder株式会社は、世界トップクラスの競技プログラマー高橋直大氏が運営している会社になります。
高橋直大氏は、TopCoderやICFP Programming Contestなどで世界1位や2位に何度が輝いたことのある世界トップの競技プログラマーの一人です。

毎週定期的にコンテストが開催されており、最近では、ディスカバリーチャンネルでも放送される「DISCO presents ディスカバリーチャンネル コードコンテスト2017」や「CODE FESTIVAL」が開催されています。

https://atcoder.jp/?lang=ja

yukicoder

日本の競技プログラミングサイトで、初心者向けのコンテストをご紹介します。

「yukicoder」は、競技プログラミングも行っていますが、TopCoderのような世界的に有名なコンテストに挑戦するための模試や勉強会として利用することができます。
競技プログラミングの入門コンテストといった位置付けになっています。学生が普段の練習の時に、この「yukicoder」をよく使うという話はよく聞きます。

レベルは、星1つから星5つまでに分かれており、毎週定期的にコンテストが開催されています。
また、学習用としてよくある基本的な練習問題が掲載されていますので、初心者が基礎力をつけるのに適しているサイトになっています。

https://yukicoder.me/

ICFP Programming Contest

「ICFP Programming Contest」は、国際関数型プログラミング学会が主催する競技プログラミングの世界大会です。
競技プログラミングコンテストとしては、世界最大級のものになります。

毎年夏に定期的に開催され、72時間で難問をぶっ続けで解かなければなりません。
このICFP Programming Contestには、日本人のチームも多数出場しており、過去に多数上位入賞を果たしています。

プログラミング言語は、C++、Java、Python、Rubyなど何でも利用可能です。プログラムの動作環境にも特段制限はなく、AWS(Amazon Web Services)のようなクラウド計算機環境を利用することも可能です。

また、チームの参加人数に制限はありません。
72時間ノンストップなので、チームの誰がどのタイミングで睡眠をとるかという戦略も必要なのです。

https://icfpcontest2018.github.io/

その他の競技プログラミングコンテスト

その他、多数の競技プログラミングコンテストがありますが、そのうち幾つかをご紹介します。

・「日本情報オリンピック」
情報オリンピック日本委員会が主催する国際情報オリンピック(IOI)に日本代表選手を選考するための競技プログラミングコンテストです。
数理情報科学の能力を競う問題が出題され、与えられた課題に対してアルゴリズムを設計し、プログラムとして実装します。
毎年、予選が12月、本選が2月に開催され、3月に1週間程度の合宿もあります。

・「国際情報オリンピック」
国際情報オリンピックは、世界80ヵ国の高校生が集まり、プログラミミングを競い合う大会です。
日本情報オリンピックで選ばれた代表者が出場できます。
テストは、2日間で1日3問ずつ出題される形式です。
採点は、コンピュータによって行われ、実行時間やメモリの制限がある中で出場者が回答します。
なお、2018年9月の国際情報オリンピックは、日本のつくば市で開催される予定です (IOI 2018 日本大会)。

・「Google Code Jam」
Googleが主催する競技プログラミングコンテストです。
Google Code Jam (GCJ)では、同時に分散処理の競技プログラミングコンテストであるDistributed Code Jam (DCJ)も同時に開催されます。

競技プログラミングで、おすすめのプログラミング言語は?

 

競技プログラミングの利用するプログラミング言語として、従来はC++やJavaを使う人が多かったのですが、最近はPythonを使う人が増えています。
Pythonは最近、人気が急上昇している言語です。AIやデータマイニングの分野でPythonが良く使われており、更に初心者にも学習しやすいといった特徴があります。入門としておすすめ言語なのです。

競技プログラミングおすすめ言語:C++

C++は、競技プログラミング定番と言える言語です。
企業システムの利用も多い言語になりますので、実際のシステム開発業務でも大変役に立ちます。競技プログラミングは学生が挑戦することが多いですが、将来社会に出た後も役に立つ言語です。

また、どの競技コンテストサイトでもC++で回答することができます。
修得までに時間が掛かるかもしれませんが、汎用的に競技プログラミングで使える言語になります。

競技プログラミングおすすめ言語:Python

現在大変注目を集めている言語は、Pythonです。
AI(人口知能)やロボット、ビッグデータ解析などの開発で用いられることが多く、最近注目の言語です。

Pythonで回答可能なプログラミングコンテストも非常に多くなっています。
Pythonのコードは非常にシンプルですので、初心者にも大変オススメな言語で、汎用性の高い言語です。

また、Pythonは標準で多くの有用なモジュールが搭載されており、競技プログラミングで出題される数学系の問題にも十分対応できます。
初心者用でありながら、高度な問題にも対応できるのです。

競技プログラミングおすすめ言語:Java

Javaは世界で最も使われている言語とも言われていますが、C++と並んで、競技プログラミングでもよく利用される言語です。
仕事で使っていて慣れている人が多いので、Javaを選択する人も多いようです。

また便利なメソッドが標準で利用できるので、役に立ちます。C++よりとっつきやすいので、選択している人も多いので、挑戦しやすい言語の1つです。

競技プログラミングを学ぶおすすめサービス

最後に紹介したプログラミング言語を学ぶ上でおすすめの学習サービスについて、簡単にご紹介します。
利用を検討している方は、各サービスの価格や待遇など、自分に合ったサービスを利用しましょう。

サービス名 運営会社 公式サイト
TECH::CAMP 株式会社div https://tech-camp.in/
TECH BOOST 株式会社Branding Engineer https://tech-boost.jp/about/
侍エンジニア塾 株式会社侍 https://www.sejuku.net
Umedy Umedy.inc https://www.udemy.com
TechAcademy キラメックス株式会社 https://techacademy.jp
Aidemy 株式会社アイデミー https://aidemy-premium.net

 

競技プログラミング:まとめ

これまで競技プログラミングについて説明をしてきましたが、いかがだったでしょうか。
競技プログラミング入門として、様々なコンテストやおすすめするプログラミング言語について解説しました。

競技プログラミングコンテストの参加を目標として、プログラミングの勉強を始めてみてはいかがでしょうか。
2020年度からは学校でプログラミング授業が始まります。多くの学生達がプログラミングを身近に感じる時代がやってくるのです。