ソフトウェアエンジニアのアメリカ就職体験記(前編)
アメリカ就活の総括
日本で5年以上のソフトウェアエンジニア経験を積み、アメリカのコンピューターサイエンス分野で留学をしながら、現地でのソフトウェアエンジニアの就職活動に挑戦しました。このブログでは、就職活動のタイムラインや学びを共有します。
就活の背景と日本との違い
日本での転職活動では、人手不足、特にIT分野の人材不足が話題となっています。一方で、アメリカではこの状況は異なり、日本と比較して求職者に厳しい市場です。日本の転職ではエージェントが面接や交渉のサポートを行い、求職者が「売り手市場」にいることが一般的です。しかし、アメリカでは履歴書を多数送付し、返事があればラッキーという心構えが必要です。
以下は、アメリカの権威機関が発表したソフトウェアエンジニアの求人動向を示すデータです。
ご覧の通り、2022年後半から求人数は減少傾向が続いており、楽観できる状況ではありません。その背景には、新型コロナウイルスの影響で一時的に多くのテック企業が大量採用を行った反動があります。このため、2021~2022年のアメリカでの就職市場は好調でしたが、現在とは大きく異なる状況であることを理解しておく必要があります。
ただし、2024年は2023年と比べてやや改善しているとの声も現場から聞かれます。
また、2021~2022年に採用された経験年数2~3年のエンジニアが多いため、新卒者にとっては非常に厳しい状況です。特に、複数のインターン経験がないと、面接に呼ばれることさえ難しい場合が多いです。今年のインターン競争も熾烈で、優秀な学生でも何百社に応募しても面接に至らないケースが頻発しています。(グリーンカードがある場合は事情が異なります)
就活の心構えと結果
上記の厳しい状況を踏まえ、就職活動では「たくさん応募し、当たればラッキー」という心構えが重要です。
私の場合、日本で7年間のエンジニア経験があったため、就職活動のターゲットをMid~Seniorレベルに絞りました。4か月間で応募したポジションは約1,000件に上ります。複数ポジションに応募した企業もあるため、会社数としてはそこまで多くありませんが、目安として参考になるかと思います。
結果として、以下のような状況となりました:
応募したポジション数:約1,000件
リクルータから連絡を受けた企業数:16社
開始時期の不一致でキャンセルになった企業:4社
オンラインアセスメントで不合格:1社
リクルータ面接で不合格:3社
一次面接で不合格:2社
内定を獲得した企業数:3社
内定獲得により選考辞退した企業数:3社
この結果から、リクルータから連絡を受けた場合、内定の確率が大幅に向上することが分かります。数字自体は個人差があるため、あくまで参考としてご覧ください。
就活タイムライン
主なタイムラインは以下の通りです。私は12月に大学院を卒業予定だったため、最終学期が始まるタイミングで就職活動を本格化させました。就職市場の情勢は毎年変化するため、これはあくまで参考情報ですが、準備開始から内定獲得まではおおよそ3か月かかると考えるとよいでしょう。
また、働き始める時期の6か月以上前に応募しても、早期入社を求められて選考がストップするケースがあるため、最初のリクルータ面接で確認することをお勧めします。
8月
大学院:夏休みから秋学期に突入
就活準備:
レジュメの作成と添削
情報収集、先輩方へのインタビュー
LeetCode練習(Grind75)
就活:
試しに求人に応募開始
9月
大学院:秋学期
就活準備:
レジュメの修正・更新
LeetCode練習(Grind75、NeetCode150)
Behavioral Questionsの準備
就活:
求人への応募継続
リクルータ面接
オンラインアセスメント
10月
大学院:秋学期MidTerm
就活準備:
LeetCode練習(NeetCode150、選考中企業のTag問題)
Behavioral Questionsの準備
System Designの準備
就活:
求人への応募継続
リクルータ面接
技術面接(コーディング&システムデザイン)
11月
大学院:秋学期、Thanksgiving
就活準備:
LeetCode練習(選考中企業のTag問題)
Behavioral Questionsの準備
System Designの準備
就活:
求人への応募継続
リクルータ面接
技術面接(コーディング&システムデザイン)
オファー交渉とサイン
12月
大学院:秋学期Final、卒業
履歴書
履歴書を突破するとオファー成功率が格段に上がることは前章でも説明しました。では、どうやって履歴書を磨けば良いでしょうか?
ベース
大学のキャリアセンターにテンプレートが用意されていることが多いので、まずはそこからスタートすると良いでしょう。
日本や他の国とのフォーマットの違い
写真が不要
性別の記載が不要
年齢の記載が不要
履歴書と職務履歴書の分け方がない
写真や性別、年齢が記載されていないのは、差別を避けるためとされています。
履歴書の作成ポイント
各箇条書き(bullet point)は2行以内にまとめる。動詞から始め、該当企業で行ったことや成果を重点的に記載する。可能であれば、実績を数値化して具体性を持たせる。主語は不要。
「Led」「Implemented」「Designed」など、動詞は被らないようにし、できるだけ高度な単語を選ぶ。
システムや開発タスクだけでなく、チームでの協力や若手メンバーへのメンターシップも記載する。
余白を最小限に!目安として、ヘッダーやフッターの余白を調整して内容を充実させる。
修正方法
キャリアセンターや履歴書修正イベント
目的:書式や文法の基本チェック。ただし、CS分野に特化したアドバイスは少ない可能性がある。
注意点:3~4回通うと「特に修正点がない」と言われることが多いので、それ以上は別のステップに移ると良い。
アメリカで働いているソフトウェアエンジニアやクラスメイト
目的:箇条書きの内容を詳細に確認。実績の正確性や曖昧さを排除。
方法:Codepath(Codepathのオンラインコース)のようなコミュニティイベントを利用して、直接アドバイスをもらう。
ChatGPT
目的:高度な表現への修正や2行以内に収めるための最適化など、全般的なチェック。
ワンポイントアドバイス
アメリカのジョブマーケットは急速に変化するため、履歴書が通らないのは必ずしも能力不足ではなく、そもそも企業があまり募集していない可能性もあります。そのため、周囲の就活生と情報交換をし、どの企業が最近大量採用しているかを把握すると良いでしょう。
参考までに自分の履歴書のイメージ
応募
履歴書が仕上がったら、次はとにかくたくさん応募しましょう。
どこから応募するか
LinkedIn
LinkedIn、Glassdoor、Indeedなど、多数のジョブボードがありますが、基本的にLinkedInだけで十分です。GlassdoorやIndeedも試しましたが、求人はほとんど重複しているため、他のボードを選ぶ必要性は低いです。
Company Career Site
LinkedInだけだと見逃される求人や、興味のない企業の情報が混ざる可能性があります。狙いの企業については、公式キャリアサイトを定期的にチェックするのが良いでしょう。
Referral
リファラル(紹介)は面接の獲得に有効ですが、直接Hiring Managerに届くかどうかが重要です。昨今の状況では、一般的なリファラルはほとんど効果がないケースが多いです。ただし、Hiring Managerと直接つながりがある場合は、内部情報を得やすく、面接まで進む確率が高くなります。
私の場合、履歴書が通過した求人はすべて直接応募によるもので、リファラルは20回ほどありましたが効果は限定的でした。
応募タイミング
遅くとも1週間以内、できれば24時間以内の応募が理想です。
私は毎朝と夜に以下のリンクをチェックし、新しい求人を見つけていました。24時間以内のポストのうち、principalやstaff、mobile、embeddedなどを除外して検索し、ポストの時間順にソートしていた。また、後述するF1 HireのChromeプラグインでH1Bスポンサーしない企業を除外していた。
ツール
Simplify
Simplifyは応募フォームを自動で記入するツールで、多くの応募を効率化できます。
F1 Hire
F1 HireはH1BやPERMスポンサーシップの有無をフィルタリングするツールで、OPTで就職を目指す場合に必須です。
ATSツール
AIによるスクリーニングを突破するために、ATSツールによるJob Descriptionに最適化させるツールがありますが、自分は使っていませんでした。JobScanなどのツールを試しに使っていましたが、ツールは同じようなライブラリの違う書き方とかわかっていないし、しょぼいところの指摘をしてくれているので、結局使っていませんが、Job Descriptionにあるワードを履歴書網羅するようには意識していれるようにはしています。
Coding
Codingは履歴書に次いで重要な要素と言えるでしょう。企業によってはLeetCodeスタイルの問題を重視するところと、そうでないところがありますが、圧倒的に前者が多い印象です。また、面接の際にはGlassdoorで情報収集をするのが有効です。リクルータに質問形式を確認するのも良いでしょう。
練習の量
「何問解けば良いか」という疑問があるかもしれませんが、私は就職活動終了時点で250問しか解いていません。高頻度問題を優先的に解くことで、200問程度でほぼ全てのパターンを網羅できるはずです。
質問形式
多くの場合、30分で1問が目安です。自己紹介や質疑応答を除くと、コーディング時間は25分程度です。企業によってはコードを実際に動かす形式と、説明のみでOKな形式があります。
回答方法
コーディングに入る前に、面接官に「この方法で進めてよいか」と許可を得るのが重要です。練習してきた問題と似た場合でも、黙々と書き始めるのは避けましょう。
糸口が見つからない場合、素直に面接官にヒントを求めると良いでしょう。
自分が通っていたCodepathにはUMPIREというやり方を提唱しています。Understand -> Match -> Plan -> Implement -> Review -> Evaluateというステップになります。
https://guides.codepath.com/compsci/UMPIRE-Interview-Strategy
U:まずは、質問を理解しよう。わからないことがあれば例も含めて聞きましょう。
M:今までの解いてきたパターンにマッチしましょう。正解じゃなくても面接官と喋りましょう。This looks like a dynamic programming problemとか。
P:実際の解き方を説明しましょう。ここは一番難しいと思いますが、今考えている解き方をうまく説明できない場合は、コメントやら、Pseudocodeなどで書きましょう。自分はこれを意識していました、相手もやはり目にみえるものがあればなおさらわかりやすいし、考えがいまいち浮べない時は書いたほうが整理になります。ここでよくあるパターン(テックニック)として、一回BruteForceの解き方を説明し、このアルゴリズムは遅いのでもっと良いアルゴリズを提唱した方が面接官の評価があると言われています。
I:解き方について面接官の許可を取った後、コードを書きましょう。
R:コード書き終わったらチェック。実際のテストケースで試しましょう。
E:Time ComplexityやSpace Complexityはほぼ必ず聞かれるので、答えられるように練習しましょう。
練習リソース
Grind75: 高頻度75問、ほぼ全てのパターンは網羅しているでしょう。
NeetCode: 解説付きで初心者にも分かりやすい。
LeetCode Tag: 面接中の企業のTag問題を優先的に解く。
Mock Interview: Codepathやinterviewing.ioなどを活用。
役に立ったリソース
LeetCode was HARD until I Learned these 15 Patterns
結局パターンなので、パターンを意識して面接前まで網羅できるように練習しましょう
次回以降継続
System Design
Behavior Question
Offer
英語