わたしはこうしてVimとSplatoonでGoogleに入った(SWE/新卒/インターン編)

コンテキスト:https://togetter.com/li/1331865

# 自己紹介と略歴

haya14busa といいます(GitHub)。VimとGoとSplatoonが好きです。

## 2012年
 京都大学総合人間学部2回生。何もやりたいことがわからなかったころ、なんとなくウェブページ作りたい的なきっかけでプログラミングに触れる。最初期のころはブックマークレット自作したりしてベンリ~って遊んでた。
ほどなくしてVimと出会い、ハマる。

## 2013-4年頃
Vim プラグインの開発や日本のVimのコミュニティーが楽しくてずっとVimと遊んでた(参考1, 参考2)。
3回生後半くらいから就職を考えないといけない時期だったけど、いまだやりたいことは見つからずソフトウェアエンジニアわんちゃんあるのでゎ。。。R社でJavaScript触るインターンシップはなんとか採用されて経験できたけどまだ向いてるのかわからない。。。Computer Scienceを大学で学んでみたいという(半分モラトリアル的な)理由から就職ではなく京都大学大学院社会情報学専攻を目指しなんとか合格する。

## 2015年
Google Japan でインターンとして働き、フルタイムSWEになるための面接を追加で受け、オファーを頂く。

## 2017年
Google Japan に"すうぃ"として入社。今年の4月で丸2年。

いわゆる(ソフトウェア)エンジニア(社内用語だとSWE; “すうぃ”と読む)です
-- Google退職します|eqsan|note

## 2018-9年
第4回スプラトゥーン甲子園沖縄地区予選優勝。本戦トーナメント1回戦負けでベスト16

# プログラミング経験とVim

学部は情報系ではなかったので大学で学ぶとかはなく、基本的には趣味でVim script/JavaScript/Pythonを使ってなにか作りつつ学んでました。もはや死語っぽいけどいわゆる"遅延評価勉強法"ってやつで、作るために必要になってからトップダウン形式で学ぶ形式ですね。作りながら知識が増えていくので楽しいけれど、いまだに基礎的な知識が抜けてたりしてくるしむことがあるのでバランスを考えたほうがよさそうです。

特に印象的だったのはGoogleではない別のインターンシップの選考で基本的なデータ構造 (e.g. hash table) の詳細について聞かれて全然答えられずしっかり落とされたことでした。。。Google のインターンの選考はその1-2か月後とかだったので、そこから基本的なデータ構造やアルゴリズムを適当な本(Cracking the Coding Interview の日本語訳版とか)で勉強しつつ、ちょろっとプログラミングコンテストに出てみたりしていました。全然できなくて泣いてました;;(具体的に言うとだいたいAtCoder ABCのC問題が解けるか解けないかくらいだったと思う。)

つくっていたもののほとんどは Vim plugin で、if 文入れて機能を一つ追加するところから正規表現、プロトタイプベースなんちゃってオブジェクト指向、git/GitHub を使ったプロジェクト管理、コードの読み方書き方、後方互換性の大事さ。。。などなどいろんなことをVimを通じて学びました。vim-jp という日本のvimコミュニティーのチャットルーム (当時Lingr,現在Slack) でVimに限らずいろんなことを聞けたり議論できたのがとても自分には大きく得るものがたくさんありました。

レジュメには当時GitHub star +1000くらいの vim-easymotion というプラグインのメンテナを引き継いで改善した話と、incsearch.vim という当時Star +250くらいのプラグインをフルスクラッチで書いたことを載せました。あとScala/Play Framework/Angular 使ってバイトしてたこと(2014年頃)と、JavaScriptいじったインターンシップの経験を書きました。

Vim の話は直接的には書類選考でちょっとは見てくれたんじゃないか程度だと勝手に思っています。しかしその後のインターンでの仕事やコーディング面接などもすべて Vim を通じて学んだことが活きてると考えれば。僕は Vim で Google に入ったといっても過言じゃないのではないでしょうか?少なくとも僕のプログラミング能力の7-8割くらいはVimによって形成されています。

ちなみに僕を知ってる方だと Go の人とか reviewdog の人と僕を認識してる方もいるかと思いますが、このあたりはインターンでGoを初めて触り、オファーをもらった後の期間にやったことなので採用には関係なくレジュメなどにも書いていません。

# 英語

いわゆる受験英語は得意だったので、TOEIC用の勉強などはしない状態でTOEIC850くらいでした。 
・Reading: 受験英語+プログラミングのドキュメントも英語のサイトを適宜使ってたのでほぼ問題なし。 
・Writing: 時間かければなんとか伝わる文章くらいは書ける
・Listening: 受験/TOEICのリスニングくらいなら多少は聞けるが。。。
・Speaking: 無理ぽよ。。。(海外生活やまともなスピーキング勉強したことなし)

インターン始まって最初のチームのweekly meetingで何をいってるか何もわからなくてやべぇ。。。ってなったのを覚えてます。あとランチタイムの日常英会話は最後までムズカシくてわかりませんし今もムズカシイ。いまだにSpeakingとListeningは困っててよく聞き返したり、自分の言ってることが自分でもわからななくなったりします。。。そしてWritingが困ってないとも言ってない。

英語はできればできるだけ得なのは間違いないですが、とはいえ特にSWEであればコード書けたりSWEとしての仕事さえできてれば多少英語できない状態でスタートしても問題ないかと思います。優秀なのに英語がネック。。。と応募を躊躇してる方は思い切って応募してください。一番大事なのはSWEとしての能力で、英語は後からついてくるし、最初はweekly meeting で進捗をうまく英語で共有できなくても進んでさえいれば大した問題ではないし、デザインレビューもdesign doc自体がしっかり書けてればなんとかなります。

# インターン応募のきっかけ

ソフトウェアエンジニアを仕事にしようと決めた以外は、絶対ここで働きたいって会社や関わりたい分野とかも決めてなかったので、Googleなら入ったあといろんな選択肢があるし、少なくとも1度Googleという規模の会社に入ってみる経験はためになるかなぁと半分記念受験みたいな気持ちで応募しました。インターンシップは5-6社くらい応募した気がする。レジュメは締め切り数時間前にGoogle Docで書き始めて締め切り15分前くらいにすべりこみで出したのを覚えています。内容は上述しましたがインターン・バイトの経験と、作ったVim Plugin 2つについて書きました。ほんとは英語の添削とか誰かにしてもらいたかった。。。しかしカバーレター的なものは要らないし、要点だけシンプルに書けば十分だと思います。Resume Tips っていう公式ビデオみるのがおススメ。

# 面接

僕はインターンシップからフルタイムSWEにコンバージョンするというプロセスを経たので他の人が書いているような1日に4-5回面接するというプロセスではありませんでした。なお、このあたりは公式サイトに書いてないっぽいしNDA抵触してる気もするので怒られが発生したら消すとかなんとかします。(英語情報なども含めて漁ると出てくるし日本語で言ってる人もちらほらいるので実質セーフでいい?だめ?ほんとはだめな気がする。。。)

なおインターンシップの時期などなどインターン全員がコンバージョンするというプロセスを通るわけではないことと、インターンは何回してもいいし違うオフィスですることも可能です。また情報科学の領域でマイノリティーである学生(たとえば女性)向けの STEP インターンというプログラムもあります。

## インターン面接 
・Phone Interview (45min, Tech, 日本語) 1回
・Google Hangout Interview (オンサイトインタビュー相当, 45min, Tech, 日本語) 1回
・ホストマッチングインタビュー (確か日本語) 1回
## インターン後のコンバージョン面接
・オンサイトインタビュー (45min, Tech, 日本語) 1回
・オンサイトインタビュー (45min, Tech, 英語) 1回

Tech interview の内容は Google Doc かホワイトボードを使ってコーディングしたり(なお最近はオンサイトだとオフィスによっては Chromebook も使えると公式に書いてある)、基本的なアルゴリズムやデータ構造などなどについて聞かれたりしました。コーディング問題はそんなにムズカシくない自分が扱える範囲の問題がでたのでなんとかこなせたなぁと思ったり、例えばガベコレについての知識があいまいだったな。。。とか反省してたりしてました。僕はG社インターンの前にはてなインターンにも行っていたのですが、その時他のインターン生の競プロ勢がバケツソートについて話していたをそこで聞いて知り、一部バケツソートを使えたので勝手に大感謝してました。

インターンの場合はホストしてくれるチームがいないと開始できないので、インタビューの結果が良くてもホストが見つからなかったり時期をずらさないとできない場合があったりもします。僕の場合はメールでどういうことをしたいかリクルーターに聞かれたのに答えつつ、1チームいいかもしれないと連絡が来たのでホストマッチングインタビューで何するかとかお話しして晴れてインターンできることになりました。持ってるスキルセットや状況次第では選べたりもするハズ。

面接対策について。AtCoderみたいな競技プログラミングは間違いなくオススメですが、面接で聞かれるのはそれだけではない・Google が競プロができる人をとりたいっていうわけではないというところも言っておきたいです。どういうところをみているか、対策の仕方などはGoogleが公式に書いてます。

Interview - Google Careers
Youtube プレイリスト: Preparing to Apply or Interview at Google

競プロっぽいコーディング問題一つをとっても、考えてることを口に出してインタビュアーとインテラクティブに話して適宜説明したり、場合によってはヒントをもらったりすることもありますし、カッチリ入力/出力のフォーマットが決まってるということも少ないのでここも話しつつ明確にしていくといったプロセスも大事です。

また General cognitive ability / Leadership / Role-related knowledge / Googleyness の4つのエリアの強みをハイライトできると書いてあるように、例えばあなたがGCのある言語を使ったバックエンドエンジニアならガーベージコレクションを理解してるかとか、フロントエンドエンジニアならどうやってページを高速化するかといった "Role-related knowledge" も大事です。レジュメなどをみてこういった得意そうなところや、そのロールやスキルセットであれば理解しておくべき部分はとくに問われるハズです。

# インターンとSplatoon

Google では OKR (Objectives and Key Results)という客観的に評価可能な目標を定めて、その定めた目標に沿って振り返って評価するという働き方をしています。僕はインターンシップの(裏)OKRをこのように定めました。

・Splatoon を初めてインターンシップ期間中(だいたい3か月くらい)にS+に到達する

時は2015年秋ごろ、Splatoon 1が発売されて数か月くらいの大Splatoon時代でした。インターンするまではなんとなく楽しそうと思いつつ買ってなかったのですが、僕がインターンに入って最初の週くらいに社内Splatoon大会的なものがあって見学&ちょっとプレイさせてもらったり、社内の食堂のランチ・ディナータイムではSplatoonの話題が絶えない時代でした。京都から東京にインターンに来ていて特に東京にいてやることもなかったので、僕は入ったその週には気づいたらWii UとSplatoonを買っていました。なお僕のインターンホストも偶然僕と同じ日にSplatoon を買っていて、いまでもその人とは仲良くスプラトゥーンさせてもらってます。感謝。

インターンの仕事が終わって家に帰ったらSplatoon、土日も東京観光よりもSplatoon、社内の休憩時間やランチ/ディナータイムはスプラトゥーン談義をするという来る日も来る日もSplatoonをする生活でした。夜更かししたり1,2日やめられず完全に徹夜してしまい仕事のパフォーマンスに影響がでるハプニング(よくない)を乗り越えつつも、最後には(裏)OKRに掲げていたインターン期間中にS+という目標を達成できました。今は亡くなりかけの社内Google+でS+になったことをポストし、期待以上の成果だ!という評価をしっかり頂きました。脳死ステジャン52ガロンでコンフォートゾーンから抜け出しチャンスをたくさん作ってチャンスを掴み取る大事さをスプラトゥーンから学びました。

インターン(裏)OKR達成です!

# インターン(まじめ編)

まじめ編といっても詳しい内容をここには書けないわけですが、ざっくりいうとGoとAngularで社内向けシステムを書いてました。プロジェクトによってマチマチですが、僕の場合はある程度デザイン(設計)から始められつつ、コードもかけて、ジッサイの仕事と同じような体験ができるプロジェクトでした。

インターンを通じてGoogle 社内の異世界スタックに触れつつ、優秀なGooglerたち一緒に働くジッサイの業務に近い体験ができて、三食ごはんが社内カフェで出る福利厚生を堪能できるので、まずインターンに行ってみるのはオススメです。

またインターンをしておくと採用にインタビューだけでなくインターンの仕事内容も見てくれるので、僕のようなインタビュー問題苦手勢にとってはありがたいという意味でもおススメです。インターンなしだったら僕は何回やっても採用されなかったんじゃないかと思う。

# おわりに

## まとめ

・Vimでもなんでも、好きなことをとことん追求するのは大事だと思う。

Googleの面接をパスするために何をしたらいいですかと聞かれることもあるが、多くの場合「自分が心から楽しいと思うことをやること」と答えている。... 心から楽しいと思えなかったらあんなには力を注げなかっただろうし、身につきもしなかったと思う。
-- 自分がGoogleに入った時の話 – Tsutomu Ohkura

・ただSWEとして基礎的な部分は面接でも入社してからもとても大事なので好きなことだけしてるのもよくない(自戒)。
・スプラトゥーン採用は嘘だけどスプラトゥーンで社員の人と仲良くなった。ゲームだけじゃなくいろんなクラブ活動があるのでそこで交流できたりします。
・学生の方はインターンシップもオススメです。
・英語はできたほうがいいけど英語を怖がりすぎないでよい。
・少なくとも1度入ってみて損はない会社だとは思うので、僕より優秀なのに英語や能力的に入れるか不安。。。みたいな人は応募してほしい。面接は1年たてばまた受けられるので何度か落ちて入った人もいます。僕の場合は100回やったら99回は落ちるんじゃないかと思ってるので運がよかった。。。

## We are hiring!
SWE新卒採用 (Deadline: April 5th 11:59pm JST)
SWE一般採用
・インターンの採用ページはまた後日掲載されそう?
・知り合いの方は連絡していただけるとよしなにします。社食一緒に食べるだけとかでもぜひ~

## 蛇足
NDAもあるし何を言ってもよいか・だめかの基準がムズカシイのでこれまでほとんど何も書かないという戦略をとってきてたけど、このビックウェーブに乗るしかない!Googler って外に対するアウトプットやビジビリティが少ない気がするのが一つのちょっと残念ポイントだと思ってたのでこの流れは嬉しいし、自分の記事も生存バイアスに溢れてるし参考になるかはわからないけど一つのこういうひともいるよという例として書いてみました。

この記事が気に入ったらサポートをしてみませんか?