こんにちは。侍エンジニアブログ編集部のゆってぃーです。
「自分の実力を測りたい!」スキルを覚え、こんな事を思う人は多くいると思います。
自分が今、どのくらいのスキルなのか気になるのは当然のことですね。自分のスキルを測る方法として「コンテスト」があります。初心者の人にとっても、コンテストに出ることを目標にしている人はいるのではないでしょうか?
そこで、今回はプログラミングのコンテストはどんな物があるのかを紹介します。
初心者がプログラミングコンテストに出るメリット
課題を見つけられる
プログラミングのコンテストは、色々な種類があります。一般的なコンテストでは、全員が与えられた同じ課題をこなすために、プログラムを組んでいきます。
コンテストでは、他の人と競い合うことで自分の実力を計ることができます。なかなか、プログラミングを競い合う機会はないので、楽しみながら実力が計れることはコンテストの魅力ですね。
コンテストの中には、プログラミングがものすごく早い人がいます。そこで、「なぜあの人はあんなに早くプログラミングを行うことができるんだろう」と考えることで、自分との違いや課題を見つけることが出来ます。
作品出展型のコンテストでは、業界の識者が自分の作品を評価してくれるため、自分では気付かない視点で問題点や強みを知ることが出来ます。他人から見て、自分はどのくらいのスキルがあるのか、何が足りないのかを把握することでさらなる成長に繋がります。
柔軟な発想が得られる
仕事であればエラーのないプログラムを作成すれば良いですが、コンテストでは如何に早く課題をクリアするかが求められます。普段と違う発想が必要になるため、様々な視点から課題を考えることができ、必然的に柔軟な発想力が鍛えられていきます。
また、コンテストでは優秀なエンジニアの作品を識者が解説してくれます。なかなかプログラムを解説付きで紹介してくれる機会はないので、優秀なエンジニアの考え方や技術を得ることが出来るチャンスです。
そこで自分との違いや考え方を取り入れることで、自身のスキルアップに繋ぐことが出来ます。
人脈を広げられる
コンテストの参加者とコミュニケーションを積極的に取ることで、色々な人脈を作ることが出来ます。同じ考えを持った仲間の様々な価値観に触れることで、自分にあったキャリアパスが見つかるなど新たな可能性が生まれることもあります。
その中で「共同開発」や「スキルの共有」など、今までにない経験をすることも可能になります。また、自分の作品を評価してくれる企業があれば、スカウトなどキャリアアップの可能性もあります。
人脈次第で自分の選択肢を広げることが出来るため、コンテストでは率先してコミュニケーションを取っていきましょう。
プログラミングを学ぶ目標・目的になる
目標・目的が決まらないあなたへ
「プログラミングスキルを身につけたい!」と思っていても、目標・目的が無くて途中で諦める人も多いです。そんな人はまず、「コンテストに出場する」を目標にするといいでしょう。
コンテストに出場するためには、もちろんスキルが必要になってきます。なので、スキルも身につき自分の実力も知ることができます。
プログラミングコンテストの種類
プログラミング作品
プログラミング作品に関するコンテストでは、自分でプログラミング開発を行い制作したソフトウェアの内容を競います。プログラミングコンテストと言われると、このタイプのコンテストを思い浮かべる人も多いのではないでしょうか。
コンテストによってテーマやプログラミング言語が指定されているものもあれば、制約がなく自由に開発できたりするコンテストもありさまざまです。作品ジャンルとしては、AI、IoT、セキュリティ、プログラミング言語など自分が作りたいものを自由に作れる事が多く、思いついたアイデアを形にしやすいでしょう。
ソフトウェアの完成度だけでなく、アイデアも審査ポイントになっており、プログラミング初心者でもアイデア次第では入賞することも可能です。プログラミングスキルが高い方のみならず、アイデアに自信があるという方にもオススメのコンテストです。
プログラミング作品の例「HSPプログラムコンテスト」
【HSPプログラムコンテストの特徴】
HSPで作られた作品を審査・表彰するコンテストです。作品を作らなくても、応募作品に触れることが出来ます。
審査員に評価されることで、自分の課題などを見つけることが出来るため、作品を作ったら積極的に応募してみましょう。
【コンテストの対象】
年齢不問、プログラミング言語「HSP」のみ使用可
アルゴリズム
アルゴリズムに関するコンテストは、与えられた課題に対して解決する為のプログラムをいかに素早く正確に提出するかを競うコンテストです。別名「競技プログラミング」とも呼び、日本のみならず世界中でコンテストが開催されています。
作品を作るのではなく正解数やスピードを他人と競う競技性の高いコンテストなので、自分のスキルを試したいという方にはうってつけでしょう。アルゴリズムに関する問題なので、プログラマーだけでなく数学やパズルが得意という方にもオススメですよ。
アルゴリズムの例「AtCoder」
【AtCoderの特徴】
初心者向けのコンテストで、プログラミングを始めたばかりの人でも参加しやすい課題が用意されています。
基本的には、初心者や入門者向けのコンテストが多いですが、時には企業と提携し「初級〜上級」全てを対象としたコンテストを実施していることもあります。
まだコンテストに参加したことがなくて不安という方にオススメのコンテストです。
【コンテストの対象】
年齢不問
ショートコーディング
ショートコーディングは、いかに短いコードで問題を解けるかを競うコンテストです。一口にプログラミングと言っても書き方は人によって異なり、スキルの高い人は出来るだけ短くわかりやすいコードを書くことが出来ますよね。
ショートコーディングに挑戦する場合は、コーディングに対して幅広い知識を有することが必要条件となるでしょう。プログラミング初心者には難しいですが、プログラミングを深く学んでいる人にオススメのコンテストです。
多くのサイトで問題が公開されているので、興味がある方は試してみてはいかがでしょうか。
ショートコーディングの例「コードダンジョン」
【コードダンジョンの特徴】
コードダンジョンは、普通のコードゴルフと違いレベルが上がっていくと禁止文字が増えていき、普通にコードを書いたら必ず使う演算子や関数などが使えなくなっていきます。
そのため、普段では考えないような柔軟な発想力を鍛えることが可能です。段階ごとにレベルが上がっていくので、ゲーム感覚でショートコーディングを楽しむことが出来ます。
【コンテストの対象】
年齢不問
ソフトウェア・セキュリティ
ハッキング技術やネットワークセキュリティに関するコンテストのことです。例えば、コンピューターセキュリティ技術を競う競技であるCTF (Capture The Flag) が有名です。
セキュリティに関する専門技術を必要とするので初心者には難しいですが、コンテストで入賞する事ができれば大きなキャリアアップが望めるでしょう。
ソフトウェア・セキュリティの例「SECCON」
【SECCONの特徴】
基本的には上級向けのコンテストが多いのですが、「CTF for ビギナーズ」という初心者向けのコンテストも開催されています。
コンテストの規模はでかく、予選を突破しなければ本選に参加することは出来ません。予選は2日間かけてクイズ形式の問題を解いていき、本選では攻防戦方式で行われます。
優秀なエンジニアが多く参加しているため、スキルアップにはもってこいのコンテストです。
【コンテストの対象】
年齢不問(学生限定大会も有り)
AI(人工知能)
AIに関するコンテストでは、社会に役立つAIを考え作成したり、他の人と作成したAI同士を戦わせて勝敗を競ったりします。AI同士を戦わせるコンテストでは、目に見えて結果が分かる競技性の高いコンテストとなっているので、ゲームのように楽しめるコンテストになっています。
AIはこれからのIT社会において注目されている技術の一つなので、興味のある方は挑戦する事で希少価値の高い人材となれるかもしれませんよ。
AI(人工知能)の例「SamurAI Coding」
【SamurAI Codingの特徴】
AIプログラムを組み、お互いのAIを戦わせる対戦型のコンテストです。プログラミングスキルの他にもアルゴリズムやストラテジー、設計スキルが必要になります。
ゲーム形式で行われますが、様々なスキルが必要でこのコンテストを目指すだけでも多くのスキルを身につけることが出来ます。ゲームが好きな方にオススメのコンテストです。
【コンテストの対象】
年齢不問、1名以上のチーム
まとめ
いかがでしたか?
コンテストでは自分の実力を知ることもできるし、自分の課題を再認識できるいい機会です。どの種類のコンテストに出るかによって得られる課題も違いがあります。
自分の目的に合ったコンテストを適切に選び、さらなる成長に繋げてもらえたら嬉しいです。
また、プログラミング学習や実力をはかる機会としては、勉強会への参加もおすすめです。おすすめのプログラミング勉強会について詳しく知りたい人は、次の記事を参考にしてください。