takecian

Diary

29 Dec 2019

Google の中途採用を受けてオファーをもらった話

Google の SWE(iOS エンジニア)のポジションに応募してオファーをもらった。 こんなにストレスのかかる日々は久しぶりだった(転職活動ってこんな大変だっけ、と思った)のであとで振り返るためにも文章に残しておくことにした。

これから受ける人の参考になればいいなと思う。 もちろん面接で出た問題の話とかどんなこと聞かれたかとかは書いてない。

TL; DR

  • Google の中途採用を受けてオファーをもらった
  • 受けるまでに5ヶ月準備したことをまとめた
  • 面接を受けてからオファーまで3ヶ月ちょっとかかった

誰?

こんなスペックのソフトウェアエンジニア。

  • 阪大 修士(情報科学) → Sony → LINE
  • 言語
    • 仕事
      • Windows(C++, C#) 5年
      • Server(Java, Ruby) 2年
      • iOS(Swift) 5年
    • 競プロ
      • Python(AtCoder 水色)
  • 英語話者との仕事経験あり
    • TOEIC は6年くらい前に受けたのが確か800くらい

採用プロセスに進むまで

2019年の4月にリクルーターから Linkedin でメッセージがきた。 ちょうど「こうしてGoogleに入社した」系のブログが Twitter 界隈を賑わしていた時期。

Google に興味がないわけはないんだけど「どうせ受けても受からんだろう」という気持ちから新卒時にも中途でも受けてなかった。でもリクルーターから連絡が来るくらいなら書類選考的なものはパスできるんだろうと思って受けてみることにした。

ただすぐ受けても受からないだろうし「準備できたら連絡するよ」とリクルータに伝えて勉強(復習?)をすることに。

Google の採用プロセスは公開されていて、Computer Science の基礎的な部分(データ構造やアルゴリズムに関する理解)や応募した分野に関連する知識が問われるらしい。

CSの知識は学生時代に学んでから記憶の彼方に飛んでいってるので復習しないと話にならなそう。年始から AtCoder 再開してたんだけど競プロも面接の準備にちょうどいいと思ったので継続することにした。

準備

AtCoder、Leetcode、Youtube、本、模擬面接をやって準備した。準備期間は5ヶ月くらい。

最初から5ヶ月準備するって決めてたわけじゃなくて、 AtCoder で水色になったり面接の練習で慣れた感じになるまでに5ヶ月かかったという話。

Resume

職務経歴書と履歴書を1つにまとめたもの。調べたらどうやら外資系の企業を受ける時はこの Resume というものを出すらしい。主観だけど職務経歴書は自分が関わったプロジェクトとかをつらつらとA4用紙に何枚も書いていくものだけど Resume はA4用紙一枚分くらいしか書かないらしい。

想像だけど面接官は応募者の resume を読むのにそんなに長い時間はかけられないので(数分?)簡潔なものが求められるみたい(想像)

resume は tech lead の動画を参考にして作った。

余談だけど tech lead の動画は転職活動に関する話とかも結構あって、英語の練習も兼ねてたくさん見た。

コーディング関連

AtCoder

2018年に AtCoder を始めてたんだけど子どもが産まれてからは止まってた。 生活が落ち着いて再開したのが今年の2月くらい。最初から Google を受けようと思ってたわけではないけど転職活動するには勉強しといた方がいいかなと思って始めた。 だけど途中から AtCoder 自体が面白くなって一時期毎日解いてた。

最初「AtCoder Beginner Contestなんて名前のコンテストは楽勝でしょ」って思って参加したら全然解けなくて絶望した記憶がある。

Google を受けた時点で全部で400問を超えるくらい解いてた。ABC も結構出た。最近は子どもが寝る時間が遅くなってきて出れてないけど。

Rating

当時は「水色になってから Google 受けるか。まぁ5月くらいには水色になれるでしょ」とか思ってたけど全然そんなことなかった。水色に安定したのは7月とか8月になってから。

Leetcode

300問解いた。それと課金して Mock Interview もやった。Google の問題は全部やった、他の企業の問題は Online Assessment は全部やった(解けたわけではない)。お昼の時間と寝る前に平日ほぼ毎日やってた。

制限時間を決めて問題を解くのが大事だと思う。面接の時間はそんなに長くないので少し考えて分からなかったら答えを見るっていうのを繰り返しやってた。

あまり本を使って取り組まなかった。

  • 蟻本

    • 初級まで読んだ。全部は理解できてない気がする。
  • 世界で闘うプログラミング力を鍛える本

    • ざっと目を通しただけ。問題とかはあまり解いてない。

脱IDE

普段は IDE のコード補完機能使ってコード書いてるけど、コード補完がない環境でもそれなりにコードを書けるように練習した(引数名や関数名がちょっと間違ってるくらいは許されるだろうなと信じて)。

Youtube

Youtube を探すと coding interview に関する動画があったので cs dojo の動画をたくさん見た。字幕もあるし英語で coding interview を受ける聞き取りの練習にもなったと思う。

Google 自身も面接に関する動画をたくさん投稿していて、Resume の書き方、interview の準備の仕方について情報を発信している。

CS 全般の勉強

コーディング面接の練習以外にも 応募してるポジションの iOS 関連の復習やシステムデザインの練習もやった。でも基本的に iOS 関連の知識についてはこれまでの業務経験で得たものでどうにかなることを祈った。

Raspberry Piで学ぶコンピュータアーキテクチャ を少し目を通したり。

心の準備

受けるにあたって Google の中の人のブログをたくさん読んだ。 そこから感じ取ったことだけど「問題を解くことだけに注力しないこと」に気をつけないといけない気がする。

特に競プロをやっているとコーディング面接で出るような問題は「(競プロと同じように効率的に)解かないといけない」と肩にすごい力が入る。 「パッと思いつくのはO(n**2)の解法だけどもっと効率的じゃないとだめだろうから却下」ってなったりする、しかも頭の中だけで。

面接自体は解けるかどうかというのもあるけど、問題にどうやってアプローチしているかをみられている気がする。

最終的には効率的な解法にたどり着くのが理想ではあるけど、まずは愚直な解法で構わないので時間内に答えに辿り着けることが大事なんだと思う。 その後に最適化していくことで問題に対する取り組み方を面接官に伝えられると思います。(個人の感想です)

この辺りは Google の面接はどう難しいのか に詳しく書かれてる。

他にも中の人の twitter も見たりした。中には面接のアドバイスを話してる人もいて、

ここでは、

  1. 質問を確認する
  2. テストケースを考える
  3. 解法とメリットデメリットを話す
  4. コードを書く
    • もし途中で詰まったら、簡単な例(入力)を考えて、1ステップずつ進めてみる。
  5. コードのバグがないか確認する
    • さらにテストケースを考えてコードに問題がないかを考える

のようなことを言ってたのと、「white boarding(いわゆるコーディング面接)が技術的な能力やいいチームメイトである能力を測るものだとは思わない」ってことも言ってた。それと「だけど今のこの業界の採用プロセスはこうなってるのでやるしかない」みたいなことも。

というわけでやるしかないと割り切って自分なりに準備した。

面接練習

ホワイトボードで問題を解く練習をした。家にホワイトボードはないのでレンタル会議室で部屋を借りて練習した。週1回3時間の練習を3ヶ月くらいやった。同じタイミングで転職活動をする友人がいたのでその友人と問題出す役(面接官役)と答える役(応募者役)を交代でやって練習した。

これはやってみると結構発見があって、PC だと簡単に書けるようなコード(解けるような問題)がホワイトボードの前に立つとなかなか書けない(解けない)、ということがあった。

当たり前だけどホワイトボードだと書いたコードをコピペしたりできないので、そういう部分をうまく扱うことも細かいテクニックではあるけど重要な気がする。

それと競技プログラミングは一人で取り組むことが多いのであまり声に出すことはないと思うけど、ここで実際の面接に近い形式を体験したことで「今考えてることを言葉にする」練習ができたと思う。

慣れの問題なんだと思うけど事前に面接形式の練習をやって良かったと思った。

友人が面接官、しかも練習っていう設定でも結構パニックになったりした。本番だともっとやばいんだろうな、ということを事前に感じることができた。

本番

面接

まず電話面接を1回やった。事前の説明では電話面接が問題なければオフィスでの面接(オンサイト面接)を合計5回やるという話だった。

採用ページ にも書いてあるけど1回の面接がだいたい45分。

電話面接をパスしてオンサイト面接に進んだ。電話面接の次の日には連絡が来てたと思う。

5回の面接が終わった後にリクルータから「2回面接追加させて」と連絡があった。面接終わったと思ってたのにさらに面接があるって言われて精神的ダメージがかなりあった。

でもやるしかないので面接対策を再開して追加の面接2回も受けた。

というわけで電話面接を含めて全部で8回面接があった。そのうち1回を除く7回が全部技術的な面接だった。 楽しい時間でもあったししんどい時間でもあった。

ホワイトボードでコードを書くだけでなくPCでもコードを書く機会もあった。

英語

受けた面接のうちオンサイトの面接4回が英語面接だった。あとリクルータも英語話者だったので面接の事前説明や採用プロセスの説明とかフィードバックも全部英語。

英語は得意じゃないけどソニー時代に英語話者と仕事する機会があったのが役に立った。

そのおかげで「あぁ何言ってるか分からん」という状況に陥るのに慣れていたので(自慢できる話ではない)、 面接という1対1の状況かつどんな話題かが事前にわかっていたのでコミュニケーションはなんとかなった(と思う)。

基本的には出川イングリッシュのスタンスで臨んだ。

伝えようとする気持ち大事。

オファーまで

公開されている部分だったり、Quora で検索すると色々情報が出てくるけど Google の採用はオファーが出るまでにたくさんステップがある。

準備を終えて面接を受けようとリクルータにコンタクトとったのが9月頭。

そこから採用プロセスを進めていったんだけど面接と面接の期間が少し空いたりとか、追加の面接をやったり、その他のプロセスを進めてるうちに気付いたら12月半ばになっていた。

年内に結果は分からないかなーと思いかけてた所にオファー出るよってリクルータから連絡が来た。

面接開始からオファーまでだいたい3ヶ月半くらいかかった。

採用試験は大変

けっこう淡々と書いてきたつもりだけど、面接中はパニック寸前になったり(最初の面接ではキーボード打つ手が震えてた)、 面接終わって連絡が来るまで他のことをやる気になれなかったり、もう受けるの辞めたいと思ったこともあるくらい個人的にはかなりタフな転職活動だった(もう一度受けて受かる気がしない)。

同時期に転職活動する友人がいたから継続して準備を続けられたと思う。 一人で準備して受けてたらここまで来れなかった気がする。

最後に

というわけで Google の中途採用を受けた時のまとめでした。転職に限らず(資格試験とか)何かやる時は複数人で一緒にやった方が継続しそうでよさそう。

このメモがこれから活動する誰かの役に立つと何より。