Algorithm部門のレーティングと業務における期待できる活躍
IT業界とAtCoder
10年前、日本にはほとんど競技プログラマーはいませんでした。しかし現在では、AtCoderだけでも世界で50万人、日本だけでも23万人が登録しており、多数の競技プログラマーが活動しています。IT業界のどの業種においても、特に新卒ITエンジニアとして応募してくる学生などはAtCoderを経験している場合が多く、採用側でもAtCoderがどういうものかを把握しておく必要性が高まっています。
AtCoderのレーティングが表すもの
AtCoderのレーティングは、競技プログラミングと呼ばれる競技において、どれだけのパフォーマンスを発揮できるかを正確に表したものです。AtCoderのコンテストに出る度に変動し、成績に応じて上下をします。AtCoderのレーティングは一定間隔刻みで色がついており、赤が最高となっております。灰色のユーザが大半であり、次の茶色でも上位のユーザとなります。
ITエンジニアとしての業務は多種多様であり、AtCoderで培った能力が、業務において役立つかは、会社・業種・業務内容に依存します。実際、AtCoderの参加者の中でも、AtCoderの仕事が役立っているか否かは、かなり差があります。こちらはAtCoder参加者に対してのアンケートなので、IT業界全体にアンケートを取れば、もう少し役立つ割合が下がることが予想されます。
以下のアンケートは、AtCoderのコンテストの参加者アンケートにて、「あなたが今の仕事をする上で、同僚がどれくらいのRatingを持っていたら嬉しいですか?」という質問に対する回答分布です。業種や環境、人それぞれによって、要求するレーティングが変わってくることが分かります。
よって、御社にとって、もっと言えば御社の各部門において、AtCoderのユーザが力になれるかどうかは、御社のエンジニアに直接聞くのが間違いありません。ですが、エンジニアがAtCoderについて詳しくない場合は、一般論を参考にするしかありません。以下に、AtCoder代表の高橋直大(chokudai)による、各ユーザについての所感を記載します。
AtCoderユーザに期待できる能力
まず、AtCoderが考えるAtCoderユーザの特徴は以下のとおりです。AtCoderの採用サービスである「AtCoder Jobs」においては、レーティングだけではなく、自己申告となる業務関連の情報が追加で記載されています。
確実な得意分野
- 高速で正確なコーディング
- 大きめなデータの扱い
- 計算時間の見積もりや削減
- パフォーマンスの改善
- 問題の論理的な本質を見抜く力
- 高度なアルゴリズムの知識を要する処理
- コーナーケースの処理や、それに対する意義
適性や相関が強い分野
- 未経験分野の修得速度
- / 特に機械学習で顕著
- 学習意欲
- 課題と手段が明確な問題へのアプローチ
- 数学的な処理や考え方
- 論理的な思考能力
- 複雑な条件分岐のある処理の扱い
AtCoderJobsでの自己申告分野
- 大規模なチーム開発
- 課題の明確化や手段の選定
- コードの保守/運用
- セキュリティ対策
- エラー処理
- 業務で使用するアプリケーション構築のための知識
- フレームワークやDB
- 基本/詳細設計
- プロジェクトマネジメント
※AtCoderJobs自己申告分野は、AtCoderで身につくものではありませんが、人によっては経験を積んでいる場合もあります。各個人の技術プロフィールから確認できます。
ITエンジニアの職種とAtCoderの相関
AtCoderは、職種によって役立つ場合と役立たない場合があります。こちらは業種ごとに記載すると長くなってしまうため、別ページに記載します。 ITエンジニアの職種とAtCoderとの関わり (今後更新予定)
AtCoderのレーティング別で要求するアルゴリズム
こちらは専門的な内容になりますので、別ページに記載します。 レーティング別必要アルゴリズム (今後更新予定)
AtCoderのレーティングと実装速度
AtCoderのレーティングとIT業務において、最も影響が大きいのは、課題を与えられた際に、それを正確に認識し、ロジックを整理し、実装するまでの速度です。この速度は、問題定義から設計・コーディングまでのあらゆる速度に影響します。
本来、AtCoderはアルゴリズム開発能力を競うものであり、実装速度を競うのをメインとしていません。ですが、レーティングと実装速度には極めて大きな相関があります。
以下は、競技プログラミングの中では重実装問題である、 AtCoder Beginner Contest 322 - D Polyomino の色別正答率と、その平均提出時間です。制限時間は2時間のコンテストですが、実装時間の長い問題は戦略上避けることが多く、実際のコーディングテストとして1問だけ出題した場合、もう少し正答率が上がることが予想されます。黄色以上のユーザは、このコンテストのレーティング対象外であるため、実際はほぼ100%のユーザが正解できることが期待されます。
以下のような3つのポリオミノが与えられた時に、回転・配置をすることで、正方形を埋めることができるか判定する問題です。複雑な処理が必要となるため、コーディングテストなどで出題した場合、かなり低い正答率になることが予想されます。
レーティング | ACまでの平均時間※1 | 正解者数 | 1問以上正解した人数※2 | 正解率※3 |
---|---|---|---|---|
2000以上 | 0:21:49 | 242 | 294 | 82.3% |
青 | 0:30:16 | 403 | 495 | 81.4% |
水 | 0:38:47 | 548 | 977 | 56.1% |
緑 | 0:55:05 | 456 | 2046 | 22.3% |
茶 | 1:04:12 | 92 | 3399 | 2.7% |
灰 | 1:02:34 | 6 | 5589 | 0.1% |
※1 前の問題からD問題までのACにかかった時間の平均です。 ※2 ABC322で1問以上正解した人数です。 ※3 ABC322で1問以上正解した人数に対する正解率です。
このように、AtCoderのレーティングに対して、実装の複雑な問題への影響は大きく、単にアルゴリズム解決能力だけではなく、問題への理解・設計・コーディングにおいて大きな相関を見せます。これらを参考に、実際にITエンジニアに問題を解いてもらい、どのレベルのレーティングを採用ターゲットにするか検討してみてください。
AtCoderの色別に期待できる能力
Rating 0以上 (灰色)
期待できる能力
AtCoderへの参加回数が足りないか、成績が著しく足りないため、AtCoderとして能力を保証することはできません。
コンテストへの参加回数が多いのであれば、コーディング意欲は保証できます。
Rating 147以上 (灰色)
AtCoderにおける分布(2023/11/20現在)
実レーティング分布: 上位43.332%
内部レーティング分布: 上位62.252%
※実レーティング分布は、AtCoderのレーティングランキングにおける実際の分布を表します。内部レーティング分布は、参加回数が足りないユーザのマイナス補正を除いた場合のレーティング分布を指します。レーティング分布は、アクティブユーザではなく、全ユーザから計算しています。
期待できる能力
灰色と茶色の間に1つ色を付けるとしたら、レーティング補正の影響で、147以上400未満となります。そのため、147という中途半端な値で分類しています。
FizzBuzz問題などの、コーディングテストにおける初歩的な問題は、あまり苦戦せずに解くことが出来ます。業務上最低限必要なコーディングスキルはあると言えます。
ただし、AtCoderではChatGPTなどの生成AIを禁止しておらず、これらを用いてもこのレーティングに到達することは簡単であるため、監視付きのコーディングテストを用いるなどで、生成AI頼りのコーディングでないことを確認する必要があります。
Rating 400以上 (茶色)
AtCoderにおける分布(2023/11/20現在)
実レーティング分布: 上位28.462%
内部レーティング分布: 上位45.928%
期待できる能力
コーディングへの安心感がある程度持てます。学生や派遣社員などが茶色のレーティングを持っていたら、とても喜ばしいです。
基礎的なアルゴリズムへの理解があります。典型的な処理であれば、動的計画法、二分探索などのメジャーなアルゴリズムを適用することが出来ます。一方、少し典型から外れてしまうとまだ解くことが出来ません。
競技者としては、多くの参加者がまず目指すべきラインはここでしょう。数学的素養がそれなりにあり、しっかりと練習すれば到達可能な水準です。逆に言えば、才能や素養が十分にあるか、競技者としてしっかり取り組んだかのどちらかを必ず満たしているのがこの色です。
Rating 800以上 (緑色)
AtCoderにおける分布(2023/11/20現在)
実レーティング分布: 上位16.022%
内部レーティング分布: 上位25.262%
期待できる能力
様々なアルゴリズムやデータ構造を、与えられた課題に対し適切に適用することが出来ます。問題の言い換えなどが必要な高難度の問題には対処できないことが多いです。
コーディングの安定感、速さに信頼がおけます。計算量への意識も高く、ボトルネックとなる箇所において、実行時間がとても遅いプログラムを書いてしまう、などといったことも少なくなります。
業務上よく発生する複雑な処理は、これくらいの難易度までの処理が多いため、解ける/解けないという視点においては、職種によってはこのレーティングを上限と見て良いです。一方、速さや正確さにはまだまだ先があります。
競技者としては、この色を目標に1年以上取り組んでいる人も多く存在します。素養がなければこの色に到達するのはかなり難しく、一定の競技者の目標となるのがこの色です。1000問程度の過去問を解いても到達できないユーザも多数います。
Rating 1200以上 (水色)
AtCoderにおける分布(2023/11/20現在)
実レーティング分布: 上位7.895%
内部レーティング分布: 上位12.403%
期待できる能力
アルゴリズムの絡んだ開発が特技と呼べるような水準です。アルゴリズムの豊富な知識に加え、典型的な課題の言い換えも把握し始めており、多くの複雑な問題をアルゴリズム的な処理に落とすことが出来ます。
かなりのコーディング速度があります。課題を見てからロジックを考えるまでが早いので、上流工程において、ロジックをイメージしながら会話をする能力も高い事が想定されます。
例えば巨大なデータベースなどを扱うサーバサイドエンジニアなどは、常に計算量を意識する必要があるため、これくらいのレーティングを持っていると良い事が多いです。
普通のITエンジニアの業務としては、あまり必要としないレベルの問題を解き始める水準です。ですが、アルゴリズムを用いた研究開発という視点においては、ギリギリ参加可能な水準です。
競技者として自信を持ち始めるのがこの色です。大学対抗のチーム戦プログラミングコンテストの各大学トップチームなどにも、この色のユーザは多く存在しています。一方、競技未経験でも、アルゴリズムに関連した業務を行っているITエンジニアであれば、これくらいのパフォーマンスをいきなり出せることもあります。
Rating 1600以上 (青色)
AtCoderにおける分布(2023/11/20現在)
実レーティング分布: 上位3.609%
内部レーティング分布: 上位5.725%
期待できる能力
普通のITエンジニアから見て、常軌を逸したコーディング速度を持ち、複雑なロジックにおいてもバグの少ない安定したロジック構築が可能となります。
大抵の業務においてはここまでのレーティングは必要とはなりませんが、例えば、大きなデータを扱う・数理的な処理を扱う・研究開発に近い業務を行う・論文などをキャッチアップして実装までするような業務を行う場合は、大きな力となります。
競技者としては、旧帝大や早慶などの、競プロ強豪校を除いた、大学のエース選手がこの水準です。よほど関連した業務などを行っていない限りは、競プロの練習なしにこの水準のパフォーマンスが安定して出せるITエンジニアはいないと言っても良いでしょう。
Rating 2000以上 (黄色)
AtCoderにおける分布(2023/11/20現在)
実レーティング分布: 上位1.513%
内部レーティング分布: 上位2.383%
期待できる能力
業務においては、研究開発などには間違いなく役立ちますし、実装速度も大きな武器になりますが、扱う内容は非常に専門的になります。多くの場合は青色と特に変わりません。
競技者としては、日本で400人程度しかいない、かなりの上位のユーザとなります。競技で出題される典型的な処理はかなりの割合でカバーしているため、AtCoder Beginner Contestでは評価がつかなくなります。典型処理で解けない思考力を問われる問題が出題される、AtCoder Regular Contestや、AtCoder Grand Contestに挑戦する必要性があります。
この色に到達する競技者で、競技プログラミングに対する訓練を積んでいない選手はいません。高い素養を持ち、しっかりと競技プログラミングに取り組んだ人のみが到達できる領域です。東大・京大・東工大の競プロ超強豪校を除く、強豪大学のトップチームにも、これらの色の参加者は多く存在しますし、エース選手であることも多いです。
このあたりのユーザから、AtCoder以外の海外のコンテストへの参加や過去問練習が多くなり、AtCoderだけでは練習量などの動向を把握できなくなります。極めて多い練習量であることは確かです。
Rating 2400以上 (橙色)
AtCoderにおける分布(2023/11/20現在)
実レーティング分布: 上位0.396%
内部レーティング分布: 上位0.704%
期待できる能力
日本に100人程度のアクティブユーザしかいない参加者となります。個人戦の国内大会で優勝候補とは行かないまでも、TOP10に十分入ることのある競技者です。
Rating 2800以上 (赤色)
AtCoderにおける分布(2023/11/20現在)
実レーティング分布: 上位0.161%
内部レーティング分布: 上位0.253%
期待できる能力
日本のアクティブユーザで50人も存在しない、極めてハイレベルなユーザです。国内大会であれば個人戦においても優勝を狙えます。
TopRanker (銅王冠・銀王冠・金王冠)
期待できる能力
AtCoderの世界ランクに応じて、王冠が与えられています。銅 がTOP100、銀 がTOP30、金 がTOP10となります。
Google Code JamやFacebook Hacker Cup、TopCoder Openなど、世界大会の個人戦決勝に招待される可能性のあるユーザです。銅はチャンスがあり、銀は五分五分、金が常連となります。
Google Code JamおよびTopCoder Openは、2023年に終了し、現在世界一の競技プログラマを決める大会と言えるものは、Meta Hacker Cup・AtCoder World Tour Finalsの2つとなっています。