Dai MIKURUBE
14 min readApr 1, 2019

働き始めてから Google に転職して退職するまでの話。

日本の Google Software Engineer (SWE) な人たちが公で語り始める祭りが唐突に始まったので、乗っかってみた、というやつです。

(前回までのあらすじ) 今でいう競プロ (ACM-ICPC) にどっぷり浸かったり修士課程で一度折れて休学して留年したりしたあと、最初にフルタイムで働き始めたのが IBM の東京基礎研究所という、いわゆる企業研究所でした。

研修に力を入れている会社という触れ込みもあって、最初はいかにもな新卒研修なんかも受けたりしました。ただ、研究部門はちょっと̶浮̶い̶て̶い̶̶た独立していたこともあって、その後は営業や SI の人たちとあまり交流を持たず、今考えれば少しもったいなかった気もします。(とはいえ根がオタク気質なので性格と対人スキル的にしんどかった)

在職中、一番長く参加していたのが「Java VM (J9) が使うメモリ、その中でも Java で書かれたプログラムが使うヒープ以外のメモリ、の使われ方を分析してメモリ消費の削減につなげる」というプロジェクトでした。

成果という点では、第二著者で参加させてもらった上記論文にだいたい書かれています。(著者所属が一人だけ Google, Inc. になっているのは、転職時期のせいですね)

普段の仕事という意味では以下のような感じでした。

  • J9 組み込みのダンプ機能で吐かれたメモリ情報を集計・分類するプロファイラを Ruby で開発する (Ruby 1.9 が出たか出ないかくらいの頃)
  • 各種 Java ベンチマークを J9 で動かして、それを上記プロファイラで分析する
  • Ottawa の J9 開発チームと定期的にミーティングして、「こうだったよ」とか「じゃ次はこれ調べてみようか」とか相談する
  • 必要なときは J9 の方に拡張を試験実装して提案する

Ottawa とのミーティングが午前0時 (しかも金曜夜) とかになったりしたのはしんどかったし、世の中的には Java といえば Sun の HotSpot だと思われがちだったし、特許もあって外で話しづらかったのと当時 GPL のコードをほとんど読めなかったのは窮屈にも思いましたが、広く使われる処理系の研究開発現場はやはりおもしろかったし、そのチームは世界的にも「Java を速くしたと言えば」という人たちだったので、処理系・計測・高速化のイロハを叩き込んでもらえたのは大きい収穫でした。(自分の側が全部吸収できたのか、というのはおいておいて)

その J9 が、最近 OpenJ9 としてオープンになったのには、割とびっくりしつつも懐かしくなりました。

最近なくなってしまった (外には出さなくなっただけ?) のが残念ですが、毎年 IBM Research がまとめていた Global Technology Outlook (GTO) というのがあって、これを作る過程を見られたのはもう一つの収穫でした。

2019年現在、外部でいい資料が見つからないのが残念ですが、世界中の IBM Research の研究者が「次の10+年で起こりそうなこと」を議論し、その時点で既に起こりつつある事象を収集し、共通点や発展を見出し、一つのストーリーに仕上がっていく様は、個々のエピソードだけでも新鮮な上にそれが集約されていって「こんなこと考えるやつらがいるのかー」と驚きの連続でした。

今まで在籍した企業で、これに匹敵するほど「将来にわくわくした」ことは、後述の Google を含めてもなかったように思います。

こんな感じで東京基礎研究所での仕事はかなり楽しんでいたのですが、以下のような理由から、結局3年強で転職先を探しました。

  • 最初に自分を拾ってくれた当時の所長もそのころ退職された。
  • 世の中のほうが変わってきたころで、特にソフトウェアの領域では、研究で世の中に与えられるインパクトと、開発・エンジニアリングで与えられるインパクトの境界線がだいぶ曖昧になってきていた。研究でわかったことを実際に適用するまでのステップも、最初から自分で踏んでしまえばいいじゃん、と思い始めた。
  • 特許が、研究所として (特に取得件数首位を維持する IBM としては) 非常に大事なのはわかるのだけど、この特許というやつを特にソフトウェアにむやみに適用するのは、結局好きになれなかった。(新規のビジネスなどで戦略的に「守る」必要は納得していますが)
  • 研究所は仕事も人もとてもよかったものの、時はリーマン・ショック直後で業績は芳しくなく、給与制度などから「今は会社全体としては若者を歓迎してないんだなー」と端々に感じるようになった。(たぶん今はもっとよくなっていると思います)

こんなやつでしたが、今も研究所にいる方も、もう卒業された方も、今でも多くの方がとても仲良くしてくださっていて、ありがたい限りです。ここでのつながりは今でも自分の貴重な財産ですね。

あとは、退職する直前くらいの時期に近くで Watson の Jeopardy! 挑戦の話をしていて、これは本当に楽しみで、これをウォッチするために退職を延ばそうかと一瞬思ったくらいです。(さすがに延ばさなかったけど)

さて本題 (?) の Google ですが、以前 ICPC つながりで連絡をもらったことがあった当時の採用担当の方に、転職を考え始めたときにこちらからコンタクトしてみたのが始まりでした。

当時セルリアンタワーにあったオフィスに、とりあえず一度遊びに来ませんかと言われて遊びに行ってみると、いきなり面接が始まるようなことはなく (笑) やっぱり昔 ICPC をやっていたソフトウェア・エンジニア (SWE) の友人と、コンタクトした採用担当の方がいて、いろいろ具体的な話を聞くことができました。

当時は研究所内での異動も検討していたのでレジュメを出すのはしばらく待たせてもらったものの、異動について音沙汰がなかったので、「じゃあお願いします」とレジュメを送ると、面接がスケジュールされました。こういうところは融通を利かせてもらえましたね。

私のときは面接は2日に分かれて、最初に SWE 2人と面接したあと「次のステップに」という連絡をもらって、後日さらに SWE 3人と面接、という感じでした。

面接内容については、なにぶん10年近く前の話なのではっきりしたことは覚えていませんし、今とは違うかもしれませんが、競プロをやっていたからといって極端に有利になりそうな質問は特になかったと思います。とはいえそこは「スケールさせる」ことを常に意識する会社なので、競プロで計算量や実行時間に関する感覚が身についていたことは、若干役に立ったかもしれません。しかし、「コーディングクイズ」とか言われるような、「このアルゴリズムを知っていたら・書けたら採用!」みたいなことは、たぶん今でも無いと思っていいんじゃないでしょうか。

かざわさんの記事にもありますが、「比較的簡単に答えられる問題設定から徐々に難しい設定に移行する」感じで、「ではここで入力データの規模が n桁上がったらどうするのがいいと思いますか」とか「ここで入力が一括ではなくストリームで入ってくるとしたらどうでしょう」とか「この部分にこういう制約がかかるとしたら全体をどう変えていくのがいいと思いますか」とか、問題設定を変えながら「ソフトウェア・エンジニアとして自分たちと一緒に設計やコードの議論をして発展させていくことができそうな人か」を見ていると思います。(自分が面接官をやったときもそう意識していました)

逆に、いかにスーパーな回答コードを瞬時に書ける人でも、一緒に議論ができなさそうな人とは、一緒に仕事はできないと今でもみなされるんじゃないかと思います。

「コードや設計の議論を面接官と一緒に楽しめる人ならだいたい OK!」という基本線は、今でもそんなに変わらないと信じています。例えば自分のときは、あまり知らない領域の質問に対して、知らないなりに適当に喋ったり前提条件を適当に確認したり狭めたりしながら、その場で適当なアルゴリズムをひねり出してみていたところ、想定外ながらうまく動くように見えたらしく、「え、あれ、あー、それでもいいのか? ちょっと入力データ与えながら一緒に考えてみましょうか…」とかワイワイやっていたら面接時間終わった、みたいな記憶もあります (笑)

(あの話、結論出ないままだった気がしますが、もちろん間違っていたかもしれません)

そんなこんなで2日目の面接のあと、最初の社内レビューを通った旨や、今の年収や希望年収などの確認とともに、「リファレンスとなるかたを二人ご紹介」してほしい、「一般的には、大学時代の指導教官と会社の上司の方となります」という連絡をもらいました。

これが実はいちばんの難所で、在職中の上司に頼んでもいい顔をされるわけはないし、ライバル企業へのリファレンスは書けない規定があるのも珍しくはないので、最終的には指導教官と当時の研究室の助手の先生にお願いしました。けっこうすったもんだになった記憶がありますが、最近はどうなのかな。

その後オファーレターをもらいました。「学会や論文など研究寄りの活動も続けたい」と話していたおかげかはわかりませんが、ほぼすべてオープンに開発されていて外で話がしやすい Chrome チームに決まり、当時のマネージャーと相談する機会も入社前にもらえて、安心して入っていくことができました。ちなみに当時は、面接が終わってから社内レビューなどなどを通って最終連絡が来るまで、かなり時間がかかるのが一般的でした。最近はどうかわかりませんが…。

オファーは Base で1000万とはいかないくらい + Stock Unit という感じ (※ちょっとぼかす) だったと思います。前職から倍とはいかないくらい (※ちょっとぼかす) でした。昇進したりすると、それなりに上がったりしましたね。

当時は確か Stock Unit は額面とは別枠だったんですが、最近は Stock Unit が金額換算されて年収として扱われると聞きました。当時と今では、感覚が少し違うかもしれません。(評価額なんて4年の間にガクガク変わる気がするけど、どういう扱いなんだろう?)

外で言えない (今でも言えない) プロジェクトもちょっとやりましたが、やった仕事はだいたいオープンソースの WebKit (当時)や Chromium プロジェクトへのコミットでした。 HTML5 の新しい<input type="??">の WebKit への実装とか FileSystem API の仕事とかやっていたら2年くらい経っていました。

その頃に、自分の 20% でインターンさんと一緒に Chrome のメモリプロファイリングをやってみたら割と受けがよかったので、それが退職まで自分の主な仕事になりました。私の退職後に Chrome のメモリ管理周りはかなり書き換わって、このプロファイラは今は動かなくなっていますが。

Chrome といえばメモリ食いだと揶揄されていましたが、その実態を調べつつ、本当に食っているところはその部分のチームと相談して直していく、といった感じです。ちなみに揶揄に関しては、当たっているケースもあったけど、誤解のケースもかなりありました。(例: Windows のタスクマネージャーが出すメモリ使用量をそのまま理解しちゃいけません)

IBM でのプロジェクトと表向きは似ていたのですが、設計も実装も別物だったし、プロジェクトのやり方も以下のようにけっこう違っていて、自身が開発者側にいるからこその話の早さを実感できました。

  • Chromium からのダンプ機能自体も直接手を出した (当時 tcmalloc だったアロケータ周辺にいろいろ足したりとか)
  • Chromium の該当コンポーネントのチームの人たちといきなり話しに行ったりできた
  • 既存のベンチマークを動かしたりもしたけど、新しいベンチマークも作ったし、なにより実際に動く Web アプリケーションが社内にいくらでもあるので、そのあたりの人たちとも直接話しに行けた

いろんなところのいろんなチームの人たちと、ツールの売り込みから一緒に分析して議論して特定するところまで一貫してやれました。そのことで個人としても得たものは多く、例えば自分の英語スキルは、入社面接時点ではかなり微妙だったのが今は多少マシになったのは、だいたいこの頃に培われたものだと思います。自分から伝えたいモチベーションがはっきりあることをやると、壁にもぶつかりますが、いろいろ伸びますね。

成果でいちばん目に見えやすかったのは Chrome for Android で無駄に確保されていたメモリを特定したことでしょうか。わかれば直すのはすぐだ、みたいな単純な問題だったんですが、そういうのほど見つけにくかったりするもので。

チームでいえば WebKit, V8, DevTools, (Chrome for) Android, GMail, Google Docs など、地域でいえば本社のあるベイエリアを含め、ミュンヘン、ロンドン、パリ、サンクト・ペテルブルグ、ニューヨークなど、世界各地のいろんなチームに押しかけてあれこれ話したあと、ビールを飲んで帰ってくる、ということを繰り返すうち、「あいつは世界各地でビールを飲んでくるのが仕事だ」という、栄誉ある称号を獲得することもできました。

おおむね事実です

そんな感じで入社4年ほど経ったころ、これは「実ユーザーが実際にページを開いている環境でメモリがどう使われているのか」というのをちゃんと調査しないと、これ以上の実態はよくわからんね、という結論に達しつつありました。

とはいえ、ユーザーが実際にページを開いている環境というのはプライバシーの塊なので、もちろんそのまま見ることはできません。下手な調査の仕方をすると、パフォーマンスにも影響があります。どういうデータの取り方なら両面で大丈夫そうか、高いハードルに直面していました。

このハードルに挑戦するか、この辺で一区切りにするか、迷っていたところ、最初の IBM 東京基礎研究所の先輩がイギリスのレディングという街で始めた Ecrebo というスタートアップに誘われました。

創業した先輩を直接は知らなかったのですが、直接知っている先輩も何人か既に参加していておもしろそうだったのに加えて、以下のような動機を同時にいくつも満たすチャンスでもありました。

  • まだ人数の少ないスタートアップ的なところで働いてもみたい
  • 2C ではなく、がっつり 2B な業態の仕事もしておきたい
  • 日本以外の現地企業で働く経験も積んでおきたい
  • US は既に行ってる人が大勢いるし、ちょっと違う国に行きたい
  • 社内環境どっぷりなので、そろそろ違う経験を積みたい

残した課題にも未練はありましたが、えいやっと退職してこちらに参加してみることにしたのでした。

振り返ると (少なくとも当時の) Google という会社は、もちろん不完全なところも多くありましたが、総じて「お互い働きやすいようにしよう」とみんなが思って行動している会社だったと思いますし、それは今でもそんなに変わっていないという印象を持っています。

また、これも今どうかはわかりませんが、自分で「これやりたい!」と言ったら、思った以上にあっさり始められてしまう会社でもありました。

退職するのはもったいない気持ちもあったのですが、いいタイミングのかなりレアなチャンスだったので、そのときは挑戦してみたい気持ちが勝ちました。

Googleでの当時の同僚も、皆さん今でも仲良くしてくれていて、ありがたいことです。

さて、その後その Ecrebo も退職し、日本に帰ってきて Treasure Data という会社で働いていたのですが、今度は Arm という会社が Treasure Data を買収して2019年4月現在に至っています。

そのあたりの最近の経験も、近いうちに書けたらと思っています。(というのは、現職 Arm Treasure Data もとてもおもしろい会社で絶賛採用中なので、この機会に宣伝したいからです :) )