見出し画像

【21新卒SWE】 私はこうしてGoogleに落ちた ~Googleに挑んだ120日~

はじめに

私は来年度からエンジニアとして働き始める大学院生です.今年の春にGoogle Japan Software Engineer 2021年度新卒採用にエントリーし,落ちました.
オンサイトのコーディング面接は通過したものの,その後最終的に不合格となりました.
この記事では前半で選考の経緯について,後半で私が対策に使った教材について紹介させていただきたいと思います.

※最大限配慮しているつもりではありますが,もし載せるべきではない内容等がありましたらご指摘いただければ削除致します.

記事を書くにあたって

世の中には「私はこうしてGoogleに受かった」系の記事がいくつもあります.これまでGoogleに入社されそういった記事を書いて来られた方は皆さん素晴らしい能力を持った方々ばかりだと思います.しかし私は

「結局 "入社前に圧倒的な能力や経験値を持っていた" 人や "実力に加えタイミングや運にも恵まれた" 人が受かってるんじゃないの?」

という思いも捨て切れませんでした.いわゆる「生存者バイアス」のような感じです.一方で「私はこうしてGoogleに落ちた」系の記事もいくつかありますが,その中では「本当に受かるとは思わず十分な準備をしていなかった」と書いていらっしゃる方が多い印象を受けました(もちろん真偽はわかりませんが).

例えば競技プログラミングが強い人が本気で受験したらどうなるのだろう?余裕で受かるのだろうか?
残念ながら私は橙コーダーではないんですが,過去の「Googleに受かった / 落ちた」系の記事と比べても同じかそれ以上くらいには勉強・対策したという自負があります.具体的には1月から4月までの4ヶ月間,毎日のように一日中勉強をしました.何もない日は8時間,平均しても5時間ほどしていたので,120日間*5時間=600時間ほどを対策に費やしたと思います.(これを多いと思うか少ないと思うかは人それぞれかと思いますが,)これ以降紹介する対策の内容が,今後選考に臨む際の一つの目安になれば幸いです.

Google Software Engineerの採用とは

Googleの技術面接では,アルゴリズムやデータ構造,システムデザインなどについての知識を問うコーディング面接が行われます.「コーディング面接って何?」という話は他の記事を参照していただくとして,2021年度新卒採用の選考プロセスは以下のようになっていました.

・CV(履歴書)による書類選考
・オンラインコーディングテスト
・電話面接(電話で会話しながら共有ドキュメントにコードを書く)
・本面接(1日に4連続でコーディング面接を受ける)
・最終マッチング面接

CVを提出してから内定まではおよそ4ヶ月の長丁場でした.
※最終マッチング面接はある年とない年があるようです.

なお,本来本面接はGoogle本社に行ってホワイトボードにコードを書くオンサイト面接なのですが,今年は新型コロナウイルスの影響でオフィスに行くことができず,全てオンラインでの選考となりました.

Googleを志すまで(2019年)

そもそも私は情報系の大学院生で,研究では機械学習や画像認識に取り組んでいます.就職していく同期を横目に院進した私にも,昨年4月に修士課程に入るといよいよ就活の足音が聞こえてきました.私は自分の研究を生かせそうな仕事に就きたかったので,最近流行りの機械学習(ML)エンジニアとして就活することを考えていました.昨年の今頃は「Googleへ入りたい!」という思いはまだなく,Googleを意識したこともありませんでした.

就活の動き出しは人並みかちょっと早いくらいで,修士1年になった頃からMLエンジニア系のインターンを探して応募しました.ありがたいことにいくつかの会社に受け入れていただき何社かインターンを経験しました.また同じ頃,就活に役立つかもしれないと思いみんながやってるAtcoderをはじめ,8月ごろに緑色になりました.

私がインターンに応募していたのは「中に入らないと会社のことはよくわからない」と思っていたからなのですが,興味のある全ての会社にインターンに行けるわけではないので,知り合いのツテを辿ったりイベントに申し込んだりして時々会社見学にも行っていました.そしてそのうちの1つにGoogleがありました.私の研究室の先輩にGoogleに内定した方がおり,その方の紹介で11月ごろに渋谷Google Japan オフィスに見学に行きました.そこで社内を見たり仕事についてのお話を伺ったりしてGoogle社の素晴らしさを体感したのですが,その時点ではやはり雲の上の存在でした.

画像6

12月ごろになると,なんとなくMLエンジニアとしての就活に目処が立ってきました.少し余裕が出てきて「就活このままでいいのか」と考えたときに,もちろんMLエンジニア職として素晴らしい会社はたくさんあるのですが,Googleのような素晴らしい環境で働きたい,受かる可能性は低くとも挑戦してみたいという思いが大きくなりました.

研究室の先輩に話を聞くと,面接を突破するためにどのような勉強をしたかを教えていただきました.コーディング面接対策はMLエンジニアとしての就活対策とは全く異なり,新たに勉強すべきことが多くありましたが,挑戦したいという気持ちと時間的余裕があることを考えて,面接までの数ヶ月間をコーディング試験対策に当て,Googleに本気で挑んでみることを決意しました.これが昨年12月末のことです.

この時点(2019年末)での私のスキルはこんな感じです.講義や研究,MLエンジニアとしての就活には真面目に取り組んでいましたが,コーディング面接に必要な知識はほとんど持っていませんでした.

・東京大学大学院在学中
・機械学習の研究をしていてある程度コードを書ける
・機械学習のトップカンファレンスに論文を通したことがある(卒論がICCVに通った話
・機械学習エンジニアとして複数社でインターン経験あり
・ハッカソン等にも参加経験あり(Yahoo Hackday2019で3冠を取った話
・Atcoder緑(レートは950くらい)
・アルゴリズムに関する知識はほとんどない
・コンピュータサイエンスに関する知識もおぼろげ

これ以降,ひと月ごとに私が取り組んできたことを書いていきます.

勉強の開始(2020年1月)

2020 / 1
・年末年始 Elements of Programming Interview(EPI)を読み始める
・年末年始 Leetcodeを始める
・12/29 Leetcode weekly contestに初参加
・1月半ば 先輩と初めて模擬面接を行う
・1月末 EPIを一周する
・1月末 Leetcode 100問達成

Google選考プロセスの山場は何と言ってもオンサイト面接です.問題の答えとなるコードをホワイトボードに書きながら面接官と英語で議論するのは様々な能力が求められます.私は(順調に通過すれば)数ヶ月後に来るであろうオンサイト面接に照準を定めて勉強を始めました.

コーディング面接では候補者が好きな言語で実装することができます.私はその時点まで競プロをC++で解いていたのですが,コーディング面接ではPythonを使うことを決めました.理由はその簡潔さです.コーディング面接ではコードが正しく書けているかについて注意深くチェックする必要があるため,シンプルに記述できるPythonの方が本番で必要な部分に集中できると考えました.面接の初歩について書いてある記事でもPythonがおすすめされています.

まず私が始めたのはElements of Programming Interview(以下EPI)という本を読むことでした.非常に解説が丁寧で,簡潔かつ綺麗なPythonの解答例が載っているため非常に良書だと思います(全ての教材の説明は記事後半に書いています).また同時にLeetcodeを始めました.Leetcodeはコーディング面接のための練習サイトであり,もっとも実践に近い問題が載っているのでやる価値があります.私がネットで調べた感じLeetcode400問というのが合格の目安とされていたので,「そこまで言うなら400問解いてやろう.それで落ちたら『400問解いてもダメじゃないか!』と文句を言ってやろう」と思いました.始めは無料で使っていたのですが使いづらかったので1月終わり頃に有料会員になりました.

また,ありがたいことに研究室の先輩が模擬面接をしてくださるということになり,1月半ばから2週間に一度ほど面接練習をしていただいていました.初回は日本語で,それ以降は英語で練習しました.コーディング面接は面接官とのコミュニケーションが重視されるので,定期的に模擬面接をしていただいたことは最も重要な対策だったと思っています.

エントリーからオンラインテストまで(2020年2月)

2020 / 2
・2月前半 Cracking the Coding Interview(CCI)を読む
・2月中旬 EPI 2周目を読む
・2月中旬 CVを提出してエントリー完了
・2月24日 Leetcode200問達成
・2月26日 オンラインテスト → 3/3に合格連絡

EPIを一通り読み終わったあとはCracking the Coding Interview(以下CCI)という本を読みました.EPIと共通する問題も多いので比較的早く読み終わりました.その後はEPIをもう一度読み直すなどして基礎を固めました.同時にLeetcodeにも取り組み,2月のうちに200問を解いて目標の半分に達しました.LeetcodeにはEPIやCCIに載っているのと同じ問題もあるので,本を読んだ後確認のためにLeetcodeで実装するという流れがとても効果的でした.

また2月になるといよいよ新卒Software Engineerの採用がオープンになり,エントリーしました.エントリー締め切り期日は一次から三次まであったのですが,一次締切に応募したことになります.応募の際には英文で書いた履歴書(CV)1ページを提出しました.またこれも非常に幸運なことに,知り合いの繋がりでGoogleの社員の方にリファラル(社員の方からの推薦)を書いていただくことができました.

その後書類審査を通過し,次のステップとしてコーディングに関するオンラインテストを受験しました.最初だったので非常に緊張しましたがなんとか全て解ききり,1週間後に合格連絡をもらいました.

電話面接まで(2020年3月)

2020 / 3
・3月頭 競プロの問題に取り組む
・3月中旬 応用情報やシステムデザインに取り組む
・3/19 Leetcode300問達成
・3月下旬 EPIとCCIをもう1周
・3月下旬 Leetcodeで間違えた問題の復習
・3/21 Atcoderで水色になる
・3/27 電話面接 → 4/3に合格連絡

3月に入ると新型コロナウイルスの影響が大きくなってきており,面接が全てオンラインになりそうな雰囲気になってきました.またカフェに篭っての勉強もできないようなご時世になり,家で勉強を続けていました.外に出られず自宅でひたすら勉強するのは精神的にも辛いものがありましたが,疫病から逃れて自宅に篭っている最中に多くの歴史的発見をしたニュートンになったつもりで日々勉強をしました.

オンラインテスト後はまず競技プログラミングの問題に取り組みました.競プロに必要な知識を体系的にまとめてくださっているサイトの中級編と上級編を一通り読んだり,Atcoderの過去の400, 500点問題あたりを解いてみたりしました.Googleなどの試験では,例えばセグメント木や二部グラフマッチング問題のような難しめのアルゴリズムに関する問題はあまり出ないとされています.知識で合格が分かれる問題ではなく思考力を問いたいからです.私は,難しい知識を得るというより時間制限の中でじっくりと問題を考える訓練をするために競プロに取り組んでいました(単純にレートを上げたかったというのもありますが).そして電話面接の直前にはめでたくAtcoderで水色になることができました.

また,もう1つやるべきこととしてコンピュータサイエンス(CS)の基礎的な勉強システムデザイン問題の対策があります.私は情報系の学科に所属してはいたものの,CSの基礎知識が完璧かというとそうではありませんでした.他のGoogle入社系記事を読んでなんとなく
・CPU,メモリ,キャッシュ
・ネットワーク,セキュリティー
・データベース
あたりの知識があれば大丈夫かなと思ったので,応用情報技術者試験のテキストを読んでざっと概要を理解しました.また「Webを支える技術」という本も読みましたが,webの基礎について非常にわかりやすく書いてあり参考になりました.

システムデザインに関しては,記事後半でも紹介しますが主にこちらのサイトで勉強しました.ただ,システムデザインの問題は明確な正解がなく問題も多様なので,最低限の解答フォーマットを決めておいてあとは出たとこ勝負のような気持ちでいました.

電話面接直前期はもう一度EPIやCCIの書籍を読み直しました.私が一番避けたかったのは「ああ,この問題見たことあったのにうろ覚えで解けなかった〜〜」という事態だったので,せめて見たことのある問題は全て解けるように復習を繰り返しました.同じ問題でも2回目,3回目に見るとまた違った発見がありとても奥深かったです.またLeetcodeでもわからなかった問題に印をつけておき直前期に見直しました.

そして電話面接本番.面接官と電話で会話しながら共有ドキュメントにコードを書きました.時間内に問題を解き切り追加の質問にも答えることができたのでおそらく合格しただろうと感じました.1週間ほど後に合格の連絡をいただき,同時に次の面接がオンラインで行われることが連絡されました.

本面接まで(2020年4月)

2020 / 4
・4月頭 Atcoderの過去問D,E問題を解く
・4/6 Leetcode400問達成
・2週目 英語で問題を解くことに注力する
・3週目 もう一度system-design
・4/16 初めてPrampに参加
・4週目 EPIとCCIの復習4周目,Leetcodeで間違えた問題の復習(2回目)
・5/1 本面接 → 5/7に合格連絡

電話面接後は今まで通りLeetcodeの問題を問いたり,Atcoderの過去問を問いてみたりすることを繰り返しました.4月6日には目標としていたLeetcode400問を達成しました.400問解いたからといってあらゆる問題を解けるようになったわけではもちろんないのですが,「これだけやってダメだったら仕方ない」というある種の覚悟ができるようになりました.また並行してこれまでやった問題の復習も繰り返し行ってきたので,「今まで見た問題ならだいたい解けるはず」と言えるレベルになりました.

ここまでやってきて,残されたウィークポイントは「英語で会話しながら問題を解く」という部分でした.これまでも模擬面接をしてもらったり,自分で問題を解く際に英語で説明しながら解く練習を繰り返していましたが,面接の際に英語でうまくコミュニケーションできるかはやや不安が残っていました.

そこで私が始めたのがPrampです.Prampは無料で使えるコーディング面接練習サイトで,世界中の候補者たちと英語で話しながら面接練習ができます.私は以前マイクロソフトのエンジニアの方とお話しした時にこのサイトの存在を知ったのですが,日本では情報が少なく,また英語で見ず知らずの人と会話することのハードルが高くて始められずにいました.しかし面接を通過するには必要なことだと思い,4月半ばに初めて利用しました.本番までに5回ほど使ったのですが,英語面接に慣れるのにはとても効果的なサイトだと思います.

最終的に面接を受ける直前には,Atcoderは水色(レーティング1351)でした.調子がよければギリギリ青パフォが出るくらいのレベルでした.レートの緩やかな上がり方を見れば私が地道に競プロに取り組んだことをわかっていただけるかと思います.

スクリーンショット 2020-04-27 19.50.48

Leetcodeは491問解きました.難易度分布はeasy109問, mediam263問, hard119問でした.

スクリーンショット 2020-05-09 18.36.04

Leetcodeで毎週開かれるコンテストにも12回ほど参加した結果,レーティングは2006になりました(高いのか低いのかわかりませんが).調子がよければコンテストで300位くらいの順位という感じでした.

スクリーンショット 2020-05-09 18.43.31

本番の面接は通常オフィスに行ってホワイトボードに解答を書いていく形式ですが,今回はコロナウイルスの影響でオンラインの"Virtual Onsite Interview"となりました.本番はGoogle Meetを使い,お互い顔が見えた状態でGoogle docsにコードを書くという方式で,1日に4回の面接を行いました.面接はとても緊張しましたが,面接官との会話は終始和やかな雰囲気で行われ,私自身も面接を楽しむことができました.面接であるという以前に,今まで勉強してきた内容を元にGoogleの現社員である面接官と議論できるというのは非常に貴重でエキサイティングな経験でした.具体的には言えませんが,どの問題も「解き方がさっぱりわからない」という感じではなかったので,初めにそこそこ良さそうな(愚直な方法よりはマシな)アルゴリズムを説明し,その後ブラッシュアップしていくような展開になりました.

4つの面接は自己評価が5点満点中それぞれ4, 2, 5, 3くらいの感じでした.私の予想では過去の記事を見る限り,1つは×がついてもよく,1つはちゃんと解ける方がいい(つまり評価では5, 3, 3, 1あたりがボーダー)かなと思っていたので,自己評価の中ではそれよりもいい成績だったことになります.終わった時点で「これはもしかしたら受かったかも?」と思いました.そして約1週間後に合格の連絡をいただきました.そのときはとてもとても嬉しかったです.

最終面接とその後(2020年5月)

Virtual Onsite Interviewの合格と同時に最終面接の連絡がありました.最終面接はコーディングスキルを問うものではなく「リーダーシップとグーグルらしさ」を問うものだと言われました.この面接がどういうものなのかよくわからなかったのですが,おそらくこれまでの自分の経験やスキルなど,一般的な面接で聞かれるような内容だろうと予測しました.私はGoogle以前にも就活でいくつかの会社の選考を経験しており,そういった質問はある程度慣れていたのでおそらく大丈夫だろうと思いました.念の為,以下のようなサイトを見て聞かれそうな質問に対して答えを考えておきましたが,そこまでがっつりとは対策しませんでした.

そして当日,面接は日本語で行われ,特に大きな問題なく受け答えすることができました.会話している印象も悪くなかったので「これは多分大丈夫だろう」と思いました.

しかし,そのおよそ1週間後,私の元に不採用通知のメールが届きました.

正直に言って最終面接は問題ない出来だったと感じていたので,メールがきた瞬間目を疑いました.傲慢だなと言われるかもしれませんが,その時点では「おそらく受かっているのでは」という気持ちでいたので,メールを見た瞬間電車のレールの分岐器のように目の前で急に自分の進路がスイッチングされたような感覚になりました.不採用通知というのは何度もらっても身を切られるような苦しみがあるものです.

画像5

メールには合否判定の理由は書いてなかったため,これが最終面接の結果のみでの判断なのか,それともコーディング試験や経歴なども含めた判断なのか私にはわかりませんでした.長期間対策してきた以上理由がわからないまま終わるのはあまりに後味が悪いので,ダメ元で担当者の方に「何かフィードバックをもらえないか」という趣旨のメールを送ったところ,数日後に採用担当の方にフィードバック面談をしていただけることになりました.

面談ではまず「この判断はコーディング面談と最終面談を合わせたものだ」「あなたの評価は良くて非常に惜しかった」と伝えられました.全員にフィードバックしている訳ではないが,最終面接まで来てあと一歩だったのでフィードバック面談の機会を設けていただけたらしいです.そして,「コーディングスキルや知識に関しては高い評価だったが,解答にたどり着くスピードがやや遅かったのがクリティカルだった」と伝えられました.

どうやら不合格になった大きな要因はコーディング試験の評価の方だったようです.完全に私の予想ですが,コーディング面接の結果がボーダーラインの評価だったので,一度は合格し最終面接まで行ったものの,その後他の候補者との比較の中で最終的に選ばれなかったのではないかと思います.問題を解いた実感として,自分の勉強量や知識量が足りなかったという風には感じなかったので,解くスピードという観点では問題との相性もあったのかもしれません.あるいはLeetcode400問では足りず,もっと演習慣れが必要だったのかもしれません.結果的に,残念ながらLeetcodeで400問解いても受かるとは限らないことが示されてしまいました.また,推測の域を出ませんが,もしかするとコロナウイルスの影響で採用数が減っていたのかもしれません(Googleが採用活動を縮小するというニュースがありました).

しかし結局はこの結果は私の面接の出来によるものです.いくら惜しかったと言われようが落ちてしまったからには何にも関係ありません.600時間の勉強の末私の元に残ったのは不採用のメールだけでした.

対策に使った教材たち

落ちた分際で言うのもあれですが,自分なりに頑張って対策してきたつもりではあるので,対策に使った教材を紹介させていただきます.コーディング面接に対する知識がほとんどないところから勉強を始めたので参考になる部分もあるかと思います.

データ構造とアルゴリズム(書籍)

・Elements of Programming Interview(EPI)

私が対策にもっともお世話になった非常に素晴らしい本です.教材としては次に紹介するCracking the coding interviewの方が有名ですが,この本の最大の特徴はPythonで書かれているところです.Pythonの関数を最大限に活かしつつ非常に簡潔なコードで解答例が書かれているため,Pythonで面接を受ける方は読んで損がないと思います(C++, Java版もあるので安心です).

また,Cracking the coding interviewに比べて項目ごとの問題数が豊富なので,より体系的に勉強ができると感じました.

なお,これには日本語版がないので英語で頑張って読む必要があります.

・Cracking the coding interview

世界で闘うプログラミング力を鍛える本,原題はCracking the Coding Interviewです.コーディング面接対策の定番中の定番で,面接経験者に話を聞くとほぼ必ずこの本が上がってきます.他の候補者がこれを使って勉強している以上読まないわけにはいかないので私も読みました.EPIに比べると,Python版がない,一問あたりの説明がやや長いという点がややマイナスですが,解答コードを細かくモジュール化している点などは参考になりました.また,オブジェクト指向やシステムデザインに関する問題が豊富なのも良いところです.さらに,前半にはコーディング面接に望む姿勢や面接のポイントが紹介されており,心構えを学ぶ上でぜひ読んでみると良いと思います.

なおこの本には英語版もあるのですが,面接経験者の方の中には「英語と日本語両方購入して英語面接に備えた」とおっしゃっていた方も複数いました.

データ構造とアルゴリズム(練習サイト)

・Leetcode

私がメインで利用していたコーディング面接対策サイトです.過去に実際に面接で出題された問題が集まっており,多くの候補者が利用しています.問題数は1400問以上あり,easy, mediam, hardの3段階に分類されています.Google等への対策にはこれを400問解くことが目安とされており,最終的に私は491問解いていました.

問題の傾向や難易度は実際の面接と非常に似ています.例えばAtcoderのような競技プログラミングでは,数学的な考察力を問われる問題や法則に気づけば数行で解答できるような問題も多いのですが,Leetcodeにはそういった問題は少なく,データ構造やアルゴリズムを正しく扱うことができるかを問うような問題が多いです(勉強の成果が出やすいとも言えます).実際の面接ではhardレベルが出ることは少なく,mediamが確実に解けることが1つの目安になるようです.

無料で使えるのですが,有料会員(月35$)になると,見られるコンテンツが増えます.私は「Googleに入れるなら3500円なんて安いものだ」と有料会員になりましたが,非常に使い勝手が良くなり個人的には課金して正解でした.

また週に一回コンテストが開催されています.競技プログラミングのように90分で4問を解き,成績によってレーティングもつきます.私はほぼ毎週参加していましたが,60%くらいの確率で4完できる程度で,調子がいいと300位くらいの順位になりました.

他にも各企業ごとに出やすい問題ランキング(信ぴょう性は不明)が見える,模擬面接のような設定で問題を解いたりできる等の便利な機能があります.

・AtCoder

最近人気爆発中の競技プログラミングサイトなので私からの説明は不要だと思います.私はGoogleへの対策をする前からAtCoder自体は始めており,面接時は水色コーダーでした.現在ではレートが1500くらいになっています.

面接で出題される問題とはやや傾向が違って数学的な考察がより必要とされる印象はあるのですが,時間制限ありでじっくり考える点は対策に効果的だと思います.私は毎回コンテストに出場する以外に,過去のD-E問題を中心に復習していました.400点問題を見たらすぐになんとなく解法のイメージができるくらいになれば大丈夫かなと個人的には思います.

また以下の記事は各項目が体系的にまとまっていて非常に参考になりました.中級編,上級編を一通り読みました.

情報工学の基礎

面接ではコーディング以外に,情報科学の基礎的な知識を問われたり,システムデザインについて聞かれることがあると言われています.CPU,メモリ,ネットワーク等についてざっと勉強しようと思い,応用情報技術者試験の参考書を買って該当部分だけ読みました.参考書はなんでも良いと思います.

また,このサイトには面接で聞かれそうな技術的な問題が網羅的に載っています.これを全てマスターする必要はないと思いますが,例えば以下のTop 100 Python Interview Questionなどは参考になると思います.

システムデザイン

こちらのサイトがとても参考になりました.

システムデザイン問題は明確な解答がないので答えるのが難しい印象がありますが,どうやら解答には基本的なフォーマットがあるようです.このサイトでは,具体的な解答例がいくつか載っていて解答の作法が学べる他,システムデザインに関係する知識(スケーラビリティ,データベース,トラフィックの見積もりなど)の解説もあります.

英語

正直に言って英語力向上のための特別な対策は行なっていません.コーディング試験を過去に通過した方々の話をみると,(本当か嘘かわかりませんが)あまり特別な英語対策せずに臨んだという人が多い印象があります.おそらく英語が流暢ならば評価がよくなるという訳ではなく,あくまで英語はコミュニケーションのツールであり,自分の考えを伝えることができれば良いのだと思います.

なので私は根本的な英語力向上というよりも,面接を円滑に進められるような英語力をつけることを目指しました.具体的には,コーディング時によく使う表現を覚えるということです.参考書であるEPIやLeetcodeの問題を英語で読んで表現を学び,問題を解くときに自分で英語で喋って説明する練習を繰り返して英語に慣れました.

面接練習

コーディング面接と競技プログラミングの最大の違いは,面接官と対話しながら問題を解くことです.以前お話ししたIndeedのエンジニアの方が「Web試験で競プロのようにただ問題を解かせるのではなく,敢えてホワイトボードを使ったコーディング面接という形を取っているのは何故かを考えれば,面接でコミュニケーションが大事なことがわかると思う」とおっしゃっていたのですが,面接では「自分の考えを表現し,面接官と一緒に解答をブラッシュアップする」というプロセスが非常に重視されるのだと思います.これは一人で問題を解いているだけではなかなか身につかないので練習が必要です.

・模擬面接

もし知り合いに面接の経験者や同じく面接を控えた友達がいれば,模擬面接をしてもらう(お互いにし合う)のがとても効果的です.私の場合は研究室の先輩に2週に一回ほど練習していただきました.やはり英語で説明しながらホワイトボードにコードを書くのはまた違った難しさがありますし,自分だけで勉強する時には気付けなかった知識を指導していただけたのはとても重要でした.

・Pramp

もし近くに模擬面接できる相手がいない場合には,コーディング面接練習のためのWebサービスがあります.有名なサービスはいくつかありますが,interviewing.ioは日本では使えないらしい(?)ですし,Gainloは一回の練習で$100-200かかるようです.

日本で使えてかつ無料な練習サイトとしてPrampがあります.Prampの最大の特徴は,利用者が面接官と候補者両方の役割を交代して行うことです.Prampでは,面接の練習をしている利用者同士が自動的にマッチングされ,半分ずつの時間でお互いに問題を出し合います.また会話は基本的に英語です.

私は結局本番までに5回参加しました.出題される問題はそこまで難しくなかったのですが,英語で喋るとても良い練習になりました.日本語で紹介しているサイトがなかったのでいつか記事を書きたいと思います.

(7/31 追記) Prampの記事を書きました!


スクリーンショット 2020-05-03 18.41.24

最後に

面接を通して,最初の書類審査を除けば合否の判定は各試験の成績のみで判断されているように感じました.ですので書類審査を通過してしまえば,例えば学歴,インターン経験,競プロ経験のような経歴はあまり関係ない気がします.「Googleは雲の上の存在なので自分には関係ない」と思っている人も,コーディング試験の対策をしっかりとやって臨めば,おそらく全く手の届かない存在ではないと思います.またGoogleの採用フローは他企業と比べてもかなりしっかりしていて納得感があったので,受けてみて損はないと思いました.

ただ,コーディング試験の合否判定の基準は,過去の「Googleに受かった」系の記事に書いてあるよりも高いように感じました.私はEPIやCCI, Leetcodeで取り組んだ問題にはほとんど即答できるレベルになっていたと自負しているので,それでも採用基準には及ばなかったことになります.また私の他にも同期の就活組でGoogleを受けた知り合いは何人かおり,その中にはAtcoderでの橙コーダーや赤コーダーもいたのですが,残念ながら今回は皆不合格となっていました.他の記事が「頑張れば誰にでもチャンスがある」と締めくくっている中敢えて言わせていただければ,特に新卒採用においてはGoogleに入社するのはかなり難しいと思います.

私自身必死で勉強しても手が届かなかったわけですが,この勉強の成果を無駄にしたくはないので,もしいつか転職等の機会があるとすれば,コーディング面接を行っている企業にエントリーしてみたいと思っています.

最後まで読んでいただきありがとうございました.この記事がこれからコーディング面接合格を志す皆さんの対策の参考になれば幸いです.







いいなと思ったら応援しよう!