概要

この記事は業務歴6~7年のAtCoder水~青の無職で競技プログラマが中途の就職活動をまとめた記事です。競技プログラマの中途での転職・就職活動に役立てれば良いと思い書きました。
この記事は全て個人の感想です。コーディング面接の対策については書きましたが、優れたコーディング面接対策の記事や教材は大量にあるのでそちらを参考にしたほうが良いです。おすすめはこちらの記事です。

コンテキスト

2022年11月に4年半勤めていた会社(外資系日本法人)からレイオフ/退職勧奨の通知を受けました。各方面と相談したり仕事へのモチベーションを考えて退職に合意しました。
最終出社日は通知からの10日後でその間にも引き継ぎ作業があり転職活動する時間は無く、退職する時は次の職場は決まっていませんでした。大手外資企業は軒並み採用凍結していたのでゆっくり仕事を探そうと考えていました。
正月明けに東京オフィス閉鎖で残った同僚が全員レイオフの発表がありこの時期は海外IT企業が軒並みレイオフしていたと思います。

自己紹介

無職で競技プログラマのtogatogaです。好きなプログラミング言語はRustとGoです。

学歴・職歴

学部は数学科で学部4年の時に競技プログラミングを知りました。それからプログラミングに本格的に興味が湧き大学院からは情報系を専攻しました。
新卒では国内メガベンチャーで1年半ほどWebエンジニアとして働きました。主な開発言語はPHPでした。
前職の外資系日本法人の会社に転職して4年半ほど働きました。音声AIアシスタントのバックエンド開発(C++?)と退職する直前は社内Webツール開発のチームに移りGo/TypeScriptを書いてました。

競技プログラミング

競技プログラミング歴は約10年(途中辞めたりしましたが)です。昔はC++を使ってましたが今の使用言語はRustです。AtCoderのレートは水~青ぐらいをウロウロしています。国内ゲームAIコンテストでは入賞経験があります。

スキル

基本的なスキルセットはバックエンドエンジニアです。フロントエンド(React/TypeScript/Next.js)もある程度のレベルでは書けます。
またDocker等で開発環境の整備構築等できるぐらいのインフラ知識はあります。主に使えるプログラミング言語はRust/C++/Go/Python/TypeScriptです。
英語は読み書きと基本的なコミュニケーションが可能です。英語の技術書・ドキュメンテーションが読めて英語字幕があれば動画でもある程度理解できます。

就職活動

年末年始は引っ越したり、失業手当の準備・申請があり忙しかったです。最初はスカウトが来た面白そう・興味がある企業があればカジュアル面談を受けたりして情報収集していました。 この頃はとにかくRustを採用している企業を中心にカジュアル面談をしていたと思います。
5月に1社の選考を進めたのをきっかけに就職活動を本格的に始めました。
大手の外資系企業は軒並み採用が凍結していたので国内のスタートアップ中心で就職活動しました。

就職活動の軸

今回の私の就職活動の軸をいくつか挙げます。

  1. ビジネス/プロダクトが興味と一致
  2. 選考でのコーディング面接は必須
    1. 働いてる同僚がコードが書けること
    2. 自分の能力と相手が求めてる人材とのギャップを減らすため
  3. 給料は大きく下げない
    1. 前職(外資)に転職した金額ぐらいは最低ライン
  4. 開発環境が好みとある程度一致
    1. 型付言語(TypeScript/Go/Rust)での開発
    2. 開発文化・フローが整備されてる
  5. 会社の雰囲気が良い

今までの会社選びの軸は「給料が高い」「スキルを磨ける」などを重視していました。
今回の就職活動ではそういった要素の優先度は減らして「ビジネス/プロダクト」や「組織」についてフォーカスしました。

求人サイト

今回の転職活動では以下の媒体を使いました。個人的には競技プログラマが就職・転職活動するならAtCoder Jobsが一番良いと思います。サイトの使い勝手は断然Findyでした。

AtCoder Jobs

AtCoder JobsはAtCoderが運営している求人サイト、一定のレート以上だと求人に応募できるのが特徴である。
レートが一定以上だと書類選考・1次面接はスキップしてくれるので選考が非常に早い。競技プログラマが働いている企業が多く、同僚や会社の文化や環境が競技プログラマにマッチしやすい。
【中途採用向け】AtCoder社員による職業紹介でAtCoder社員の方からレジュメを元に求人紹介や就職活動のアドバイスを頂きました。

Findy

FindyはGitHubやQiitaなどの情報から技術偏差値を算出できる求人サイト。 企業のHRやエンジニアが直接スカウトを送ってくれる。求人の質が高く募集要項が非常にわかりやすい(e.g. 技術スタック、給与レンジ)
国内スタートアップに絞って転職活動するにはかなり便利だと感じました。

LinkedIn

LinkedInは世界で一番有名な求人サイトです。特に外資系の求人を探す時に非常に役に立つと思います。
ただ謎の転職エージェントからスパムメッセージが大量に届く。国内企業に転職するときには使うメリットはあまり感じられませんでした。
外資を受ける時はリクルーターと連絡できるので外資を受ける人には重宝されると思います。実際に選考は進みませんでしたが外資のリクルーターと連絡してました。

Twitter/𝕏

Twitter/𝕏はみんな大好きだったSNS。多くのプログラマが使ってると思います。
Twitter/𝕏のDMで社員の方からカジュアル面談受けませんかとお誘いが来ました。
カジュアル面談でお話を聞いて面白そうだなと思って選考を進めて結果的に内定を頂き承諾しました。

直接応募

会社の求人ページから興味があるポジションに直接応募する。基本的にその会社のフォームに志望動機や実績などを記述していく必要がある。 またカジュアル面談も無い事もあるため、会社とマッチするかは判断しづらい。書類選考や1次面接のスキップの特典は無く、結果的に選考には時間がかかる。
その会社に強い興味と志望度が高い場合のみ直接応募したほうが良い。

就活準備

主にシステムデザイン対策をメインで行いました。システムデザイン対策は3週間ぐらいは本を読んだりして真面目に取り組んだと思います。無職なのでフルコミットできたのは大きかったと思います。

レジュメ作成

同僚に半日ぐらい付き合って貰ってプロジェクトについて話しながらGoogle Docsで作成しました。 フォーマットなどは前職の同僚のを参考にして2ページ以内に収めるように作成しました。基本的には「学歴」「職歴」「スキル」「実績・資格」を記載します。
「職歴」では自分が関わったプロジェクトについて自分の貢献を記載します。プロジェクトによっては3年以上前のことなので思い出すのが非常に苦労するので、レジュメは定期的に更新したほうが良いと思います。今回はほとんどが書類選考が免除だったのであまり真面目には取り組みませんでした。
書類選考免除された企業でも2次面接前にレジュメの提出を求められたので必ずレジュメは必要なので準備をしたほうが良いと思います。

コーディング面接対策

アルゴリズム系の対策はやりませんでした。前職の面接でアルゴリズム系のコーディング面接経験があり、出題される問題はAtCoder Beginner ContestのB~D問題ぐらいなので知識が足りずに全く解法が思い浮かばないということは有りませんでした。ただ企業の問題向けにカスタマイズされていて、良い意味で不親切で面倒くさい問題になってるので面接中に議論して詳細を詰めていく必要があります。
基本的にはアルゴリズム系はRustを使ってましたが、ポインタを扱うような問題はRustではなくGoを使いました。なのでGoの基本的な文法の復習などはやりました。
問題を解くことで必要な知識は身につけられますが面接での立ち回りみたいなのは動画や他の記事を参考にしたほうが良いと思います。
コーディング面接での悪い立ち回り(条件を詰めずにいきなりコードを書き始める、沈黙する)やNG行動などもあるので受け方がわからない場合は以下が参考になると思います。

こんな偉そうな事を言ってますが1社ホワイトボードコーディング面接で落ちています。

システムデザイン対策

システムデザインの面接経験が無いためシステムデザインに重きを置いて対策しました。対策に使った教材。

「SQLアンチパターン」と「システム設計の面接試験」を読んで細かい所は「データ指向アプリケーションデザイン」で詰めるのが良いと思います。
「SQLアンチパターン」は前職の輪読会で使いましたが、とても良い本で可能であれば実際に手を動かせる環境を自分で用意すると良いと思います。DockerでSQL環境を構築してPythonのfakerでダミーデータを作成して色々と実験しました。
Web周りの経験知識が無い方はISUCONに取り組む事をオススメします。環境構築をすることでサービスがどう動いてるかを大まかに把握することができます。 実際に問題を解くとN+1問題やデータベースのインデックスによる改善などを手を動かして学ぶことができます、上位陣の解法を読むだけでもボトルネック調査や改善手法など色々な勉強になります。

面接結果

4社受けてA社とB社から内定を頂きA社の内定を承諾しました。

A社(Twitter/𝕏)

Twitter/𝕏のDM経由でお誘いが来て受けました。ビジネス系支援ツール開発のスタートアップで最終的に内定を頂くことができ承諾しました。
カジュアル面談 -> コーディング面接(アルゴリズム・システムデザイン) -> 2次面接 -> リファレンスチェック -> 最終面接(CEO面接)

B社(AtCoder Jobs)

AtCoder Jobsのスカウト経由で受けました。AtCoder Jobs経由なので書類選考と1次試験は免除されました。最終的に内定を頂きましたが辞退しました。
カジュアル面談 -> コーディング面接x2(アルゴリズム・システムデザイン) -> リファレンスチェック -> 最終面接(役員面接x2 現場面接x1)

C社(AtCoder Jobs)

AtCoder Jobsのスカウト経由で受けました。AtCoder Jobs経由なので書類選考と1次面接は免除されました。ホワイトボードコーディングで落ちました。
カジュアル面談 -> 1次面接 -> ホワイトボードコーディング面接(アルゴリズム) -> お祈り

D社(直接応募)

直接応募しました。2回目の技術面接で落ちました。
書類選考 -> 課題面接(アルゴリズム・実務系開発) -> 技術面接(レジュメ) -> 技術面接(レジュメ) -> お祈り

A社を選んだ理由

A社とB社でかなり迷いました。B社は超優秀な元同僚や有名競技プログラマが何人も働いておりこのまま入社すれば自分も楽しく働けると思っていました。
ただA社は今まで一緒に働いたこと無い人が沢山いるのでそっちで働いたほうが自分の幅が広がって面白そうだなと思い選びました。(それと若干「今の興味」と「やりたいことの実現速度が近そう」がA社のほうが勝ってた)

反省・振り返り

C社はホワイトボードコーディング面接で失敗しました。D社は実力不足で特に機械学習周りの知識が足りないことが原因だと思いました。
ホワイトボードコーディング面接をオンラインコーディング面接の雰囲気で受けてしまい、愚直解の説明と記述してから最適解に取り組む戦略を採用していましたが愚直解だけで時間を使い切ってしまいました。 愚直解を書くことで問題に対する入出力の定義と面接官と問題の認識に齟齬がないことを確認することができます。またオンラインコーディング面接だと愚直解と最適解の出力を比較して最適解の正当性を確認することができます。しかしホワイトボードコーディング面接だとコードを動作させる事が無いため、口頭で愚直解を説明する程度に留めておくべきでした。オンラインとホワイトボードだとコーディングスピードが100倍ぐらい違います。更に対面の面接による緊張などもあるのでホワイトボードコーディング上での実装は自分が思っている以上時間がかかることを意識したほうが良いです。

競技プログラミングは中途就職・転職活動に役立つか?

中途就職・転職活動にも役に立ちます。特に緑以上あればアルゴリズム系の面接で困ることはあまりないと思います。
AtCoder Jobsの求人の質が高く水色以上あればほぼ全ての会社に応募できるので水色までレートを上げるのは良いと思います。 中途採用だと今での仕事の実績やスキルセットが要求されるので競技プログラミング力だけでは合格するのは難しいと思います。

コーディング面接は足切り?

コーディング面接を突破すると、大体はレジュメを中心とした面接に切り替わりました。レジュメに記載した「プロジェクトの説明」と「あなたの役割や貢献した点」について掘り下げられました。
D社では技術面接はシステムデザインやアルゴリズムの問題は出題されず、全てレジュメを元にした質問に答える面接でした。
例えば、スキルやプロジェクトの使用技術でRust/SQL/RESTful APIと書いた場合

  • Rustの所有権について説明してください
  • RESTfulの概要と長所と短所を説明してください
  • パスワードをデータベースに保存する上での注意点を説明してください

1つ1つの質問は難しくないのですが、幅広くきちんと理解しているかを確認されました。 半年以上前に触った技術の説明を思い出すのは大変でレジュメに記載した技術の基礎的な復習・確認などはやるべきでした。  

技術以外の比重が高くなってる?

ほぼ全ての会社でリファレンスチェックが必須で私は前職の上司と同僚にお願いしました。良くも悪くも技術面接はいくらでも対策できるのできちんと社会人として働けるか成果を出せるかを確認していると思います。
新卒時代もある程度は人間性や社会性は確認されていたと思うのですが、中途は特に会社のミッションやバリューに共感しているか会社にマッチングしている人材なのかを見られていたと思います。

Tips

  • 面接は回数を重ねるほど上達する
    • 志望度が高いところは後に受けたほうが良い
  • オファーが複数あるなら給与交渉等の余地あり
  • 内定からオファー受諾の期限は大体1週間以内
    • 企業によっては選考は2週間で終われば2ヶ月ぐらいかかるのでスケジュールを組んだほうが良い

まとめ

東京オフィス閉鎖により同僚が全員レイオフされたので就職活動周りの知見やレジュメの作成・レビューなど非常に助かりました。特にリファレンスチェックは全員レイオフされたので何も気負うこと無く前職の上司や同僚にお願いすることができました。
面接では「システムデザイン」「リファレンスチェック」が要求されてキャリアが上がるにつれて、求められる技術力と社会人力が上がっていると実感しました。また面接全体を通して企業は社会人としてしっかりと成果を出す人材を求めていると思いました。
コーディング面接・システムデザインは教材が豊富にあり対策がしやすくゲームのレベル上げ感覚でやり込みがちですが、普段の仕事を丁寧に真面目にやることが就職・転職への近道だと思いました。