1. はじめに
私は、東京の渋谷オフィスにある、Google Research の音声チームの Research Scientist です。以前は、NTTの音声音響の研究所で、研究員をしていました。詳細情報は以下にあります。
私が入社面接を受ける際、「私はこうやってGoogleに入った」blog群が非常に参考になった一方で、研究系のポジションの情報は、全さんのtweet:
7年半前入社。知り合いの会社がグーグルに買収された後リファーされました。TOEIC等受けたこと無いですが英国に住んでたので会話は問題無し。研究職なので日常の研究・論文・HTSやHTK等オープンソース関連が準備でしょうか。アルゴリズムやデータ構造もオープンソース化で学びました。 https://t.co/a0Op7VAnk9
— Heiga Zen (全 炳河) (@heiga_zen) 2019年3月25日
くらいしか情報がなく、とても不安になったことを覚えています。執筆日現在(2022年4月10日)、私の所属するチームが Research Software Engineer を募集していることもあり、研究者の皆さんの心理的ハードルを下げるために、過去の記事を参考に、私がどう準備をしていたかの情報を記そうと思います。(なお、面接を受けていた時期は2020年夏のコロナ禍真っ最中でした。)
2. 面接までのプログラミングと英語の経験
おそらく、Googleのエンジニアリング関連の従業員の中で、最もプログラミングと英語ができない部類に入ります。
まず、プログラミングについて。おそらく多くの研究職の方がそうなのではないか?と思うのですが、このblog
やこのblog
で触れられているほどのコーディング経験はないのではないでしょうか?「C++?触ったことない...」「データ構造?ハッシュ?なんか大学時代て聞いたことあるような...」「Git?著者実装コードが落ちてるところ?」という認識の方も多いはずです。私もそうでした。いま思うと赤面モノの自己流スパゲッティコードを書き散らし、ドキュメントなんて書いたこともなく、コードレビューなんてものの存在も知りませんでした。逆に言えば、現在では沢山の先人の知恵が遺されているおかげで、準備を怠らなければGoogleに入れるということかもしれません。
次に、英語について。Googleに入る直前に受けたTOEICが680点でした。kumagiさんのblogにある情報とほぼ同じです。私は、論文の読み書きはしましたが、精度の高い翻訳サービスを使い倒しており、国際会議では石のように突っ立っているか、日本人の聴衆を捕まえて翻訳してもらっていました。
3. 応募まで(学生時代と前職)
音響学会誌の以下の文献に、転職までのキャリアを簡単にまとめてあります。J-STAGE から無料で閲覧できますので、ご興味のある方はご覧ください。
[1] 小泉 悠馬 "とある学生・若手フォーラム代表のキャリア", 日本音響学会誌, 77-1, p. 40-41, 2020.
前職には、挙げきれないほど沢山の退職ブログやヘイトtweetがあります。しかし、上記の文献でも書いた通り、私の前職での経験は、非常にポジティブなものでした。ただ、いつかはメジャーリーグに挑戦してみたかったのと、いくつかのタイミングが重なり、転職することにしました。
研究職での転職先を探しているときに、LinkedInで今のポジションの募集を見つけました。そのチームには知り合いの研究者の方がいましたので、メッセージを送ってみると「マネージャーと話をしてみる?」とお声がけをいただきました。ただ、後述しますが、巷で話題の"Googleコーディングインタビュー"
を通過できる自信が全くなかったので、その時は遠慮しました。ただ、お察しの通り、音声音響の研究職で、前職以上に学会で活躍できるところ、となるとほぼ候補がなく、腹を括ってGoogleを受けることにしました。そして、レジュメ(履歴書)を作り、現在のマネージャーと1時間ほどビデオ会議をし、知り合いの研究者の方からリファラルを頂いて応募しました。
4. 電話インタビュー
応募から1週間ほどでリクルーターの方からご連絡をいただきました。「ビデオ会議で、2回の面接をします。それぞれ、機械学習関連のコーディングと、研究内容を問うものです。」と言われ、いくつかの参考資料をいただきました。上述の通り、コーディングに全く自信がなかったので、面接日はその日から約1ヶ月半後にしてもらいました。
正直、ここが一番困りました。
ネットには、一般のプログラミングスキルを問う面接問題は山のように落ちています。例えば
とか
です。でも、どこを探しても、英語で探しても、「機械学習関連のコーディング」なんて情報はありません。しょうがないので、AtCoder と LeetCode を沢山解きました。まず方針を英語で説明して、説明しながらコード書いて、計算量の面でどこが改善できそうか、を説明する脳内シミュレーションも沢山しました。毎晩1時間以上、やっていました。1ヶ月半後には、それまでとは見違えるくらいコーディング関連の知識がつき「落ちたとしても非常に実りのある準備期間だった!」と開き直れるくらいにはなりました。
なお、研究ディスカッションは、まあポスターセッションみたいなものだろ、と腹を括り、苦手なコーディングに焦点を絞って準備をしました。英語は1ヶ月半でなんとかなるなら、こんな苦労してない!と開き直って何もやりませんでした。
で、蓋を開けてみると、普段から研究をするのに自分の手を動かしていれば答えられる質問でした。ただ、面接の脳内シミュレーションをしすぎて、それと少しズレた内容になったためパニックになり、受け答えは支離滅裂だったと思います。落ちたと思っていましたが、1週間ほどで「本面接に進みます」とご連絡をいただきました。
ですので、以降、受ける方には、「自分の想定と違う面接内容になっても落ち着いてください」と応援したいと思います。
5. 本インタビュー
上述の通り、コロナ禍であるため、本インタビューもビデオ会議で行われました。本来であれば、マウンテンビューで面接だったらしいので、正直ホッとしました。リクルーターの方から頂いた内容は、全さんの時と同じく、
インタビューは2日間。1日目は夕方から音声チームのメンバーに研究トーク。ロンドン・ニューヨーク・マウンテンビューの人たちに研究について話しました。
— Heiga Zen (全 炳河) (@heiga_zen) 2019年3月25日
2日目は1対1の面接x7(コーディング3、研究4)。コーディングはホワイトボードにC言語で書きました。
— Heiga Zen (全 炳河) (@heiga_zen) 2019年3月25日
という感じだ、と情報をもらいました。電話インタビューからの間は1ヶ月くらい空いていたと思います。研究トークのスライドを作ったり、上述のコーディング練習をその間も続けていました。Maeharaさんのblogも大変参考になりました。
特に、"Behavioral Interview"は英会話が絶対まずいと思っていたので、想定質問を100個ほど作って、脳内シミュレーションしました。
コーディングインタビューはやっぱり爆死しましたが、面接中にディスカッションしながらヒントを沢山もらって、なんとかなりました。研究面接は、他の人もよく言うのですが、その道のスペシャリスト(だいたい学会で見たことある人)と1時間、和気藹々と研究ディスカッションできる凄い機会なので、楽しかった、という記憶しかありません。
6. 追加インタビュー
面接後からは、精神面が少し問題でした。1ヶ月ほど面接の結果が来ず、毎日ソワソワした日々を過ごしていました。Quoraで毎日、"Google Hiring Committee" と検索していたのを覚えています。これ
とかこれ
を見ながら、毎日過ごしていました。
そして決定は、「研究内容に関する追加インタビュー」でした。こういう質問を見つけては、自己肯定感を高めるように努めました。
面接官は知り合いだったので、最近のその人の論文をいくつか読んで、あとは特に準備をしませんでした。
面接は変わらず研究ディスカッションだったので、最近の時間領域音声強調について、あーだこーだ言いながら終わりました。その後2週間ほどで採用通知を受けました。
7. 面接後から現在まで
採用通知をもらった時は、飛び上がるほど嬉しかったです。給料は Open Salary にある情報で概ね間違ってないと思いますが、入社年は、ボーナスとかの関係で、もうちょい低かったです。それでも前職の2.5倍くらいになりました。
上述の通り、今でもコーディングはダメダメなのですが、同僚のコードレビューのおかげで、社内で公開しても恥ずかしくないくらいにはコードが書けるようになりました。Pythonに関しては、Googlw SWE本の76ページにある「リーダリティ認定」(その言語に関しては、コーディング規則を守って書けますよ、と言う社内免許)を受けることができました。
研究に関しては、超大規模な計算リソースを使い、自由に研究できています。幸いにも、国際会議で賞をいただくことができたり、音声強調、音声認識、音声合成と幅広い範囲の研究に関わることができています。
Google Research Tokyo では、ポジションは少ないですが、たまに人員を募集しています。私の経験が、今後応募してくださる方の心理的ハードルを下げることに少しでも貢献できれば幸いです。