はじめに
DX が進む昨今、情報系でなくとも、大なり小なり IT に関連した職を視野にいれる学生は多いと思います。
この記事では、
- 研究ではプログラミングをあまり使ってこなかったが授業では少しやった
- プログラミングやアルゴリズムの知識があれば、役立ったり幅が広がったりする仕事を考えている
という方に向けて、競技プログラミングの就活におけるメリットをご紹介したいと思います。
筆者自身、理論物理系の研究をしているため、研究でプログラミングを使うことは今はほぼありませんが、学部生時代に競技プログラミングに出会い、その面白さにのめり込み、自身の就活でも活用できればと考えています。
就活で強力な武器になる競技プログラミングですが、なにより楽しいことが伝わると嬉しいです。
競技プログラミングとは
与えられた問題に対してどれだけ正確、かつ素早くプログラムを作成できるかを競う競技です。
問題内容は、パズル的なものや数学的なものがあります。
といってもイメージしにくいので、実際の問題をみていただきましょう。
以下は国際大学対抗プログラミングコンテスト 国内予選(2020年)の問題です。
Problem B 接触追跡
新種のウイルスの感染が拡大している. このウイルスはキャリアとの濃厚接触による感染リスクがあり, それはキャリアの症状の有無によらないことが知られている. このため,感染が確認された者やその疑いの強い者と濃厚接触があった者を特定して検査することが防疫上有効である. そこで,普段から人と人との接触を携帯電話上のアプリをもちいてすべて記録しておき, 感染確認時にはその記録に基づいて直接・間接の感染リスクがある人を特定するシステムを構築したい.
あなたは,こうしたシステムの開発を任された.そして,既に携帯電話側のアプリは完成させた. インストールしたアプリが, 同じアプリをインストールした携帯電話を持っている人との濃厚接触を検知すると, 両者の ID を情報収集センターに送信する.
あなたの次の仕事は,利用者の感染が確認されたときに, その感染者から直接的または間接的に感染したリスクがある利用者を特定するプログラムを作ることである.
システムの利用者の感染が確認されたら, それ以前のある期間 (感染性保持期間) 内に濃厚接触した利用者は感染の疑いがある. 感染が疑われる利用者がその後にまた別の利用者と濃厚接触していれば, その相手にもまた感染の疑いがある. こうして感染の疑いは繰り返し広がるものとする.
ある利用者の感染が確認されると,その利用者の ID と, その利用者がキャリアになった可能性がある時刻以降の, すべての利用者同士の濃厚接触の記録が入力として与えられる. 与えられた記録にある濃厚接触はすべて, 感染が確認された利用者の感染性保持期間内に起こったと仮定する. 出力は感染が確認された利用者から直接的または間接的に感染した疑いがある利用者の総数である.
Input
入力は複数のデータセットからなる. 各データセットは次の形式で表される.
m n p
a1 b1
…
an bn
各データセットは三つの整数 m,n,p からなる行から始まる. m (1 ≤ m ≤ 100) は利用者の人数を表す. n (0 ≤ n ≤ 1000) は記録の件数を表す. p (1 ≤ p ≤ m) は感染が確認された利用者の ID を表す.
続く n 行には利用者同士の濃厚接触の記録が 1 行に 1 件ずつ時刻順に並んでいる. 各行は,ID が ai と bi の利用者の濃厚接触があったことを表す. ここで, 1 ≤ ai ≤ m, 1 ≤ bi ≤ m かつ ai ≠ bi である.
入力の終わりは三つのゼロからなる行で表される.データセットの個数は 50 を超えない.
Output
各データセットについて, 感染が確認された利用者とその利用者から直接的または間接的に感染した疑いがある利用者の総数を出力せよ.
時事的な問題設定が面白いこの問題、プログラミングが好きな人なら、一見して解いてみたくなったのではないでしょうか。
コンテストでは、時間制限の中で急いでプログラムを書き、その場で即採点され、リアルタイムに順位が更新される中で、世界中の人と競うことができます。
使用言語は問題にもよりますが、C++ や Python をはじめとして、60 以上の中から好きな言語を選ぶことができます。
上記の問題が出題されたコンテストは大学対抗のチーム戦でしたが、多くのオンラインコンテストは個人戦です。
競技プログラミングで採用を獲得するには
そんな競技プログラミングを使って、優秀な人材を発掘しようとする企業が今増えています。
例えば Google も、自社で競技プログラミングコンテストを開催しており、好順位をとれば面接に招待されることもある、と明記されているのをご存知でしょうか。
この記事では、数あるプログラミングコンテストの中でも問題が良質で、かつもっともお手軽に参加できる競技プログラミングコンテストサービス「AtCoder」を紹介します。
AtCoder とは
AtCoder とは、プログラミングのコンテストを毎週開催する日本の Web サービスです。
毎週オンラインのプログラミングコンテストに参加するユーザは、IT人材市場において大きな価値が見いだされており、数多くの企業が注目しています。
AtCoder では、企業が開催するプログラミングコンテストもあり、例えば 2021 年にコンテストを開催した企業だけでも(2021 年 6 月現在)、
- 東京海上日動
- 野村グループ
- エイシング
- マイナビ
- 京セラ
- パナソニック
- SOMPOグループ
- 日立
- キーエンス
といったそうそうたる企業が並びます。
他にもリクルートやドワンゴ、サイバーエージェント、KLab、ヤフーなどのウェブ系企業、MUJIN や CADDi などのベンチャー企業、DISCOなどの製造業の企業や、ヤマト運輸などの一見 IT に関係ない企業も、コンテストを開催し、人材獲得に乗り出しています。
企業主催のコンテストのページには、求人情報だけでなく、競技プログラマを必要としている詳しい業務内容、企業で提供できる体験、説明会の案内なども記載されています。
また、コンテストによっては Amazon ギフト券 20 万円といった賞金があるものや、上位100名に 『開発職 新卒採用一次面接パス権』 を進呈、というケース、上位入賞者限定の座談会に招待されて選考ルートに入るケースもあります。
競技プログラミングでアルゴリズム力とプログラミング力をつけよう
プログラミング技術やアルゴリズムの運用能力を「本を読むだけ」で身につけることはほぼ不可能です。
その点、競技プログラミングは、限られた時間の中で集中して、実際に手を動かすことで、アルゴリズムを広範囲に勉強するのにうってつけです。
実際、東京大学では「実践的プログラミング」という競技プログラミングをすると単位が得られる授業があったり、私自身の大学でもキャリア教育科目に競技プログラミングがあったり、競技プログラミングを高等教育に活用する大学は多いです。
実は、コンテストに参加することの大きなメリットのひとつは、自分と同じ問題を解いた他の人の解き方・コードを知ることができる点にもあります。
問題を解いたあと、他の人のコードを見ていて、こんなにスマートな書き方があったか、こんな別解があったか、と驚くのも楽しさのひとつです。
そしてなにより、コンテストを通じて、ともに切磋琢磨できる仲間ができることで、勉強が楽しくなり、長く続けることができます。
コンテストは定期開催されるので、コンテストに参加し、その後復習するだけで、継続的に勉強する習慣がつくという利点もあります。
ガクチカのネタにもつかいやすい競技プログラミング
「学生時代に力をいれたこと」は、履歴書やエントリーシート、面接の場で聞かれることが多い質問ですが、自分の人となりやアピールポイントが伝わるようなネタを考えることは容易ではありません。
しかし競技プログラミングは、前述の通り、着実に練習を重ねたり力試しをしたりするプラットフォームが確立されているため「○○という目標をたて、その達成のために○○といったプランを立てて実行し、その結果○○という実績を残せました」と話すのが容易です。
さらに、自分で意欲的にスキルアップする人、計画的な努力家という印象も与えることができます。
就活でのアピールにぴったりではないでしょうか。
まとめ
プログラミング初心者でもとっつきやすく、お手軽に始めることができる競技プログラミング。自分に合うと思われる方は、ぜひ就活に活かしていただきたいです。