2016/03/09

転職して7年が過ぎた

これを一部でシェアしたのは2014年なので結構前ですが、エンジニアのキャリアパスを考えるにあたって参考になるかと思って公開します。あくまで個人的な体験談で会社の見解などとは関係ないということに注意してください。

--------

入社日記念の無料マッサージクーポンのメールを受け取って気づいたんだけど、こないだで入社後7年が経過したらしい。僕は結構長い期間をここで過ごしたことになるんだなと思った。ちょっと以前のことを振り返ってみようと思う。言うまでもないけどこれは僕の書ける範囲での個人的な感想と体験談であって会社の見解等を表しているものではない。

きっかけ


そもそも最初は2007年にGoogle Japanのリクルーターからメールをもらったのがきっかけだった。Google Japanの知り合いから紹介で誘いがきて、「お、これは引き抜きってことかな?」と思ってよろこんで話を聞きに行ったのだった。話を聞いてみるとなんだか想像していたのとは違って、ただ採用面接を受けてくれといわれた。そちらからコンタクトがあったということで有利な点はあるんですか?と聞くと、書類や電話面接を抜きにしていきなり実地の面接から始まることですかね、というようなことを言われた。つまり特に有利になっているというわけではなく、その返答には結構がっかりした。とはいえ面接はたいして難しくもなく無事採用された。

モバイルUIチーム


一番最初にアサインされたのはモバイル検索UIチームだった。2007年当時のモバイルというと、ガラケーだった。まだiPhoneは存在してない頃で、iモードブラウザとかに向けて、そういう端末で表示可能な検索結果を返す、そのUIを作るのが仕事だった。当時はチームも小さかったし、また全世界においてそれなりにネットが使える携帯電話の台数は日本が相対的にとてもに多かったので、日本の仕事というのは結構な重要性を持っていた。

いまから考えてみると非常にどうでもよいテクニックばかり追求していたけど(たとえばHTMLのモバイル向けの亜流であるCHTMLで1ピクセルの横線を引くく方法とか)、そういうのを調べるのはそこそこ面白かった。

そうこうしているうちにiPhoneが発売された。今の世の中から考えるとiPhoneの発売開始は社会全体が大騒ぎするようなイベントだったように感じられるけど、当時は単なる普通の(コンピュータ業界における)一つの新製品という感じだった。

初代iPhoneは日本では発売されなかったので日本では実機に触れることができなかったけど、どういうものかは知っていたので早く使ってみたかった。いまでもよく覚えているけど、アメリカに出張にいったときに、モバイルチームのリードをやっているエンジニアにiPhoneをランチを一緒に食べながら、iPhoneを見せてもらった。「ほー、やっぱりこういう感じか」と思った気がする。使ったのは初めてだったけど知識はあったので驚きはなかった。

で、iPhoneは非常によく売れて、日本でも発売されることになった。当時はGoogle Japanは渋谷にあって、渋谷から原宿のソフトバンクのフラッグショップに急遽買いに行った記憶がある。そのときはあまりにも列が長すぎて、代々木公園に向かう歩道橋のあたりまで伸びていたので、あきらめて帰ってきて、後日あらためてゲットした。

しばらくするとAndroidも発売された。初代Android端末のHTC G1を会社からもらって結構楽しんで使っていた。G1は思い返してみるとちょっと古めかしい端末で、表と裏でスライドするようになっていて、スライドすると物理的なキーボードがでてくるようになっていた。BlackberryとiPhoneの合いの子のような感じがした。もらったのはSIMフリー端末でもあったので、ニューヨークに出張にいったときにプリペイドのAT&TのSIMを入れて使って、Google Mapsでセントラルパークとか博物館とかを観光をして回って、これはなんて便利なんだと思った。いまでは知らないところに行ってスマホでマップをみるなんて普通のことだけど、当時はまだみんな紙の地図を使っていた。

そのころにはすでに、iPhoneに最適化された検索結果が表示されるようになっており、まともなブラウザを積んでいるiPhone向けの検索結果はまだまだいくらでもできることがあるということで、エンジニアはみんなスマホ向けの検索結果のほうに力を注ぐようになっていた。いままでフィーチャーフォンのブラウザで四苦八苦してなんとかやりくりしていたのに比べれば、これは夢のような仕事だった。基本的には画面が小さいだけで、普通のブラウザでできることはJavaScriptでもなんでも使えるのだ。

しかし、スマホの仕事がメインになってみると、日本でやる仕事は今までと同じというわけにはいかなくなった。ガラケー向けには市場もあるし、日本にいないとできない仕事でもあるから、それがメインの仕事として成立していたが、スマホは全世界同じだから、僕もグローバルな機能を作成するというのがメインの仕事になってきた。

グローバルな機能を作るのは面白かった。自分の作った機能がアメリカでもインドネシアでもナイジェリアでも同じように表示されるわけだ。チープな携帯電話だけがネットに接続する唯一の手段であるような発展途上国のどこかの村のことを想像してみたりした。誰かにとって死活的に重要な仕事をしているような気がしたし、文字通り世界中で何億人もが使う機能を作るのは面白かった。

それと前後してアメリカに引っ越した。別に必要はなかったのだけど、やっぱりこの世界で仕事をするならシリコンバレーは本場かなと思ったのだ。

しかしフィーチャーフォンというガラパゴスがなくなり、また英語が下手という問題点が前面にでてくると、自分できることが少なくなってしまった気がした。というか実際少なくなっていた思う。その後はモバイル向けのイメージ検索結果を作ったりとか、デスクトップ向けの検索結果の機能とかを作っていたんだけど、前にやっていた仕事ほどにはインパクトがあるようには感じられなかった。

外国で外国語で仕事をするということ自体の大変さで別種の苦労は増えていんだけど、それはマイナスをゼロにするという努力であって、もともとその点で努力を必要としない人たちが活躍しているのをみると、こんなことでよいのかなぁと感じていた。もっと面白いことが起こってもいいんじゃないかと思っていた。

とはいえすぐにそんなものが改善できるわけでもなく、趣味のプログラミングでなにかを作ろうとふと思い立った。それで8ccというCコンパイラを作った。(そのほかにも作ったりもしたけど。)

コンパイラを作っているときは本当に集中していた。毎日午後6時までは仕事をするのだけど、その後は寝るまではひたすら自分のコンパイラを書いて、朝起きてもちょっと続きをして仕事に行くということをしていた。土日は起きてる間は基本的にコンパイラを書いていた。週末は1日14時間くらいはやっていたと思う。数ヶ月はそういう生活をしていた。

Cコンパイラを作った意義はそこそこ大きかった。きちんとしたコンパイラというのはかなり複雑なソフトウェアだ。僕が言語処理系や低レイヤに相当詳しいということを示すこともできたし、それ以上に自分自身での達成感が大きかった。しかしそんなこともしばらくたつと忘れていた。

コンパイラチームへ


その後1年くらいして、社内の誰かとチャットしていたら、面白い求人が社内で出ているという話になった。

最初に知ったのはAndroidのランタイムの求人だった。ここのチームに面接にいってみたら、何人かのエンジニアがでてきたんだけど、そのひとたちがすごい人たちだった。一人は、命令セットからすべて独自のオールTTLのCPUを自作して、それにlccというCコンパイラとMinix(という小規模なUnix)を移植したという、とても考えられないレベルの自作派のハッカーだった。コンパイラやOSを作るならともかく(それも普通ではないが)、その人はCPUやマイクロコードから作っていたのだ。もうひとりはガベージコレクションの専門家でゲーマーなプログラマだったと思う。彼には、日本人なんだったらどうして任天堂に就職しないの?と訊かれた。その疑問のほうが逆にすごいよと思った。結局このチームには採用されなかった。

LLVMのC++コンパイラチームにも話をしにいった。ここのチームのマネージャと話したときに、Cコンパイラをスクラッチから作ったんですよという話をしたら、「どうしてそんなことを? なぜ?」とマジレスされたのを覚えている。「どうしてっていわれても…… まぁ暇だったので」みたいにしか返事できなかった。「で、応募者結構いるみたいですけどどうやって決めるんですか?」と訊いたら「じゃあ君でいいよ」ということで、その場でチームを変わることが決まった。そういう流れでGoogleのLLVM/Clangチームに移ることになった。

ここはC++に詳しいひとたちばかりで、これがC++コンパイラ業界の最先端なのかという感じだ。このチームはC++の世界で、実装面でも標準化の面でもかなり存在感が大きいようだ。逆に言うと、本物のC++ハッカーでもCコンパイラを趣味でゼロから書いたというとびっくりするというのは、ちょっと驚きだった。ただ趣味で本を読んで実践していただけだけど、それがプロも驚かせるレベルになっていたわけだ。

そういえば僕のマネージャのマネージャはC++コンパイラハッカーでありつつ弁護士資格を持っているという人で、世の中とんでもない人もいるもんだなと思った。

あとこのチームのいいところはすべてオープンソースなので秘密が少ないことだ。僕が書いたコードは直接パブリックなのリポジトリにチェックインしているし、議論もすべて公開のメーリングリストで行われているし、最初からだいたいなんでも外から見えるようになっている。

Go言語


そういうわけでLLVMチームで仕事をしていたんだけど、だいたい僕はなにかを仕事でやると、別のことを仕事以外にやりたくなるものらしく、そのときにはGoでなにかをやろうと思って、Goの言語仕様をまず全部読んでみた。なかなかよさそうな言語に思えたので、ソースコードを読んでみることにしたら、いくつかバグを見つけたのでパッチを投げてみることにした。最後には50個くらいパフォーマンス改善およびバグ修正のパッチを投げて、コミット権がもらえるまでになった。

Goで働いている人たちもすごかった。Brad Fitzpatrickとは結構仲良くなったんだけど、かれはLiveJournalを立ち上げた人で、memcachedとOpenIDを作った人だった。Rob PikeはAT&Tベル研でPlan 9を作ったうちの一人で、神様みたいなプログラマだ。Goコンパイラをメインで書いているRuss Coxは青年時代から天才プログラマとして名が知れていた人物で、ある話によればRob Pikeがいままでみたなかで一番優秀なプログラマであると言っていたらしい。Rob Pikeは(Unixを作った)Ken Thompsonとかとも一緒に仕事をしていたから、そうしてみるとRuss Coxは世界最高のプログラマといっていいのではないだろうか?

で、Goを最近やっていて、という話をしていたら、LLVMのGo言語フロントエンドllgoのコードレビューをしてね、みたいな仕事が僕に回ってくるようになった。LLVMチームはC++は詳しいけどGoはよくわからないから、君が一番詳しいでしょ、みたいな。

このあたりまでくると、Ken ThompsonやRob Pikeとウィークリーミーティングをするとこまであと一歩といってよいのではないか? という気もする。Goチームがウィークリーミーティングしているのかは知らないけど、チューリング賞(コンピュータにおけるノーベル賞と言われる賞)の受賞者のチームと一緒に仕事をするくらいになるとしたら結構すごいと思う。

振り返ってみると、蛇足でどうでもいいことをやっているとキャリアにとってポジティブなことが起こってきた気がする。そもそもプログラマとしてGoogleに就職したのもそうだし(それまではプログラミングは片手間でメインの仕事というわけではなかった)、コンパイラチームもそうだし、Goだってそうだ。損得を考えてやっているのではないのに得になっているんだから、おかしな話だなと思うけど、世の中まあそういうこともあるのだろう。

--------

あとがき: 最近(2016年)は、LLVMのサブプロジェクトでリンカを作るプロジェクトのリードエンジニアになって、既存のものより倍くらいは速いリンカの開発を進めています。Unixの標準開発環境の主要パートを置き換えるプロジェクトというのは野心的だし、私がオリジナル開発者なので発言権もあって面白いです。これもまた、Windows向けのリンカを私が作ったら思いのほかシンプルで高速なものができてしまったのでUnixに移植したところからスタートしたという、おまけから始まったプロジェクトなんですが。

上は結論が特にない文章ですが、改めて読んでみるとこれは社内転職の話ですね。自分に向いているポジションを見つけることが大切だなと思いました。

大きな会社だと同じエンジニアリングポジションといっても多種多様で、Webプログラミングから私のやっているようなシステムプログラミング、あるいは巨大なデータ解析まで必要なスキルはかなり違います。プログラミングを片手間でやっていたところから今の会社に転職して、「なんだ俺でもこういう最先端の企業で普通にソフトウェアエンジニアとして通用するのか」と思ったんですが、今のチームに移ってみると「システムプログラミングだと俺はこういう会社でも明らかに上手い方に属しているのか」という発見がありました。最初からそういうプロジェクトに所属しておけばよかったんでしょうね。最初の頃はそんなに自信もなかったし、一度所属してしまうとそれなりに愛着ができたりして、なかなか難しいんですけど。

得意ではない分野でも役に立てばまだマシですが、個人的にどうみても見込みがなさそうなプロジェクトもあるわけで(別に批判的なわけではなく、会社には山ほどプロジェクトがあって、すべてのプロジェクトに自分が納得できるわけがない)、そういうプロジェクトにうっかりアサインされてしまったときには、極力早く見切りをつけて何らかの方法で脱出するしかありません。漫然と今の延長線上のことを続けていけば、うまくいくように周りの人が自分のためにお膳立てをしてくれる、ということはないですからね。結局のところ、どこにいても自分の仕事の選択は人任せにはせず自分で責任を持つしかないということでしょう。

筆者のTwitter / Facebook