Supershipグループ Advent Calendar 2023の25日目の記事になります。
SupershipでCTOを務めている名畑です。2023年が終わる寂しさを感じつつも、2024年1月からは楽しみにしていたうる星やつらの2期がついに始まるので楽しみです。公開されているPVには因幡くんが登場していて、昭和版ではOVAを繰り返し見ていたので本当に嬉しい。
はじめに
採用活動でよく目にし耳にする競技プログラミング(競プロ)、特にAtCoderについて、自分でもやってみないと応募者の評価が難しいなと2020年頃に感じました。そして1年間ほどしてどうにか緑までは達し、その際に「採用活動のために競技プログラミング(AtCoder)を始めて一年経ったので感想を書きます」という記事を書かせていただきました。
あれから2年ほど経ちましたので、前記事との被りも多いですが、採用担当者である自分の目線での感想、印象を改めてまとめさせていただきます。しょせんN=1ではありますが、どなたかの参考になりますと幸いです。
ちなみに、最近は学生向けのイベントである技育祭【秋】や技育祭【春】での登壇をはじめとして、新卒採用での活動が割合としては多めです。
また、AtCoder以外の競プロサイトも多少はやってきたのですが、本記事では言及しません。
この記事を読む上での前提知識
- 競技プログラミング:与えられた要求を満たすコードを記述する速さなどを競い合う競技
- AtCoder:競技プログラミングの国内(世界?)最大級のサイト
- 色:AtCoderではレーティングによって色がつき、灰 < 茶 < 緑 < 水 < 青 < 黄 < 橙 < 赤の順番
色毎の実力については公式の「Algorithm部門のレーティングと業務における期待できる活躍」をぜひご参照ください。
競プロをやる前と後での印象の変化
もちろんやる前から競プロのことは知っていましたし「AtCoderの赤が化け物レベルだ」ぐらいの認識は持っていました。
ただ、実際に自分でやってみて、AtCoderで茶(内部レーティング分布上位46%程度)や緑(内部レーティング分布上位25%程度)になるのも簡単なことではないのだと強く実感しました。
比較的長くコードを書いてきた自分であれば、もっと簡単にレーティングが上がっていくと思っていました。
現実には、緑になるまで結構苦労しました。
そもそもとして「あえてプログラミングで皆との勝負に挑もうという気概がある」という人たちの中でのランキングなので、簡単なわけがないです。
たとえば、スポーツでもボードゲームでもなんでもいいんですけど「世界ランカーも含めて自由参加のコンテスト」に出て真ん中より上になるって、それなりに難易度が高いことだと思います。
自由意志で参加する時点でかなりのフィルタリングがされているでしょうし、しかも、AtCoderの場合はそれに加えて継続的に参加しない限り評価が上がっていかない。
その代わりにネットで完結するから参加障壁が低いという要素もありはしますので、一概に比べられるものではないけれど、それでも簡単ではないよなと。
余談ですが、茶や緑になるための難易度(というか学習量)は年々少しずつ上がっているような印象を持ちます。
競技人口が多い前提はありますが、スポーツの世界でもなんでも、ノウハウや研究の蓄積により全体の平均レベルというのは徐々に上がっていくものですし、競プロもそれは同様ということでしょう。
競プロを始めて成長を実感したか
コードを扱うことを仕事にして20年以上の私が言うのもやや気恥ずかしいのですが、コードを書く、読むという行為が前よりもスムーズにできるようになったと思います。
つまり、成長を実感しています。
AtCoderをやる前だって、日常の開発において、別にのんびりコードを書いていたつもりはないです。ただしAtCoderみたいに秒単位を気にしてコードを書いたことはほぼありませんでした。
競技プログラミングで秒単位を気にしてコードを書くという経験を重ねたことによって、自分の基礎力が上がった実感を得ています。また「アルゴリズムによって計算量に大きな差が出る」という当たり前の事実を改めて実感したことも潜在的に実装力に影響している気もします。
それはあるいは「思考力的な意味での成長」とは言い切れないかもしれません。アルゴリズムの知識は増えたけれど、その知識を使う機会が常にあるわけではないですし。
ただ、開発というのは「コードの読み書き」や「解決策を思考する」のマルチタスクであって、コードの読み書きがスムーズになればなるほどに、解決策の思考に自分の脳みその稼働を寄せられると思うのです。英語が苦手な人に「英語で文章を書いてよ」と依頼したなら、とにかく書くことだけで一杯一杯で品質が二の次になるでしょう。それと同じで、コードだって、基礎力がないと品質に著しく影響するのではないか。
という意味では、間接的に思考力が伸びたとも言えるのかもしれない。
あと、自らのスキルの可視化(スコア化)により「自信」が生まれたことも、コードを書くという行為がスムーズになった理由かもしれません。
この「自信」とは別に自分が優れていると思っているという意味ではなくて「これぐらいのスコアだからこれぐらいはできるだろう」と客観視できるようになったというか。「自分ならこれぐらいまではできると信じられるようになった」という意味での「自信」です。「これぐらい」のレベルが高いわけではないです。
競プロが実務で役立つか
なにをもってして役立つとするかという話ではありますが、役立つか役立たないかの二択であれば「役立つ」が私の回答です。強くそう思います。
「競プロみたいなケースはそうそう実務ではないよ」と言われたなら、それはまあ正しい意見かもしれないですが、前述の通り基礎力が上がると私は感じたので、実務においてコードに触れることが多いのであれば、役立つのではないでしょうか。
他人に薦めるかどうか
これまで他人に競プロを強く薦めたことは一度もないです。ただ、競プロというものの存在について紹介したことぐらいはあるので、それで始めた人はもしかしたらいるかもしれません。
エンジニアリングというのは、かなり範囲が幅広いわけです。そのため、特定の何かを強く薦めるということ自体が日常において稀です。競プロが「成長の最短ルートとなるようなケース」はかなり限られると思っていますが、それは競プロに限らずということです。AWSの資格取得だってOS自作だってローカルネットワーク構築だって、ある目的の上では成長の最短ルートかもしれませんが、そうでないケースの方が多いでしょう。
私が競プロを始めたきっかけは採用活動のためですが、続けた理由は「面白いから」でしかないです。
プロのエンジニアがAtCoderをやるとどれぐらいのスコアか
専門分野等によるでしょうが、世間一般でコードを書くことを仕事にしている人たちでも、特になんの準備もなくAtCoderのコンテストに参加したらなら、緑や茶のパフォーマンスにもならない人が多いのではないかと思います。根拠は私の経験による推測でしかないですが。
競技プログラミングは、練習量や知識やコツやノウハウがスコアの鍵になると思っているのです。だから、経験がないと、結果を出すのが難しい。
逆に言えば、競プロで結果を出せる人たちは「とても努力した」のだと考えています。
人からAtCoderの色を言われたときに思うこと
自分自身が緑だからか、水色以上の人は「すごい」って素直に思います。
「すごい」をより言語化すると
- 数学的な思考が得意(数学自体が得意かは別として)
- 継続力がある
- 頭の回転が速い
- (環境の最適化も含めて)コードを書くのが速い
といったところでしょうか。
そもそも、この世の中において、義務ではない何か一つのことに熱心に取り組んで結果を出している人って、特に歳を重ねれば重ねるほど、それなりに珍しい部類だと思っています。
ちなみに緑や茶でも
- 継続力がある(この辺りの色でも大半は土日をそこそこ潰しているはず)
- 複雑さを求められるコードでなければそこまで苦なく書けるであろう
と考えます。
また、AtCoderは努力と結果が相関しやすい考えているので灰でも「今は灰なんだな」「続けていれば伸びるんだろうな」としか思わないです。
そして、レートが上であればあるほどに「プログラミングを好きなんだろうな」とも考えます。嫌いなのにやっている人もちょっとはいるかもしれませんが。
好きなのって大事です。
エンジニアの就職活動でどれだけ効果があるか
流石に誰も「AtCoderで上位ならどこの会社のエンジニアにだってなれる」と夢のようなことを考えてはいないかと思います。ただ「一定、役に立つはず」とは考えているでしょうし、それは正解なのではないかと。
大量のデータを処理するだとか、複雑なアルゴリズムの実装がメインであるだとかといったポジションであればその効果はより顕著でしょう。
一般的なWeb系の企業の新卒採用であれば「自分でアプリを作ってリリースした経験」や「インターンでのアウトプット」や「GitHubに積み重ねてきたコード」の方が効いてくる気はします。これも、その求人にポテンシャル採用の要素がどれだけあるかに大きく左右されそうではありますが。
あと、これは競プロに関わらず資格や部活動なども含めた一般論ではありますが「自分の経験は自分をアピールするための素材」なので、競プロの経験を活かしたいならその伝え方(調理の仕方)は重要かもしれません。
面接などで話す相手が「AtCoderなんて聞いたこともない」ということはエンジニア採用であればそこまでないと信じていますが、以前の私と同じで「色毎のスキルの肌感を持っていない」ということは普通にありそうです。ですので仮にアピールの道具として用いるなら、説明に肉付けをすべきではあるかもしれません。
ちなみにですが、AtCoderJobs経由での就職を狙っているのであれば「AtCoderが就職活動に効果がある」と強く言えるのではないでしょうか。色によって応募できる会社が変わりますし、採用担当者だってAtCoderの知見をお持ちでしょうし。
また、どの会社においても、コーディング試験であれば有利に働くことはありそうです。コーディング試験も多種多様なので、出された問題において競プロで身につけたアルゴリズムなどがさほど活かされないことはあるとしても「与えられた問題に対してその場で解法を考えてコードに落とし込む」ということにはかなり慣れているはずなので、その経験が強く働くとは思います。
競プロを始めてから変わったこと
プログラミングというのは基本的には目的を達成するための手段です。
しかし競プロの世界においては、プログラミング自身が目的です。
プログラミング自身が目的である場って世の中においてはきっと貴重で、ある種の居心地の良さがあります。
競プロを始めてから「自分ってプログラミングが好きなのだな」と前より思うようになりました。
あと、競プロの話で人と盛り上がれるようになったことも大きな変化です。
他人に強く薦めはしないけれど、矛盾するようですが、競プロをやる人が増えてほしいとは強く思っています。
最後に
これまでにもAtCoderに関して下記のような記事を書いてきましたので、よければ合わせてご覧ください。
- ユーザの継続率
- ユーザの年齢
- ユーザの世代別国と地域
- ユーザの所属(大学・高校・会社等)
- ユーザの年齢と使用プログラミング言語の相関
- プログラミング言語シェア
- プログラミング言語実行速度
- レーティング別問題解答速度
- 見るとAtCoderをやりたくなる動画
宣伝
SupershipのQiita Organizationを合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。
Supershipではプロダクト開発やサービス開発に関わる方を絶賛募集しております。
興味がある方はSupership株式会社 採用サイトよりご確認ください。