✈️

ビッグテックにおけるソフトウェアエンジニアの面接

2022/12/13に公開

tl;dr

ビッグテックと総称される外資IT企業の選考過程で特殊な面接準備が必要だったので情報をまとめました。

おもに英語コーディング面接に焦点を当てています。

選考フロー

いわゆるビッグテックと呼ばれる会社の選考フローは以下のようになっています。

https://igotanoffer.com/blogs/tech/amazon-software-development-engineer-interview

https://igotanoffer.com/blogs/tech/google-software-engineer-interview

  1. 書類選考
  2. オンラインテスト
  3. 面接 (1H)
  4. 面接(1H×5回)

順に追いますが、書類選考を除くすべてのプロセスでコーディング問題が出題されます。これは、どのビッグテックでも同じ傾向にあります。

書類選考

ビッグテックと言われる人気のある企業では正面応募だとまず書類が通らないです。

ここでの第一目標はまずリクルーターとつながることです。正直、全プロセスの中でもっとも難しいと思っています。とくにわたしが応募した新卒1年目は情報系学位なし開発経験1年未満で、かつ英語も拙いというあまり外資企業にはマッチしないプロフィールでした。

こういった人間が書類選考を通るには、なんとしてでも潜り込もうという気概と行動力が大切になってきます。以下、わたしが試したことを列挙します。

正面応募 Cold Messaging[1] リファラル
結果 🙅(0/30) 🙅 (0/50) 😃 (2/2)

わたしは応募当初、驕り高ぶっていたため、アメリカのIT企業30社ほどにレジュメを送りつけて正面応募しました。結果、返信は1件もありませんでしたΩ\ζ°)チーン

つぎに試したのが、リクルーターに直接自分を売り込むことです。Linkedinでリクルーターの連絡先を調べて、「ヘーイ、もしよかったらワタシに興味ない?」と自分を売り込みました。これも悲しいことに1件も返信がありませんでした。

どうにもリファラルがいいという噂を聞いたので、必死にインターン先のメンターや学生時代の知り合いを探し、リファラルをお願いしました。結果、リファラルの場合は全通過でした。

リファラルにも強さがあり、一緒の会社やプロジェクトで働いていたというリファラルがもっとも強力です。顔を知っている程度のリファラルでも正面応募よりマシかなと思います。知り合いがいないと、そもそもバッターボックスに立つことすら叶わない厳しい世界だとヒシヒシと感じました。

学生はどうする?

学生はインターンとして短期・中長期問わずさまざまな会社を渡り歩くことができます。そしてまともな会社ならば、現役のエンジニアが教育コストをかけてくれます。

インターンシップは正直いって、お金がもらえる面白いPJに携われる知り合いができるといった美味しいところフルコンボで得な制度です。ぜひ活用しましょう。

わたしが学生なら、行きたい企業の卒業生が働いているベンチャーでインターンとして働くと思います。Estieなんかはex-Indeedの方がたくさん働かれていてとても楽しそう。

https://inside.estie.co.jp/entry/2022/02/22/184248

リクルーターとの会話

書類選考が通ると、基本的にはリクルーターと話をすることになります。「なんで転職したいの?」「どういう経歴?」「今後の展望は?」ということを英語で聞かれます。

基本的に彼らは重要な情報(他社の選考状況、経歴等)に関して忘れないようにメモをとります。どこのチームに行きたいのか、選考プロセスがどの程度かかるのかなど、ここである程度折り合いをつけるためです。

リクルーターは味方です。彼らはエンジニアを採用するごとにボーナスが貰えるので、採用できるのなら採用したいんです。良いリクルーターは業界全体の知識をもっています。信頼できそうだな〜と感じたら、ぜひ頼ってみましょう。

オンラインテスト (OA)

基本的にはHackerRankというプラットフォームで問題が2~3問出題されます。問題の難易度は会社によって違いますが、極端に難しい問題は出題されない印象です。

https://www.hackerrank.com/test/sample

電話面接

OAが通ると対面でのスクリーニング面接をすることになります。電話面接…まさか電話をするのか!?と思う方もいるかもしませんが、いまいまはウェブ会議が主流です。

内容自体は後述するオンサイトと全く同じなので、割愛します。

オンサイト面接

電話面接を通り、晴れてオンサイトに進むと1時間の面接を4~5回することになります。オンサイトではコーディング面接行動面接(とシステムデザイン面接)を課されます。行動面接とコーディング面接の時間配分は会社によって変わりますが、どの会社でも下図のフォーマットをとります。

A社 B社
行動面接 60分×1 60分×1 + 30分×4
コーディング面接 60分×4 30分×4

この面接でオファーが出るか否かが決まります。

行動面接

いわゆるふつうの面接パートです。あなたがどういう人なのか、過去にどういうことをしてきたのかを話すセクションです。

例をあげると…
  • なぜこの会社で働きたいの?
  • 今まででいちばん面白かったプロジェクトは?
  • 自分の職責外の仕事をしたことはある?
  • 同僚と意見が対立したとき、どういうアクションをとった?
  • 締め切りが厳しい場合、どういう対応をした?
  • データをもとにした判断をしたことがあったら教えて

どの会社でも聞かれることはほぼ同じなので、話すべきエピソードをいちど用意してしまえばどの会社でも使い回せるという利点があります。

わたしはこの面接がいちばん自信がなかったので、2週間くらいかけてうまく話せそうなプロジェクトを10個書き出し、それぞれについて要点をSTAR形式で書き出しました。

下記を満たすエピソードを、可能な限り多く用意するのが望ましいと思います。

  1. チームの誰かではなく自分がリードした
  2. 成功・失敗問わず結果がすでに出ている
  3. 熱く語れる

また、準備にあたり以下2つの動画をみることを強くおすすめします。ロボットのようにSTAR形式で話し始めるよりも、相手の理解度を確かめながら話すことが大切です。(わたしは熱くなると話しすぎてしまう癖があるので、耳がいたい…)

https://www.youtube.com/watch?v=hU6BVxtGd5g

https://www.youtube.com/watch?v=0Z9RW_hhUT4

コーディング面接

コーディング面接では、面接官と一緒にデータ構造とアルゴリズムに関する問題を解きます。IDEを一緒に見ながら、話したりコードを書いたりします。

この面接ではコミュニケーション能力とコーディング能力を測られます。

面接官の経験があったり、面接にすでに失敗していると「なにが良い面接か」がよくわかるようになります。良い面接とは、端的に言うと面接官と波長が合う面接です。

面接官は将来の同僚です。あなたは同僚と1on1で会議をするときどのように進めますか?またはどのような会議が嫌でしたか?シニア / ジュニアな人と話すときどういう点に気を使いますか?

このように考えると、良い面接について理解が深まると思います。

良い面接

面接官「やあ、ぼくはニック。ふだんは検索チームで検索アルゴリズムの改善に取り組んでいるよ。よろしく。」
候補者「よろしく!」
面接官「まずは自己紹介してもらえる?」
候補者「もちろん!わたしはアンナ。ふだんはペラペーラな仕事をしていて、昔はペラペーラをしていたよ。」
面接官「いいね!じゃあさっそく問題を解いていこうか。このリンクにとべる?。。。」


候補者「(議論を主導したあと)こうだと思うな!」
面接官「いいね!じゃあ実際にコードを書いてみてもらえる?」
候補者「(適切な変数名、モジュールの詳細度、エッジケースに考慮してしゃべりながら)まずはこの関数を定義して。。。」


候補者「(相手の理解度を確かめるために)英語に不慣れでごめんね。早すぎたり遅すぎたりしたら遠慮なく教えてね。」
面接官「(眠たげな眼をこすりながら)ん?いや大丈夫だよ!」


候補者「ここの実装は線形時間でできるんだけど、説明とかいる?」
面接官「(お、ちゃんとデータ構造について詳しいんだ)じゃあ軽くお願い!」


面接官「オッケー、良さそうだね!。。。最後になにか聞きたいこととかある?」
候補者「ペラペーラ、ペラ?」
面接官「ペラペーラ!」

悪い面接

面接官「やあ、ぼくはニック。ふだんは検索チームで検索アルゴリズムの改善に取り組んでいるよ。よろしく。」
候補者「よろしく!」
面接官「まずは自己紹介してもらえる?」
候補者「もちろん!わたしはアンナ。ふだんはペラペーラな仕事をしていて、昔はペラペーラをしていたよ。」
面接官「いいね!じゃあさっそく問題を解いていこうか。このリンクにとべる?。。。」


pattern 1

候補者「(問題がわからず黙り込んで)。。。」
面接官「(問題文を明確にしたり、エッジケースの質問まだかな)なにか質問とかあれば気軽にしてね!」
候補者「(やばい、なんもわからん)オッケー!」
面接官「。。。」
候補者「。。。」


pattern 2

候補者「(進研ゼミでやったやつやん、よっしゃー!)ガリガリガリ。。。」
面接官「(方針とかトレードオフとか会話しないのかな?)なにか質問とかあれば気軽にしてね!」
候補者「(コードを書くことに必死で無視)ガリガリガリ。。。できた!」
面接官「」


面接官「なんかコミュニケーションとれなかったし、No Hire」

良い候補者になるには訓練が必要です。しかし裏を返せば、英語に不慣れな非ネイティブでも訓練さえすれば良い候補者になれるということでもあります。

この面接においては、英語でのコミュニケーション問題パターンの把握がほぼすべてです。当然ですが、ふだん日本語で仕事しているひとが、第二外国語で流暢に面接をリードしていくことはできません。初見でバイナリツリーをトラバースしたり、ヒープやハッシュマップの計算量がわかる人間はいません。

練習問題を解くうちに「これはPre-orderでやればいいな。。。」「トポロジカルソートかあ」とパターンに当てはめることができるようになっていきます。

この2つを訓練しましょう。

英語でのコミュニケーション

ふだん仕事で使っているのなら特別に対策をする必要はありませんが、基本的にはTOEIC, TOEFL, IELTSといった英語試験で練習すると良いと思います。わたしは仕事で英語を使ったりYouTubeで英語動画をみたりして、コミュニケーション方法を学びました。

だいたいの感覚なのですが、面接で問題なくコミュニケーションがとれるのはTOEFL90が分水嶺だなと感じています。数値目標をたてて英語を勉強する!という方は、まず英語試験対策から始めることをおすすめします。

なぜ試験がおすすめ?

英語能力を測るという目的でもっとも信頼性があるのが、英語試験だからです。文法知識や聞き取り能力といった基礎がないと、いくら実践を積んでも上達していかないという現実もあります。

点数という形でデータが手に入るのも、能力向上を目指す上でとても有用だと考えています。正しい方向に努力しているのかを定期的に見直すキッカケにできます。

英語がある程度できるようになると、情報量や機会という点でほんとうに世界が広がるなと実感します。
自分にあったやり方で英語の試験対策することを強くおすすめします。

英語試験である程度点数がとれるようになったら、YouTubeなどをみて実践的なコミュニケーションを学ぶと良いです。面接は試験と違って双方向コミュニケーションなので、相手が自分のいっていることを理解しているかを気にかける必要があります。相手が良い面接官でヒントを出してくれたら、その文意を汲み取る必要があります。

慣れない英語で、自分が議論をリードしつつ、ステークホルダーに気を使うというのはかなり大変なことです。しかし後半2つはどんな仕事、ゼミや研究室での会議でも意識できるテクニックなので、磨いていきましょう。

余談ですが…(メルカリ)

エンジニアとして英語環境下で仕事がしたい!という方には、手前味噌ながらメルカリをおすすめさせてください。

メルカリでは所属しているエンジニアの半数が外国籍であり、実際に英語で仕事が行われています。わたしが所属していたチームも、国籍は全員バラバラ(日本、ブラジル、インド、アメリカ、フランス)でした。

給与も平均1000万近く出るし(ソース)、国内ならばどこに住んでいても良いし、チームランチ代は使い切れないほどもらえます。某G社をリスペクトしているのか、給与・福利厚生がひじょ~に手厚いです。

それにもかかわらず、日本人の候補者がとても少ないです。わたしはメルカリで面接官をしていたのでよくわかるのですが、こんなにエンジニアいないのか。。。と愕然としました。はっきり言って穴場だと思います。

ポジションはたくさん空いているので、ぜひ応募してみてください。リクルーター経由が良いという方は、信頼できるリクルーターもいるので、ぜひ彼に連絡してみてください。

問題パターン

面接に出やすい分野というのは大方決まっています。個人的には、以下ができれば十分だと思いました。

  • 典型問題が解ける
  • 使用しているデータ構造の説明ができる
  • 別解とのトレードオフを説明できる

典型問題は以下のサイトを参考にするのをおすすめします。

https://www.techinterviewhandbook.org/best-practice-questions

極端に難しい問題は面接ではまず出ません。それよりも、解法がたくさんある良問を深く解きこみ、人に説明しながら解けるようになることのほうが大切です。

大事なことなのでもう一度かきます。
解法がたくさんある良問を深く解きこみ、人に説明しながら解けるようになることが重要です。

おすすめは典型問題50問を当たり前と思えるレベル(いちど理解しても時間が経つと忘れるので要復習)に仕上げ、ひとに説明しながら解くことです。上記の問題はYouTubeで解説が多く上がっているので、典型問題の勉強ではYouTube動画を漁ってみるとよいです。

https://www.youtube.com/watch?v=KLlXCFG5TnA&list=PLot-Xpze53ldVwtstag2TL4HQhAnC8ATf

時間があればさらに多くの問題を解いたり、Leetcode Exploreという勉強用のセクションを解いてみることをおすすめします。


わたしは合計で360問解きましたが、これはやりすぎでした。
上記の50問が完璧にできるのであれば50~200問で十分だと思います。

実践について

独り言をいって練習するのも良いとは思いますが、個人的にはやはり対面で練習し、フィードバックをもらったほうが身になると思います。

  1. シリコンバレーにあるJTPAというNPO団体の有志が、英語でLeetcode勉強会を開いてくれています。すでにUSのビッグテックで働かれている方、競プロ強い勢もたくさんいて刺激になります。主催者のかたの人柄が素敵で、初心者にも間口が広くつくってあるコミュニティなので、興味がある方はいちど覗いてみるといいかもしれません。

  2. nucさんをはじめとする、もとJPのGooglerがボランティアで模擬面接を行ってくれています。こちらは1on1のメンタリングになるので、ある程度Leetcodeや本での勉強でコーディング面接に慣れたなと感じたら参加してみるといいかもしれません。

  3. わたしは利用しませんでしたが、有料無料問わずモックインタビューを行っているサービスもあるようです。

  4. なんだかんだ実際の面接がいちばん良い練習になります。コーディング面接をやってそうな会社があったら、とりあえず応募して面接をしてみるのが良いです。

最後に

企業の面接というのは落ちても何度も受けることが可能です。たった1時間であったとしても、ふだん話さないようなエンジニアと話すことは割と面白く、学びもあります。

記憶に残っている学びは?

ある会社でシニアマネージャーと行動面接したときです。それまでわたしは自分が関わってきたプロダクトがどうユーザーに影響を与えているのかを深く追っていませんでした。


わたし「こういうものを実装したんだよね」
シニアマネージャー「なるほどね、んで結果は?」
わたし「?」
シニアマネージャー「開発したものがどういうインパクトを生んだの?」
わたし「UXを向上させたと思う」
シニアマネージャー「どういう指標をつかって計測したの?」
わたし「知らない」
シニアマネージャー「 (゚A゚ )」


ここでわたしは自分が開発したものがどういうようにインパクトを与えているのか、きちんと振り返るべきだったなととても後悔しました。そもそも開発自体がビジネスの一貫であり、エンジニアはその数字に責任を持つべきだったなと腑に落ちたんですね。

挑戦するだけならタダですし、海外で働いてみたいビッグテックで働いてみたいという方は国内外問わず空いているポジションがあれば、ぜひ挑戦してみてはいかがでしょうか。

長い文章でしたが、読んでいただいてありがとうございました。

フィードバックや質問がある方はTwitterまでぜひご連絡ください。
https://twitter.com/yuyakevinito


面白かったなという方はシェアをしていただけると嬉しいです。泣いて盆踊りをさせていただきます🕺

脚注
  1. Cold Message とは企業のリクルーターに自分のプロフィールに興味はないか?とダイレクトメールを送ることです。 ↩︎

Discussion