Googleに入社します
こんにちは。ばやしこと申します。
2022年7月より、Googleでソフトウェアエンジニアとして働くことになりました。
アメリカのTexas A&M大学のMaster of Computer Scienceを今年の5月に無事卒業し、卒業後の職としてGoogleからフルタイムのオファーを頂くことができました。
今後Googleを目指す方の助けになればと思い、Googleからオファーをもらうまで自分がどんな勉強や対策をしていたかについて、書かせていただきます。
また、留学に至るまでの流れはこちらの記事を読んでいただければと思います。
(入社予定のDurham, NCオフィス)
はじめに
こちらは私の体験をもとに書いている記事です。諸々の条件が異なれば、面接の構成や対策も大きく異なります。例えばシニア以上(GoogleだとL5以上、MetaだとE5以上。私はL4でオファーをもらいました)でのポジションを目指している方、データサイエンティストやマシンラーニングエンジニアなど、ソフトウェアエンジニア以外のポジションに応募される方、アメリカではなく日本のポジションに応募しようとしている方などは、書いてある内容はあまり参考にならないかもしれません。
私のスペック
東大理学部地球惑星環境学科卒、大学卒業時までプログラミング経験はほとんどなし
卒業後、約1年3ヵ月、日系企業にて海外営業の仕事に従事。
その後転職し、2017年8月~2020年8月の約3年間、ゲーム会社にてVRゲーム開発の仕事に従事。
2020年8月Texas A&M大学Computer Science学部の修士課程に入学。
2022年5月卒業&Google内定
Googleを志したきっかけ
留学をはじめ、Googleを受けるに至るまで、すべてのきっかけはLillianさんの記事でした。当時VR開発者として働いていた自分は当時、特に不満や不自由のない生活を送っていましたが、2019年8月にLillianさんの記事を読んで、異業種未経験からGoogleの選考に合格した人のことを知り、青天の霹靂のような大きな刺激を受けました。何となく自分も東大卒という共通点もあり、自分もGoogleに行けたりするのかなあ…という思いが頭を離れなくなりました。未経験から合格する人がいるということはおそらく地頭を見るタイプの入社試験をやっているのではと何となく推測し、それだったら自分もやれないことはないんじゃないかと考えました。
とはいえ、まだ大学院出願時点や大学院入学時点では本当にGAFAにアプライしようとまでは思っていませんでした。
以下、留学開始時からGoogleからオファーをもらうまで、時系列でお話ししていきたいと思います。
インターンのアプライ
アメリカの学生は夏休み(5~8月)の間に、企業で有給インターンをする人が多いです。そしてインターンの募集は前年の8月頃から始まり、11月ごろには多くの学生がインターン先を見つけていることになります。遅いところで同年の2~3月ごろまで募集しているところもあるというイメージです。なので、動きの早い学生は入学とほぼ同時に夏のインターンにアプライし始めることになります。
さて、これはアメリカに来た一番の効果だったかもしれません。コンピューターサイエンス学科の身の回りの多くの人が、GoogleをはじめとするいわゆるGAFAにアプライをします。正直なところ、自分が留学する前は自分などがアプライするのはおこがましいとすら考えていたほどでしたし、自分が採用まで至る道筋など全くイメージできていませんでした。そのくらい私にとって、GAFAにアプライするというファーストステップには大きな心理的障壁がありました。ところがアメリカに来てからは、Amazonの選考がもう始まっているらしいだとか、Metaの面接は難しいらしい、というような会話が同級生の間でかなり頻繁に起こり、自然と流れでアプライするような状況になります。
そういった雰囲気のおかげか、「まああんまり期待はしていないけど、友達のあいつももう出したみたいだし自分も(受かるとは思っていないけど)一応出しておくか」くらいの感じでした。
他にも同級生を見渡すと、「自分はビッグテックには興味ない」と言っていた人でも、いつの間にかビッグテックの入社試験の話をするようになっていたりするのを見てきたので、集団効果というのはやはり大きいと思います。(これが良いかどうかはまた別の話ですが…)
2年過ごして感じた感覚としては、アメリカのCSのマスターはアメリカの高収入なIT企業に就職してひと稼ぎしたいと考えて世界各地から学生が集まっている傾向があるように思われました。そしてこういった流れに自分も乗ることができたのは、アメリカに留学した隠れた恩恵の一つだったんじゃないかと思います。特にマスターの中でも、Texas A&Mではnon-thesisというオプションを選ぶことができ、研究などはせず、授業で単位を取るだけで卒業することができます。ソフトウェアエンジニアとしてアメリカで就職したい人がnon-thesisのオプションを、一方でPhDへの進学を考えていたり、研究に興味のある学生がthesisのオプションを選ぶ傾向があったように思います。
2018年にたまたまオフィスを観光で訪れたときの写真
このような経緯で人生で初めてGoogleを始めとするGAFAすべてにアプライしました。
アプライするにあたり、レジュメ(履歴書のようなものです)が必要になります。ただ、日本の履歴書のような感じとは全く違います。効果的に自分の経歴を相手にアピールするような表現で書く必要があります。
あとは社員からのリファラル(推薦状)があると面接にたどり着ける確率が上がります。リファラルがないとほとんど面接にもたどり着けないという話もあります。LinkedInやツイッターなどでコネを築き、こいつなら推薦してもいいかな、と思ってもらえるように頑張りましょう。私はインターン出願時には約50社、フルタイム出願時には約100社の会社に応募しましたが、そのほぼすべてが社員からのリファラルありです。
…とか偉そうなことを言いつつ、Googleのインターン出願の結果は無事書類落ちでした。リファラルありでも、インターンという比較的難易度の低いポジションでも、Googleの面接にたどり着くことすらできませんでした。これに関しては動き出すのが遅かったというのが敗因だと思っていて、大いに反省しているところです。8月に入学してから急いでコーディング面接対策やレジュメやリファラルなど、新生活や授業が始まって大忙しなタイミングで始めてしまったので、どうしても十分な時間が割けていなかったのです。目まぐるしい新生活が始まり、インターンのことを考えている余裕などないという感じでした。とにかく日々サバイブするだけで精いっぱいで、レジュメも中途半端な状態で、しかもアプライも遅れてしまったのが原因だったのではと考えています。もし2年間を振り返って過去の自分に一つ伝えておきたいことがあるとしたら、インターンの選考は入学前にもう始まっているということでしょうか。もし入学前からレジュメやLinkedInの整備やリファラル集め、そしてコーディング面接の対策など、必ず必要だと分かっていることに早めに取り掛かることができていれば、インターンの選考にはもっと余裕をもって臨めたと思います。そしてインターンのオファーをもらえば、フルタイムのオファーも近いです。(リターンオファーと言って、インターンでの仕事ぶりを評価されると、フルタイムでのオファーをもらえる人が比較的多いです。)入学前は出国手続きなどでかなり慌ただしくて自分はそれどころではなかったのですが、それでも入学直後よりは圧倒的に時間はありました。インターン出願時にそこまで準備できている学生もおそらく少ないので、入学前にどれだけ準備できるかでかなりの差がつくと思われます。そして入学前に十分に準備ができていれば、おそらく圧勝できると思います。ここに力を投入するのが、就活という文脈においてはもしかしたら一番コスパがいいのかもしれません。
自分はインターンに50社ほどアプライしましたが、面接まで進めたのは4社ほどでした。GAFAのうち唯一書類選考に通ったMeta(当時はFacebook)も、コーディング面接には手も足も出ず惨敗を喫しました。ほかの会社もコーディング面接はすべて惨敗で、面接中には早くも不合格を確信してしまうほどのありさまでした。この時の悔しさは計り知れず、約一年後のフルタイムの面接では絶対にこのような失態を犯さないように、一年間をコーディング面接対策に捧げることを誓いました。
とはいえこの時は本当にラッキーで、Dellで自分の応募していたソフトウェアエンジニアのポジションが選考にたまたまコーディング面接が課されませんでした。なぜかたった1回のBehavioral面接だけでオファーが来てしまい、DellのBoomiというチームのインターンに合格することができました。この時はまだまともにコーディング面接で戦えるレベルではなかったので、本当に運よくつかめた内定だったと思います。このラッキーを活かして、インターンで経験を積みつつ、来年こそは絶対に就活で無双してやろうと誓いました。
(通常ソフトウェアエンジニアのポジションの選考ではこのようなことはなく、インターンの選考であれば、コーディング面接2ラウンド+Behavioral面接1ラウンドという構成が一般的と思います。)
インターン
Dellのインターンでは、Performance Test用のパーサーを作ったり、テストのシステムを再構築したりしていました。また、インターン生全員が参加するハッカソンでは無事優勝し、インターン最終日の時点では全会一致で私にフルタイムのオファーを出すことが決まっていたようです。
インターン経験を積んでおくことは就活においてとても重要で、下記のようなメリットがあります。
・業務の評価が良ければその会社からフルタイムのオファー(リターンオファー)をもらえる可能性がある。→インターンの面接が比較的簡単であること、そしてインターンで成果を出せばフルタイムのオファーにつながることを考えると、おそらくこれが第一志望の会社からフルタイムのオファーをもらうための一番簡単な方法だと思われます。さらにおまけとして、第一志望でなくともフルタイムのオファーを一つでも持っていると、就活時の大きな心の支えになりリラックスして臨むことができるようになります。
・レジュメに書ける職務経歴が増えて、フルタイム出願時のアピールになります。
・さらには、アメリカでの就業経験があることで、アメリカで働くイメージがつきやすくなると思います。外資系や外資に近い環境での就業経験があれば問題ないかと思いますが、意思決定プロセスや社風、開発のフローなどは日本とはかなり違う可能性が高く、経験として持っておくととても良いと思います。また、アメリカでの就業経験はBehavioral面接の問答でも必ず活きると思います。
・あとは有給インターンの場合、3ヵ月で結構な額を稼ぐことができます。
そしてフルタイムの就活
ちょっと時系列は逆転しますが、フルタイムの面接を意識した就活対策(主にコーディング面接対策)は、インターンの内定が決まった直後くらいから始めていました。
ちょっと早いかと思われるかもしれませんが、それでも準備期間は1年あるかないかくらいで、絶対に成果を出したいと思っていた自分としては、これくらい早く始めていて本当に良かったと思います。
以下、アメリカでソフトウェアエンジニアとして就職するうえで必要になってくると思われるものを書いていきたいと思います。
ーレジュメを仕上げる(LinkedIn含む)
ーたくさんアプライする(できればすべてリファラルありで)
ーコーディング面接対策
ー模擬面接を多く行う
ーその他、コンピューターサイエンスの知識を頭に入れる
それぞれ、下記にて説明していきたいと思います。
レジュメを仕上げる
仕上げるというのは、内容を充実させる・書き方を洗練させるという意味を含みます。いくら就活対策を頑張ってもレジュメで落とされてはそれ以降には進めません。最初にして最大の難関といってもいいかもしれません。実際に各所から話を聞くところによると、就活においてはレジュメスクリーニングに通るのが最難関だという説が有力です。これは自分の経験とも合致しています。
私は一年かけて、インターンでの経験や大学のGAR(後述)でのVR開発のアルバイト、ウェブサイトの開発、ICPCの出場、ネットワーク系ライブラリへのコミットなどレジュメに書ける内容を頑張って増やしました。
また、恥ずかしがらずにLinkedInで知り合った人やGoogle社員、大学の同級生などたくさんの人をつかまえて見てもらいましょう。(ただ、私は現在入社直前の時期で少し忙しくなっているため、対応が遅れてしまう可能性が高いです。申し訳ありません…)そしてフィードバックをたくさんもらってください。時間をかけて改良を繰り返すほど良いものが仕上がると思います。ちなみにフルタイム出願時に一年前に自分がインターン出願時に書いていた自分のレジュメを見返すと、これは落ちるな…と苦笑してしまうような出来栄えでした(笑)
よくあるアドバイスとしては、レジュメではAction Verbを使えというのがあります。弱い動詞ではなく、具体的でかつ主体性のある、ネイティブの心に響く動詞を使えというものです。こちらの記事が一例ですが、こういった強い動詞を随所に入れて、リクルーターに読み飛ばされない、選ばれるレジュメを書くように心がけてください。
たくさんアプライする
2021年8月、Dellでのインターンで無事成果も出し、フルタイムのオファーも頂けることが確定したころ、フルタイムにアプライする時期がやってきました。
アプライするときのアドバイスとしては4つあります。
1.リファラルありで応募すること
リファラルがあると面接までたどり着ける確率が上がります。LinkedInやRepher.me、Blindなどのサイトを駆使して、なるべく全社リファラルありで応募するようにしましょう。リファラルなしで応募してもそもそもレジュメを見られない可能性も高く、無駄になることが多いと思います。
ただ、リクルーター経由で採用フローに乗った場合はこの限りではなさそうです。LinkedIn経由や大学の就活プラットフォーム、キャリアフェア経由でリクルーターから声がかかった場合、ほぼ確実に面接に進むことができます。なので、LinkedInなどでリクルーターに直接コンタクトを試みるという作戦も有効かと思われます。(なかなか返信は返ってきませんでしたが…)
2.とにかくたくさん応募すること
数を撃たなければ始まりません。応募する時点で自分で厳選していても、そもそも面接に呼ばれる保証もないのであまり意味がありません。仮に自分の能力が完璧にマッチしていても、向こうがちょうどほかの人材を採用したタイミングだったりというどうしようもない理由で、採用を見送られることも多々あります。リクルーターが私の卒業のタイミングを間違えていて面接中に採用を見送られたり、応募した会社がF1ビザでは働けないので面接後にしれっと落とされるなんてこともありました。そういうことは募集要項に書いていなかったりするので、応募前に知るのは難しいことも多々あります。このようにアメリカでは何かと予想外のことが起こるので、やはり数を撃たないとこちらも勝負にならないと感じました。
向こうが欲しい人材だと思ったら面接に呼んでもらえるはずなので、合うかどうかは向こうに判断してもらうというメンタリティで、とにかくたくさん出すというのが愚直ながらも正しい戦略だと思っています。
3.志望度の低い会社から順に、志望度の高い会社が最後になるように日程を調整する。
自分の中でPractice companyとTarget companyといった会社の優先順位をつけ、本命を受ける前になるべくたくさんの会社で練習を積めるのが良いと思います。
4.早めに応募すること
人より遅くアプライするとポジションがクローズしていくので、戦いがどんどん不利になっていきます。私は8月ごろからアプライを開始しました。5月卒業の学生としては少し早すぎるくらいなのですが、仮に早かったとしてもリクルーターが調整してくれたり、面接の日程を調整するのが先になるというだけなので、遅すぎてチャンスを失うよりは良いと思っています。特にインターンに関しては募集している時期が決まっているので、早い者勝ちのような側面もあります。就活においては常に早いほうが有利に動けるのではと思います。
ひたすらコーディング面接対策!
去年のインターン就活時の失敗を活かすべく、一年間ほど寝ても覚めてもコーディング面接の対策をしていました。
ひたすら引きこもって、あまり楽しいこともできなかったので、留学までしてなんで自分はこんな修行僧のようなことをやっているんだろう…と思う時も正直ありました。
しかし、去年のインターン出願時の苦い経験を思い出すと、やはりちゃんと対策をしてコーディング面接が簡単に感じられるまでやり遂げたいと思いました。
以下に、コーディング面接に向けてやったことを書きます。
大学経由でICPCへの参加
ICPCはIntercollegiate Competitive Programming Contestという、学生で3名のチームを組んで参加する競技プログラミングのコンテストです。自分は大学選抜され、北米大会まで進むことができました。プレッシャーや時間制限のある状況下で英語でのコミュニケーションをする練習になりました。また、世界レベルの学生のレベルの高さを間近で見て大いに刺激を受けることができました。
アルゴリズム系の授業を2つ
CSCE629 Analysis of Algorithms, CSCE430 Problem Solving Programming Strategiesの2つの授業を取りました。430というのはundergrad向けの授業なので特別な申請をしないと本来はマスターの学生は受けられないのですが、アルゴリズム力が面接の結果にクリティカルに効いてくることは明らかだったので取りました。また、アメリカの面接なので、アメリカの教育を受け、そこで用いられる語彙を学び、カリキュラムに沿ってアルゴリズムについて学ぶというのはとても有意義だと思います。面接官もおそらくアメリカのアルゴリズムのカリキュラムに沿って勉強してきた人が多いはずなので、彼らの頭の中にあるものと同じものを学ぶ(それも英語で)というのはとても役立つと思います。
LeetCode700問+その他コーディングサイト(interview bit, AlgoExpert, Kattis, Hacker Rank)約300問
一年ほどかけて、コーディング問題を合計1000問ほど解いたことになります。コーディング問題に関しては、たくさん解けば解くほど良いと個人的には思っています。(もちろん質も重要です)
ご参考までに、Googleオンサイトがちょうど終わった時の私のLeetCodeのプロフィールです。
LeetCodeにはかなりの情熱を注いできたので、いくつかやる上でぜひこうしたら良いのではと思うことを書かせて頂きます。
1.習慣化すること
たくさん解いて量で圧倒するという戦い方をしたいならば(私はこれでした)、数百問というのは一朝一夕でできる量ではないため、いかに習慣化するかがカギになると思います。個人的にはDaily Challengeを毎日解くことで習慣化するとよいのではないかと思います。毎日最低一問は解くことになりますし、それに付随して類題などを探して解いているうちに気づいたらたくさん解くことができていました。
2.自分の解法やその解説をLeetCode Discussに投稿する
上のプロフィールを見て頂ければわかる通り、私は自分のSolutionを93回に渡りDiscussというセクションに投稿しています。公式の解答のコードよりも良いコードを思いついたり、誰もまだ書いていない解法を思いついたりしたときに投稿しています。あとはコンテストが終了した後、誰よりも早くコードやその解説をDiscussに投稿したりしていました。自分のコードについてほかのユーザーからコメントをもらえたり、感謝されるというのは非常に楽しいものです。また、自分の解法を英語で図示したり簡潔に説明する練習にもなったと思います。
3.コードが通らないテストケースを自分で考えてみる
コードがすべてのテストケースをPassしたからと言って、必ずしもそのコードが正しいとは限りません。たまたま厳しいテストケースが抜けていて、通っているだけという場合が時々あります。私はLeetCodeのテストケースに3回ほどcontributeしていますが、常に制約内でもっと厳しいテストケースでやってみるとどうだろうかとか、こんなテストケースで試そうと思った人いないだろう、というようなもので試してみる癖がついて、開発者としてもとても良い習慣が身についたと思います。
模擬面接を受ける
そして実際の面接は、かなり慣れが必要になります。一般的にはやはり模擬面接は必ずやりこんだ方がいいと思います。
例えば45分間の面接の中で「バイナリーサーチツリーに、ノードをインサートする関数を作ってください」のような技術的な課題が与えられるとします。
1.簡単な入出力の確認
2.入力のサイズの確認
3.エッジケースの確認
4.問題の実装の方針の説明
5.時間計算量・空間計算量についての説明
6.コーディング
7.いくつか自分でテストケースを考えて、それを実行
8.コードをさらに改善
というあくまで一例ですがよくある面接の流れというものが存在します。これを慣れれば20~25分くらいでできるようにならないといけません。(そして早く終わらせると、2つ目の問題が来ます。)
皆さんがどのように面接に合格しているのかはよく分かりませんが、肌感覚としてはこれくらいが目安かなと思います。面接に特化した訓練はPrampやinterviewing.ioといったサイトで積めるよいと思います。私は両社のサイト合わせて35回ほど技術面接の練習をしました。コミュニケーションという観点からも、上手な人のテクニックをどんどん盗んでいくと良いでしょう。また、自分が面接官側の役割を担って練習することもできるので、面接官の観点からも採用したくなるエンジニアはどういう人か?逆にどういう行動をしている人は採用したいと思わないか?ということまで見えてくると良いではないかと思います。(実際、問題が解けなくてあからさまにイライラし始める人なども何人か見てきて、こんな人本当に要るんだ…という学びもありました笑)
コーディング面接に関してはアメリカのテック企業なら大体同じ流れで面接を行っているので、練習しておくとどの会社のコーディング面接にも対応できるようになるでしょう。
Behavioral面接に関しては想定される質問を大量に書き出し、それに対する答えを練り上げて、自然な笑顔でこたえられるように練習を積みましょう。こちらもpramp等のサイトで練習することができます。
コンピューターサイエンスの知識
コーディング面接ではアルゴリズムの知識や問題解決力を問われますが、もちろんそれだけにとどまらず、面接では当然様々なことが聞かれます。例外処理やソフトウェアテストのモッキングやスタビング、非同期処理や言語仕様についてなど、質問の幅は無数にあります。それは〇〇をすればいいですよ、というような書き方はできないほどいろんなことが聞かれうるので、何をすれば十分な対策になるのかは正直難しいです。Lillianさんが記事で紹介されている書籍も読みましたが、どれも役に立ったと思います。
あとは、自分はこちらの大学に来てコンピューターサイエンスの勉強に役立ちそうないろんな活動も行っており、それらが総合的に効いたと思っております。(あまり再現性のなさそうな情報になってしまい申し訳ありません)
・週2回大学でセミナーが行われており、そこで幅広い最新の技術の話をされていたので、聞くだけでもいろんな知識が入ったと思います。週二本くらいのペースで関連する論文も読んでいました。ちなみに先学期のセミナーはこんな感じの内容でした。
・学内のウェブ開発のサークルに所属して一つウェブサイトを製作しました。
・大学で取った授業も、すべて役に立ったと思います。(Distributed Systems & Cloud Computing, Graph Mining, Software Engineering, Analysis of Algorithms, Problem Solving Programming Strategies, Artificial Intelligence, Machine Learning, Deep Learningなどを取りました)
・大学でVRの研究をしている教授にコンタクトを取り、GAR(Graduate Assistant Researcher)というポジションに採用していただき、VR開発のアルバイトを一年ほどしていました。ちなみにですが、TAやGARというポジションに採用されると、時給をもらえるのに加えて授業料が全額免除になるため、留学費用を大幅に抑えることができます。CSの分野はポジション数が非常に多く年中どこかの研究室が募集しているため、比較的簡単にポジションを見つけられると思います。
・学内の競技プログラミングサークルに所属し、学内のコンテストにも多く参加しました。ICPCにも参加しました。
・LeetCodeのコンテストや大学のハッカソンにも参加しました。
ふわっとしていて申し訳ないのですが、こういった関係ありそうなものに幅広く触れておく、というのはとてもいいんじゃないかと思います。これだけをやればいい!というようなものはおそらく存在しないですし、就活対策というスコープにとらわれずにあえて少し余裕を持たせて幅広くやっておくことが、面接時の余裕やアドリブに耐えうる力を養うことにもなり、結果的に就活の成功にもつながるのかなと思っています。あとは上記のような活動を通じて、コーディング面接を一緒に練習できる仲間や、問題に行き詰った時に質問をしたり一緒にディスカッションができる仲間なども見つけておくと、勉強が捗って良いと思います。
面接の構成
Googleでは自分の場合、オファーに至るまでに合計16回の面接がありました。16回というのは面談を含めての回数ですが、面談も面接と同様に採用に影響してくるという気持ちで臨んでいたので、面接と同等にカウントしています。(実際はリクルーター面談などがどの程度採用に影響したのかは未知数です。)
また、16回はGoogleを受けた人の中でもかなり多いほうだと思うので、上限くらいに思ってもらった方がいいかもしれません。
Googleの選考は大まかな流れとしては
リクルーター面談
電話面接
オンサイト
チームマッチ面談
という流れになります。
自分の場合は以下のような構成でした。
リクルーター面談:3回
リクルーターに、レジュメの内容の確認、エンジニアとしての自分の興味分野、自分の強み、弱みなどについて聞かれます。
電話面接:1回
電話越しにオンラインのエディタを共有して、コーディング問題を解きます。
オンサイト:behavioral1回+コーディング面接4回
今はすべてバーチャルで、Google Meet越しにコーディング問題を解いたり、behavioralの質問をされます。
追加オンサイト:behavioral1回
オンサイトのbehavioralで少し不足があった部分について追加で面接をされました。
チームマッチ面談:6回
私のスキルセットに興味を持っているマネージャーと面談をし、本当にマッチしているかを見極めるためのコールです。
上記のように、自分の場合はリクルーターが途中で何度か交代したこと、諸事情により電話面接とオンサイトの間がかなり空いてしまったことなどが重なり、リクルーターコールを3回もしておりますが、これは通常1回だと思います。また、チームマッチ面談はカジュアルな面談だと言われましたが、これは実質面接だと思ったので手を抜かないようにしましょう。マッチするまではオファーではないですし、複数回連続でマッチしなかったときは本当に心が折れそうになりました。当初Bay Areaのオフィスを希望していたので、なかなかチームマッチングしなかったのかなと思います。(最終的に私は、Durham, North Carolinaのチームとマッチングしました。)
ちなみにほかのレベルのオンサイトの構成としては、
L3(新卒レベル)では
Behavioral 1ラウンド(30分) + Coding 4ラウンド
L4(博士新卒、経験2~4年レベル)では
Behavioral 1ラウンド(45分) + Coding 4ラウンド
L5(シニアレベル、経験4年以上~)では
Behavioral 1ラウンド(45分) + Coding 3ラウンド + System Design 1ラウンド
という感じになります。システムデザインに関しては自分はちゃんと対策していないので、語れるほどはよく分かりません。Google以外のいくつかの面接でシステムデザインについて問われましたが、内容としてはDistributed Systemという大学院で受けた授業で大部分がカバーされるような感じでした。大規模なシステムを作るにあたり、どのようにスケールさせるか、どのように遅延を最小化するか、などのテーマをもとに面接官とディスカッションをするという形式です。
また、面接の流れについてはほぼ同時期にGoogleを受けていたこちらの方々の記事も非常に参考になると思います。私の経験した選考の流れとも非常に近いと感じたので、ご興味のある方はぜひこちらも読んでみてください。
面接のメンタル的なお話
就職活動も順調に進み、Meta・TikTok・Dellの三社からオファーをもらえ、あと残るはGoogleのオンサイトだけとなった頃に、Twitter上でたまたま元Googlerの方から模擬面接をしていただけると声をかけて頂きました。
この方々はLillianさんの記事にも登場する方々であり、まさかその方から連絡を頂けるとは全く思っていなかったので、これは「流れが来ている」と思わざるを得ませんでした。非常にアツい流れだと思いました。
今思えば、この機会は本当にありがたく、私に当時足りなかった面について、たくさんのフィードバックを頂くことができました。頂いたアドバイスは実際の面接でもすぐにそれを活かすこともできたように感じます。
私にとって特に重要だったものは、面接ではちゃんと会話をしよう、というものでした。
これは私は長年患っていた病のようなもので、私は面接中に、相手の頭の中にある答えを当てに行こうとするという癖が染みついてしまっていました。それによる弊害は2つあると思っていて、
・間違えを過剰に恐れ、面接が正解を当てに行くゲームのようになってしまいます。これが癖になっていると、何かを提案したり、自分の考えを分からないながらもわかる範囲で伝えたり、不明瞭な点について明確にしようとする努力をしたりといった自発的なコミュニケーションができなくなる可能性があります。
・この考え方だと、なるべく丁寧にゆっくりミスのないように対応しなければという姿勢になってしまいます。(これは必ずしも悪いことでもないのですが、実際そもそも面接は、必ずしも減点方式だけではないので、多少間違えたり分からないことがあっても、自分から議論をリードするくらいの小気味良さで進んだほうが、加点要素も増え、面接官からしてもいろんな面を評価しやすくて助かるという側面もあります。)
面接中に面接官は、あえてストレスをかけたり、難しいことを聞いて知識の確認をしたり、それに付随する反応を見るということをすることがあります。その時に「間違ってはいけない…間違えると減点される…」というマインドは非常に悪いです。自分の知ってる範囲の知識で、面接官と会話をしに来ているんだ、というマインドのほうがあるべきコミュニケーションに近いと思います。
繰り返しになりますが、面接官とは会話をするというのを心がけるといいと思います。自分も面接官も人間なので、どちらかが間違えることもあります。変な質問をしてしまうこともあるでしょうし、思い込みで間違った回答をしてしまうこともあるでしょう。そのくらいの小さなミスはあって当然で、むしろ新たなコミュニケーションが生まれるチャンスと捉えましょう。面接官との会話の流れの中で問題解決に取り組む、というのを意識するとよいと思います。
こういったメンタリティ面でのアドバイスを頂けるかもしれないので、もし模擬面接を依頼したい方は、こちらの団体(競技プログラミング同好会競技就活部門)に連絡してみると良いでしょう。私はボランティアで累計10時間ほど模擬面接やフィードバックをしていただきました。特にメンタリティに関しては、面接でとても活きたと思います。本当に感謝しております。
最後に
なぜ自分がGoogleに受かったのか、決め手を何か一つだけ上げろと言われたならば、それはアメリカに来たからだと答えます。留学でアメリカに来ることで、同級生たちから刺激を受け、Googleに応募する際の情報も自然と入り、自分も気づいたら目指していました。入社に関する情報が非常に集まりやすい環境だったと思います。また、仕事を辞めて意識的に後がない環境を作ったこと、そして集中できる環境に身を投じたことも効いてきたと思います。
自分は学部時代は情報系ではないので、もしかしたら日本でも情報系の学部だと似たような感じなのかもしれませんが、自分はアメリカに来たことでこの周囲からの刺激こそが一番大きなものだったと感じています。
ここからはちょっとポエムみたいになってしまいますが、
約2年前に、そこに行けば何者かになれそう、という直観の赴くままにアメリカに来て本当に良かったと思います。アメリカに行って何がやりたいの?卒業後はどうするの?といった質問は留学前にたくさん聞かれました。ただ、正直それらに対してちゃんと答えられるほど自分の進路に対して明確なビジョンはありませんでした。そんなこと聞かれても少し困ってしまう、というのが正直なところでした。
しかし、アメリカに来てからすぐに、同級生たちから刺激を受けて、GAFAのどこかを目指したいと明確に思うようになりました。このように環境が変われば見える世界も当然変わりますし、次の目標ができるということもあると思います。
なぜやるのか、何がしたいのか、についてあまり明確に固まっていなかったとしても、何となく面白そうだから、そこに何かがありそうだから、何者かになれそうだからというくらいの気持ちで、直観に従って新しいことに挑戦してみるのもよいのではないでしょうか。人生何が起こるか分からないものですよ。