Commutty IT
4
Naoki
Follow
29か月前公開
・29か月前更新
・0 pv
・6 min read
就活における競技プログラミング
競技プログラミング
就職活動
初めまして Naokiと申します。 現在北海道で大学生をしながらHCI(ヒューマンコンピュータインタラクション)の研究をしていたり、プログラミングをやっているものです。 また次の進路として23卒のWEBエンジニアとして就職することも決定しているため、今後はこのMagicodeをアウトプットやその他エンジニアに関連する情報発信の場として活用して行きたいと思います。
さて、記念するべき第一回目の記事ですが、競プロerにとっての永遠の議題「競技プログラミングは就活に役立つか」の自分なりの意見を述べていこうと思います。
前提
競技プログラミングに日々取り組んでいて就活で活用できるのか気になっている
IT企業のソフトエンジニア職としてアプリケーションの開発をして働きたいと思っている。
筆者のプロフィール
AtCoder水色(1430)
ICPC2021年アジア出場
その他、おまけ程度の個人開発
23卒WEBエンジニアとして就職予定
先に結論
競技プログラミングは就職活動における幾つかの場面において適切に用いることで、自分自身のプレゼンテーションを最大限まで高めてくれる可能性が大いにあるが、特殊な状況を除いて競プロ1本で内定を得るのは少々無理がある。
「役立つ」の定義
そもそも「役立つ」の定義を明確にしておく必要があります。なぜなら就職活動はある程度の期間をかけて様々な選考フローを全部パスすることでゴールである内定を得ることが出来ます。 ここで「役立つ」の認識として「全てのフローで汎用的に有用である」だったり、「一部フローでちょっと使える」などその程度を擦り合わせておかないと話が噛み合わなくなるからです。要はこの話題って定義問題だと思うんですよね。
そこでこの記事ではよくある選考フロー一つ一つに着目してその有用度の見解を述べておきたいと思います。
自己分析・エントリーシート
評価:使える〇
所謂「ガクチカ」のネタとしては申し分ないと思います。 競プロ自体「精進」の言葉が表すように、ある程度の継続した努力が無いと一定のスコアはどうしても出しにくい世界です。
そういったエピソードを根気強さや勤勉さ、あるいは大学のサークルで競プロやってる人は組織の中での動き方の話をしても良いですし、ICPCやPG BATTLEのような団体制コンテストに出たらチームとして取り組んだことなど、幾らでも自分をアピールするためのエピソードを捻出することが出来ます。
また「どうして競技プログラミングにここまで取り組めているのか」と深堀りすれば自己分析もやりやすいと思います。私は競技プログラミングやれてる→そもそも数学などの論理性のある事柄が好きだから仕事でもそういった適性を活かしたい のように繋げていました。
コーディング試験
評価:使える時もある△
「競プロやってんだから、コーディング試験無双でしょ!」と思っていたのですが、意外とそうでもないなというのが最終的な見解です。
勿論競プロ的な問題も出てきますし、その場合は肌感覚としては緑レベルでほぼ無双、一番難しくても累積和やド典型なナップサックDPが上限かなーという感じです。そのタイプの問題なら余裕なのですが、就活におけるコーディング試験ってアルゴリズム色が強いというよりも
文字列でログが流れてくるのでルールにのっとって処理・抽出して何らかの値を算出する
試験用のエンドポイントが与えられるのでフェッチして処理する
与えられた既存コードを要件通り動作するように修正 のような、「文字列分解」「正規表現」「フェッチ」「if文とかswitch文を多く生やして条件分岐」「コードを読んで実装を解釈する」などの普段競プロであまり使わないタイプの処理を要求する問題も結構多いからです。
余談ですが、時折競技プロライクでも水色レベルの非常に難しい問題出している企業もありました。
人事面接
評価:使える〇
ここでの人事面接とは一番最初に行う面接を指します。
基本的にESの内容と相違がないかや、極端に問題のある人物のスクリーニングの役割の面が大きいと思うのでESの時と同じように競プロの話は長所をアピールするように落とし込んで話をすれば問題ないと思います。
エンジニア面接
評価:話題のきっかけとして使える〇
現役のエンジニアが技術面の方を見る面接はエンジニア職の選考なら多いイメージです。
ここでは将来のキャリアプランというより現在の技術スタックや意欲の面に比重を置いて見られる印象があるので、競プロの話題はプログラミングやエンジニアとしての意欲を担保する話題として有用だと思います。
現役で技術関連の話題をキャッチアップしているなら、今時競プロを全く知らないことは考えにくいし、緑くらいのある程度取り組んでいないと到達できない色を持っているなら凄いと思ってもらえることもあります。(人が人を見る面接という"儀式"において強烈な印象を与えることは重要です) ただし、技術者としての将来性をアピールするためには引き出しは多い方が良いので、具体的なアウトプットも絶対あった方が良いと思います。
界隈だと
拡張スクリプトやサードパーティー制精進サポートアプリ
の開発は結構盛んなのでこれに倣って何か作ってみることをオススメします。
これの特に良いな部分がストーリーの筋道が分かりやすくなるという事です。
「精進する過程で不便に感じる部分があったので自分でそのためのアプリを作って問題解決した――」のようなストーリーの筋道が立てやすく問題解決意識を持った人物だというプレゼンに説得力を持たせられるでしょう。
私もお粗末ながら
復習用の簡易的なサーバーレスアプリ
をNuxt.jsで作って面接のときに出していました。場合によってはその場でGitHubを一緒に読んで実装の意図とかを聞かれるので丁寧にコーディングをすることをオススメします。
また実践的な開発に関連した知識(Docker、AWS、今気になっている技術etc...)も聞かれる場合があります。結局のところ具体的なアウトプットを作っておくと更に良いことには変わりないでしょう。
上級エンジニア面接
評価:微妙△
企業によっては現場のエンジニアだけではなくてその上のマネージャー職やCTOのような技術者を纏める責任者と面接する場合もあると思います。
この場合前提として先のエンジニア面接はクリアしており現状の技術力や意欲は問題なしと判断されていると考えると、ここで聞かれるのはもっと将来的なキャリアプランを主に聞かれると思います。
なのでそもそも今やっていることに対して重きを置かれて聞かれないというか、会話の導入としてきっかけ程度になることが考えれますが、あまり競プロの事を熱く語る余地はないかなーと思います。
幹部面接・最終面接
評価:多分使いにくい×
ここからは会社として人材をとりたいか、ということを最終責任者が直接面接することで判断するフェーズになっていると思います。
技術面よりも会社の事業への理解・共感だったり、面接官目線で一緒の会社として共に働くにあたり良さげな人物かみたいなフィーリングの面が強くなっているので、ここで合格をもぎ取るためには技術面よりも人物面において会社が求めている人物像を意識しながら誠実に答えていくしかないと思います。
番外編
他に考えれれる作戦として、競プロを活かしたいなら競プロerを採ると明言している企業や選考フローを受けるということが挙げられます。 AtCoder直々の斡旋サービス
AtCoderJobs
やその他
athletics
などのプログラミングテストのスコアベースでオファーを貰えるサービスを利用するというのも良い手段だと思います。 全てのパターンがそうとは断言できませんが、ある企業Aを受ける人はその企業Aが用意した同じ問題を解くので他の候補者と定量的に比較検討がしやすくスコアがそのまま評価に繋がりやすいということも考えられます。
また合格して次の面接に進んだ際にコーディングインタビューで実装の意図を深堀られる可能性はあるのでなるべく丁寧に書くと安心だと思います。
競技プロは弱攻撃
みなさんは大乱闘スマッシュブラザーズというゲームをやったことがあるでしょうか?ざっくり説明すると格闘ゲームの亜種でキャラクターを操作して相手にダメージを蓄積していき強い技を当てることで画面外に吹っ飛ばして勝利 というのが大まかな流れです。
YouTube等で強い人のプレイを見ると分かるのですが、直接勝利に繋がるような強い攻撃だけではなく、威力が弱いが当てやすい弱攻撃を有機的に組み込んでゲームメイクをしてることが多いです。 (別にスマブラに限らず多くの格闘ゲームでそうなのだとは思いますが)
個人的なイメージとして就活における競技プログラミングはこれと似たような立ち位置にあると思います。つまり
直接内定を獲得できる強い要素ではないが、適切な場面で話すことで、新卒就活において自分の価値をある程度補強してアピールできて内定獲得を助けてくれる――
といったイメージです。 勿論上で述べたようにもっと具体的なポートフォリオがあった方が尚良いのですが、「競技プログラミングは役に立つか否か」という話題に対して自分の体験ベースで答えるとはっきりと「YES」だと思います。
さいごに
この記事がこれから就活に臨む競プロerに少しでも参考になれば幸いです。
みなさんが納得して就活を終えられるように筆者も願っています。
Discussion
コメントにはログインが必要です。