
競技プログラミングをやっている人の強さ
Category: 競プロ
競技プログラミングとは
競技プログラミング、略して競プロ。時間内にいち早く与えられた問題を解き、アルゴリズムをプログラムの形にして提出し、かかった時間や解けた問題数を競うという競技です。
日本ではAtCoderや日本情報オリンピック、ICPCなどが競技プログラミングの大会として有名です。
自分も情報系学生の端くれというわけで、大学に入学してから競技プログラミングに少なからず関わってきました。
今回はおよそ5年間くらい競技プログラミングに触れたうえで、自分が感じた「競プロ勢の強さ」みたいなことをまとめたいと思います。
競プロ勢の強さ
自分が感じた競プロ勢の強さを項目ごとに列挙していこうと思います。
数理的能力の高さ
競技プログラミングでは問題の数学的・アルゴリズム的構造を瞬時に読み解き、実装プランを立てることが必須となります。
こういうのを考察って言うと誰か言ってました。これを毎回やるのには高い数理的能力が求められます。
自分は数学力があまり高くないので、アルゴリズムの組み立てが苦手でした。典型的なパターンを抑えると多少は解法が見えることもあるのですが、やはり毎回は難しいです。
中には自分たちで問題を作る(作問をする)人もいます。言うまでもなく、問題は解くより作る方が難しいです。AtCoderでは毎週違う問題が何問も作られていますが、どうやっているんでしょうね。
プログラミングのスキルの高さ
当然、アルゴリズムが組めてもそれをプログラムの形に直せなくては意味がありません。
また、プログラミングの速さも重要なファクターとなります。スニペットやマクロ、テンプレートの作成やタイピングの高速化なども抜かりなく行われているイメージです。
また、手元の環境(プログラムの実行環境やテストの為の環境)を構築する力も競技プログラミングに取り組む過程で自然に身についていくものだと思います。何かをやってみようと思ったとき競プロの経験をすぐ応用できるというのは大きなアドバンテージでしょう。
そして、競プロの大会ではAIが禁止されることがほとんどのため、彼らは自分自身のスキルで戦うことになります。そんな中で勝ち続けている人のスキルの高さは言うまでもないでしょう。
タスク処理能力の高さ
時間内にタスクを完成させ、ある程度のクオリティを確保してリリースするという仕事のようなフローが競技プログラミングの大会中には行われていると言っていいでしょう。
いくら奇麗にコードが書けていても提出が遅いと順位は低くなるので速く実装することが必要ですが、ミスするとペナルティがあるのでバグなどはゼロにしないといけない、そういった緊張感がつきまといます。
こういったスキルは実際に社会で働くときにも有利に働きそうですね。特にリアルタイムでいろいろと解決する必要のある業種ではタスクを瞬時に把握し、解決していく力が大いに求められるでしょう。これは実際に技術系インターンをしてみて感じました。
ただし、実際に働くときは他の人にもわかりやすいコードを書くことが必要なので、競技プログラミング中みたいな「正しい答えは出るが意味の分かりづらいコード」は避けるべきです。
コミュニケーション能力の高さ
競技プログラミングは個人競技がメインとなっていますが、ICPCなどの大会ではチームを組み、共同で問題に取り組むこととなります。チームでの役割分担、実装役への解法のわかりやすい伝達など、コミュニケーション力が試される場面はいくつもあります。
また、JOIなど学生が参加する大会では表彰式などオンサイトでのイベントがあります。競技者たちはそこで他の学生と交流したり、連絡先を交換したり、かつてJOIで活躍したOB達(今では一流企業で結果を残している人も多い)と会話をしたりしています。
また、普段からTwitter(現X)を中心にAtCoderコンテストなどの感想を言いあったりするなどの交流も行われているようです。こういった人脈もその後の技術者人生で大いに役立つでしょう。
継続能力の高さ
AtCoderでは週に一度くらいコンテストが開催されており、そこで複数回結果を残していくことでレートと呼ばれる実力を表す数値が上がっていく仕組みになっています。
UnRatedで参加したり、何もしなければ下がる事は無いのですが、一度Ratedで大会に参加すると、その結果により大きくレートを下げたりすることもあります。ただ、Ratedのリスクを冒さなければレートを上げることすらできません。こうしたリスクを承知で毎回出場し、毎回結果を残してレートを上げていくのは並大抵の胆力ではできないでしょう。
特に、AtCoderの有名なコンテスト「ABC」は土曜日の夜21時から100分間行われます。人にっては参加しづらい時間帯ですが、毎回しっかりと結果を残している知り合いもいます。すごいと思います。
おわりに
こうして列挙してみると、競技プログラミング勢には他を圧倒するほどのプログラミングスキルが備わっていると考えても過言ではないような気がします。
もちろん、競技プログラミングをやっていない人でもプログラミングスキルが高い人は大勢います。そして、競技プログラミングをやっているからといって高いプログラミングスキルが担保されるわけでもありません。
ただ、競技プログラミングで結果を残している人は、プログラミングを用いた活動で成果を挙げやすいという傾向は間違いなくあります。AtCoderでいうところの緑色以上の人は相当なスキルレベルが保証されているといって間違いないと思います。
こういう人が就活で強いのは言うまでもないと思います。タスクの解決力が高く、コミュニケーションもできて、スキルも高い。引く手あまたじゃないでしょうか。
この5年、様々な縁があって沢山の競プロ勢と出会ってきました。皆競技プログラミングにとどまらず、色々な所で結果を残せるポテンシャルを秘めています。彼ら、彼女たちの成功を心から願っています。
以上、就活中に思ったことの書き散らしでした。