IT プログラミング エンジニア 就職・転職

競技プログラミングは意味ない?メリットと始め方入門・問題集・勉強本紹介

競技プログラミング

競技プログラミングってやっても無駄なの?

競技プログラミングを始めたい。

競技プログラミングの問題はどんなものなのだろう?

競技プログラミングをするためのサイトや役立つ本を知りたい。

今回はそんなことを考えている人向けの記事です。

どうも!エンジニアの てぃかし です。

プログラミング好きな人、プログラミングスキルを高めたい人は、競技プログラミングはおすすめです。

今回は、

  • 競技プログラミングのメリットや始め方
  • 競技プログラミングで使われる言語
  • 競技プログラミングをする人のおすすめサイト・本

などについて解説・紹介します。

競技プログラミングとは?

競技プログラミングとは、プログラミングコンテストで行われる競技の一つです。略して「競プロ」と呼んだりもします。

出された課題を解決するプログラムをいかに早く正確に記述するかを競います。

競技プログラミングは、世界中で開催されています。

競技プログラミングでは、1回のコンテストで複数の問題が出題されることが多く、最も正解数が多い人が勝ちです。

正解数が同じ場合は、早く完成した人が勝ちです。

競技プログラミングは、Web上で開かれることがあります。例えば、AtCoderというプログラミングコンテストを開催するサイトで参加者を募り、開催されています。

AtCoderの参加者は1万人以上です。日本のITエンジニアは120万人ほどいますが、それを考えると、エンジニアでも競技プログラミングに興味がない人も結構いるようです。

競技プログラミングは無駄?意味ない?

無駄な努力

エンジニアのほとんどが競技プログラミングには参加していない現状ですが、競技プログラミングは無駄なのでしょうか?

結論を言うと、もちろん、無駄ではありません。

しかし、実務でプログラミングを仕事にしている人からすると「意味がない」と感じる人もいるのは事実です。

その理由は、実務では、プログラミングの技術だけがあれば良いという訳ではないからです。

実務では、エンジニアが作ったものを誰かが利用する目的がありますが、競技プログラミングでは基本的にそういった目的のあるプログラムを作りません。

競技プログラミングでは、早く問題を満たすプログラムを作ればOKです。

言ってしまえば、動くものを早く作れたら良いのです。

実際の仕事では、動けばいいってものではなく、開発の途中で、他部署や顧客とコミュニケーション・試行錯誤を重ねて、プログラムが出来上がっていきます。

多くの人を巻き込んで仕事を遂行していく能力が必要です。

対して、競技プログラミングは、一人で動くものを作れたらOKというとてもシンプルなものです。

以上のことから、競技プログラミングを極めても無駄、意味がないと言う人がいます。

たしかにそれは一理ありますが、個人的には、意味はあるし、無駄ではないと思います。

実務で行うプログラミングも、競技プログラミングも根本的にはプログラミングです。

競技プログラミングに参加することで、プログラミングスキルが向上し、そのスキルは実務でも活かされます。

競技プログラミングのメリット

競技プログラミングのメリットは、どんなものがあるでしょう?

プログラミングスキル向上

まず、先ほどもお伝えしましたが、競技プログラミングは、プログラミングスキル向上に役立ちます。

提示された問題について、素早くプログラミングで解決できる能力は、実務でも必要です。

自分が作るだけでもスキル向上を見込めますが、競技プログラミングには対戦者、他の参加者がいます。

その方達が記述したプログラムも見れるので、色んなパターンを学べます。

自分が数十行で作ったプログラムも、見方を変えれば、数行に短縮できることなんてプログラミングの世界ではざらにあります。

就職・転職のアピール材料の1つになる

競技プログラミングの結果は、就職や転職のアピール材料の1つになります。

エンジニア未経験者であれば、参加したことがあるというだけでもプログラミングに対する興味をアピールできます。

就職や転職の選考では、エンジニア未経験者は、まずプログラミングの素養があるか、本当にプログラミングが好きかを見られます。

それだけでなく、企業が競技プログラミングを実施しているパターンもあり、それに参加すると選考に繋がるケースもあります。

例えば、株式会社ドワンゴでは、競技プログラミングが開催されています。

ドワンゴからの挑戦状

2020年度ドワンゴ新卒採用における面接パス権の進呈をかけた「ドワンゴからの挑戦状」というタイトルの競技プログラミングが開催されました。

プログラミングの正確さとアルゴリズム力を競います。

このドワンゴの競技プログラミングの様子は、ニコニコ生放送でもお届けされています。

ルール、賞金は下記のようになっています。

●ルール

個人戦の競技形式です。競技開始と同時に、複数の難易度の問題が提示されます。参加者はその問題を自由な順序で解いていきます。回答の正確性と、提出までにかかった時間により得点がつけられ、合計得点によって順位を付けます。

●賞金

優勝:   100,000円
2位:    70,000円
3位:    50,000円
4位:    30,000円
5位:    20,000円

新卒採用だけでなく、企業から仕事をもらえる可能性もあります。

例えば、世界でも認知されているGoogle Code Jamのプログラミングコンテストで入賞したら、注目されて仕事を任せてもらえるといったケースもあります。

人脈が広がる

競技プログラミングをすると、人脈も広がります。

競技プログラミングには同じような志をもったエンジニア・プログラマーが参加しています。

競技プログラミングは、その人たちと意見を交換する機会や考え方を聞けるコミュニティの役割も担っています。

先輩エンジニアの話を参考にすることもできます。

このように、ITエンジニア・プログラマーとして仕事をしていきたい人は、競技プログラミングをするメリットは大いにあると言えるでしょう。

競技プログラミングの始め方(入門・初心者向け)

競技プログラミングを始め方はまず、競技プログラミングのサイトに登録をしましょう。

英語の競技プログラミングサイトもありますが、まずは日本のサイトで始めましょう。

おすすめは、AtCoderです。

AtCoder

AtCoderでは、リアルタイムでオンラインのコンテストで競ったり、3,000以上の過去問にいつでもどこでもチャレンジすることができます。

AtCoderに登録したら、「AtCoder Beginners Selection」にチャレンジしましょう。

初心者向けの問題集です。

競技プログラミングにおいては、C++から始めるのがおすすめです。理由は、AtCoderに参加している人の半数ほどはC++を使っており、プログラムの解説もC++だからです。

こだわりがあれば、他の言語でも良いです。

初心者かつ、C++から始めてみようと思う人は、AtCoder Programming Guide for Beginnersで、C++の勉強をしましょう。

AtCoderの使い方

AtCoderにある問題をこなすことでプログラミングスキルの向上を見込めますが、AtCoderはただ競技プログラミングをするだけのサイトではありません。

色んな問題、コンテストにチャレンジしたければ、コンテストの一覧があるページを見てみましょう。

就職をしたい人、あるいは、採用をしたい企業の担当者の人は、AtCoderJobsを使ってみましょう。

AtCoderJobs

AtCoderJobsは、AtCoderで評価されたレーティングを使って企業に応募できるサービスです。

AtCoderで出した結果がそのまま企業が評価できるようになっており、採用につながります。

新卒だけでなく、中途採用、インターン、アルバイトも対象となっています。エンジニア志望の大学生には特におすすめですね。

他には、「アルゴリズム実技検定」があります。個人向けというより、法人向けのサービスです。

アルゴリズム実技検定

IT人材の明確な評価指標となり、能力開発に役立ちます。

競技プログラミングの言語

競技プログラミングでよく使われるプログラミング言語は、

  • C++
  • Python
  • JavaScript
  • Java

です。

おすすめは、C++、Pythonです。

もちろんそれ以外のプログラミング言語でも問題が解決できればOKです。

C++

C++は競技プログラミングのメインとなる言語です。

先ほどお伝えした通り、C++は、AtCoderを利用している人の半数が使っており、問題の解説もC++で書かれています。

なので、競技プログラミングを本気で取り組んでいきたい人は、おすすめです。

C++の特徴としては、高速処理が可能であることです。特に組み込み系やゲーム系のプログラマーがよく使います。

Python

Pythonで競技プログラミングに参加する人もいます。

パイソンはコードの記述量が少ないので、学習がしやすいです。

プログラムを書く量が少ないので、結果的に問題を解くスピードも早くなります。

JavaScript

JavaScriptは、世界的にみても仕事の数が多いです。

個人的には、潰しが効くプログラミング言語だと思います。

Webサイトの動きを表現する言語なので、学んでいて楽しいです。

ですが、記述量は比較的多めです。

Java

Javaは、現状の日本において最も案件数が多いプログラミング言語です。

実行速度も速いので、速さを要するシステムにもよく活用されています。

記述量は比較的多めです。

競技プログラミングの問題例

競技プログラミングの問題のイメージがつかない人は下記の問題をご覧ください。

競技プログラミング問題例

これは最も簡単なレベルです。

このような問題を複数こなしていきます。この問題の解答例は下記のような形で各言語でまとめられています。

競技プログラミング解答例

他の言語の解答例を見たい人は、こちらのページをご覧ください。

競技プログラミングのレベル

競技プログラミングはレベル分けされています。

例えば、AtCoderなら、色によってレベルが分かれています。

灰色、茶色、緑色、水色、青色、黄色、橙色、赤色

の順で分けられています。

灰色は参加したら誰でもなります。

茶色は未経験エンジニアのレベルの域です。

緑色、水色は、実務で仕事ができるレベルです。

青色は、社内でトップを張れるエンジニアのレベルです。

黄色以上は、スーパーエンジニアです。お目にかかることはそうないでしょう。

下記のグラフはRatingの分布図です。

 AtCoderのRating分布

だいたいの目安として、

小学生(入門者)は茶色を目指しましょう。

中学生(未経験者)は緑を目指しましょう。

大学生(プログラミング経験者)は水色を目指しましょう。

社会人(実務経験者)は、青色を目指しましょう。

競技プログラミングで使われる英語の意味

日本用に作られた競技プログラミングサイトなら理解できますが、英語圏向けに作られた競技プログラミングサイトにチャレンジしたい人は、その中で使われる英語の意味も理解しておきましょう。

よく使われる英単語をまとめてくれている参考になるサイトがあります。

そのサイトから一部引用したものが下記の英単語です。

absolute : 絶対の( absolute error は絶対誤差, absolute value は絶対値)

ascending order : 昇順

assign x to y : xをyに代入する, xをyに割り当てる

adjacent : 隣の

adjacency matrix : 隣接行列

appear : 登場する

append x to y : xをyに付加する, 足す

area : 面積

array : 配列

at most K : 最大でK

axis : 軸 (x-axis はx軸)

binary : 二進数の

binary search : 二分探索

brute force : 全探索

calculate : 計算する

cell : 小区画

character : 文字

contiguous : 隣接した, 連続する

column : 2次元配列などの列

引用したサイトは、「これだけ覚えれば十分闘える!〜英語表現精選100個〜」です。

競技プログラミングおすすめサイト

競技プログラミングをするのにおすすめなサイトをまとめておきます。

  • AtCoder
  • Codeforces
  • Topcoder
  • yukicoder
  • ACM-ICPC
  • パソコン甲子園

AtCoder(アットコーダー)

AtCoderについては、前半の方でもお伝えしましたが、日本のオンラインで参加できるプログラミングコンテストのサイトです。

日本語、英語に対応しているので、最初に始めるならAtCoderがおすすめです。

Codeforces(コードフォース)

CodeForces

Codeforcesは、競技プログラミングコンテストを主催するロシア発祥のサイトです。

MikhailMirzayanovが率いるITMO大学の競争力のあるプログラマーのグループによって運営されています。

ロシア語、英語に対応しています。

Topcoder(トップコーダー)

topcoder

Topcoderは、競技プログラミングおよびソフトウェア開発のクラウドソーシングを行うアメリカのサービスです。

参加者同士に同一のプログラミングの問題を出題し、より早く最適解を出すプログラムを記述することを競います。

使えるプログラミング言語は、Java、C#、C++、VB.NET、Pythonです。

yukicoder

yukicoder

yukicoderは競技プログラミング・アルゴリズムを 練習する目的のサイトです。

競技プログラミングの模試、勉強会に参加できます。

競技プログラミングの練習として、回答する人と出題する人をつなぐサービスです。

問題を解くことも、投稿することもできます。

ICPC 国際大学対抗プログラミングコンテスト

ACM-ICPCは、コンピュータープログラミングにおける勝ち抜き型のコンテストです。

ACM とは、Association for Computing Machineryのこと。ICPCとは、International Collegiate Programming Contestのことです。

ACMがICPCを実施しています。

世界各国でプログラミングコンテストの予選が行われます。

3人1組のチームとなり、学生が競技プログラミングで競います。

パソコン甲子園

パソコン甲子園

パソコン甲子園は、コンピュータ理工学が専門の会津大学等によって運営されているICT分野の全国大会です。

高校生と高等専門学校生がプログラミングや情報処理技術におけるアイデアを競い合います。

参加生徒のスキルアップを図り、情報化社会を支える人材の裾野を広げることを目的としています。

高校生の人やこれから高校生になる人は、パソコン甲子園を目指してみてはいかがでしょうか?

競技プログラミングおすすめ本

競技プログラミングをしたい人向けのおすすめ本を紹介します。

  • プログラミングコンテストチャレンジブック [第2版] ~問題解決のアルゴリズム活用力とコーディングテクニックを鍛える

  • 最強最速アルゴリズマー養成講座

  • プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

  • 世界で闘うプログラミング力を鍛える本 コーディング面接189問とその解法

5chの競技プログラミングにはまるプログラマのスレ

競技プログラミングの話や噂をしたい人、聞きたい人は、5chの「競技プログラミングにはまるプログラマのスレ」を息抜きに見てみると良いかもしれません。

同じように頑張っている人も見つかって共感できるかもしれません。

ということで、今回は競技プログラミングについて解説しました。

競技プログラミングは、実務に直結しないという意見もありますが、実務でどれだけ活躍してくれるかを測ることができるものです。

特に学生は、積極的に参加すると、後々の就職活動で大きなアピールポイントとなるでしょう。

まずはAtCoderからやってみましょう!

これからエンジニアを目指す方は、本ブログのエンジニアになるためのロードマップもご参考ください。

エンジニアになるための完全ロードマップ①
【初心者必見】プログラミング学習前にやることは?【エンジニアロードマップ①】

エンジニアに興味のある人 将来、高収入でリモートもできそうな仕事をしたい。 IT系のエンジニアってどうなのかな? エンジニアになるには何から始めたらいいのだろう? 独学でいいのかな?プログラミングスク ...

続きを見る

YouTubeもやっています!エンジニア関連の動画は下記からご覧ください。

エンジニア系動画はコチラ

YouTubeでも役立つ情報を配信しています!

ボタンをクリックしてチャンネル登録お願いします!

-IT, プログラミング, エンジニア, 就職・転職
-, , , , , , , , ,

© 2022 てぃかしのブログ Powered by AFFINGER5