先を歩むエンジニアへのインタビューを通してエンジニアのキャリアについて考える本連載、今回はゼロからOSやScheme処理系を作り、現在はTwitter本社で働く凄腕エンジニアのhigeponこと蓑輪太郎さんにお話をお伺いしました。
[撮影:平野正樹]
危機感を感じた1社目
──higeponさんはいつもさまざまなことを勉強なさっていますが、いつごろから自ら技術を学び始めたのでしょうか?
higepon(以下ひ) : 2001年に入った初めての会社が大きいSI系で、技術に長けたチームに入れてもらえました。そこではモデルケースになるような優秀な先輩がいて、たとえばトラブルが起きたときに、自分で率先して原因を解明して、周りにも的確に指示を伝えていて問題を解決していたんですよ。その先輩から「しっかりプログラミングを勉強しないとまずいよ」と言われたんですよね。それで自分で実際に勉強をし始めたら、今いる会社の技術力が低いかもしれないと感じたんです。
──技術を深く知っていて、かつ課題解決できる先輩がいたんですね。
ひ: はい、でもこの先輩より10歳下の勉強していない先輩は、10年経ってもこの先輩のようにはならないと感じました。大学生から社会人になったときは、社会人でも勉強するなんてことは想像していなかったのですが、言われたことだけこなしていたらまずいと思いました。
──そういう会社だからこそ、危機意識が身についたのですね。それでどんな勉強を始めたのですか?
ひ: 最初は仕事で使うこともあってJavaを学びました。2~3年の経験を積んだころには、言われた仕事はかなり早くこなせるようになりました。次はもっとプログラミングを理解するために基礎的なことを、仕事では学べそうにないことをと考えたときに、OSを作ればいろいろなことが学べると思ったんですよね。
舘野祐一 氏
──それがのちのMona OS になるんですね。実際に作り出して、どれぐらいでOSのことを理解できましたか?
ひ: ゼロからだったので3~4年はかかったと思います。
──コツコツと学ばれたんですね。続けられたモチベーションはどこから来たのでしょうか?
ひ: たしかRuby作者のまつもとゆきひろさんも言っていたのですが、知的好奇心を満たす適切な課題があるとすごく楽しいんですよ。難しいけど頑張れば解ける問題が、どんどん並んでいると楽しくて。たとえばOSなら、どうやってブートするのか、そのあとのファイルシステムの読み書きはどうするのか、画面に文字を表示するにはどうするのかと学ぶことがどんどん積み重なっていって、ずっと楽しくてモチベーションを維持できました。
──それでも3~4年かけて作り続けるのはすごいですね。
ひ: 若いときは時間ならありますからね。
コードが書きたくてはてなへ
──2005年にはてなに転職されましたね。
ひ: 1社目の会社で、人やお金の管理といった、マネージャーの仕事をする先輩が増えてきたんですよね。僕は本当にコードを書くのが楽しいから、コードを書く仕事がしたくて、当時「はてなダイアリー」や「はてなアンテナ」を使っていたので、それを作っていたはてなに応募しました。
──昔話[1] なんで懐かしいですね(笑) 。そのころから英語を学び始めたと思うのですが、きっかけはあったのですか?
ひ: シリコンバレーに行ったとき、ピザ屋やスーパーで英語が通じなかったんですよ。受験のときは英語が得意だったので、ちょっとは通じるのですが、思っていた以上に通じませんでした。またGoogleがとてもエンジニアを大切にする会社だということを聞いていたのでGoogleで働いてみたかったのですが、そのためには英語ができないといけないので勉強し始めました。
──アルゴリズムやSICP[2] 、コンパイラも学んでいましたよね。
ひ: はてなではユーザ向けのサービスをゼロから作ったり、Webの速い開発サイクルを学んだりと、その辺は完全に満足していました。それ以外のところで自分に足りないものを考えたときに、僕はコンピュータサイエンス学科出身ではないので、アルゴリズムも難しいものはわかりませんし、コンパイラもブラックボックスだったので興味があったんです。
──ここでも仕事で満たされるところ以外を独学で勉強されたんですね。
中長期的な視点を身につける
──続いて2008年頭にサイボウズ・ラボに転職されましたね。
ひ: Webの速いサイクルでサービスを作る視点とは違った、もうちょっと中長期的なものづくりをしてみたかったんです。当時サイボウズ・ラボでは、テーマを自分で提案して自由に挑戦できました。
──最初にMosh というScheme処理系を作られましたが、なぜ作ったのでしょうか?
ひ: Moshを作った理由はいくつかあります。当時JavaScriptを中心に関数型のパラダイムがWebでもはやり始めていて、今後関数型の言語がWebを支える技術になり得る可能性があったこと、OSを作りつつコンパイラを勉強していたこともあり、純粋に自分の技術の興味分野と一致していたこと、自分自身が関数型のパラダイムがどんなメリットがあり、どんな場面で使うのか理解が浅かったこともあり、作る過程で概念を学びたかったことなどです。
──続いてMio というKVS(Key-Value Store )を作られましたね。
ひ: 当時はストレージにMySQLが、キャッシュにmemcachedがよく使われていました。ただ、両者のデータ構造にギャップが大きくて、その差をアプリケーションサーバ側で吸収するアプローチが多かったんです。それをもっとうまく行えるミドルウェアを実現したくてMioを作り始めました。実装言語にはErlangを使い、アクターモデルのメッセージングをベースとしたプログラミング作法も学びつつ作りました。
──関数型だったり、メッセージングだったり、毎回自分が知らない考え方を取り入れていますね。
ひ: そうですね、わからないのが怖いというのはありますね。たとえば今iOSやAndroidアプリの話をされても言っていることはだいたいわかるじゃないですか。でもそれが数年経って、2世代ぐらい先の全然違うテクノロジになったとき、会話のキーワードすらわからない状態になったら、エンジニアとして相当まずいじゃないですか。だから新しいテクノロジやパラダイムが出てきたときにわからない状態のままでいるのは、すごくリスクがあると思っています。だからといって全部学ぶと時間が足りないので、本当にわからないものに絞って学んできました。
──サイボウズ・ラボ時代はプライベートでは何を学んでいたのでしょうか?
ひ: ほとんど英語ばかり勉強していました。
──たしかにブログで英語のことをたくさん書いていましたね。higeponさんは努力の天才だと思っているのですが、どうやって毎日続けているのでしょうか?
ひ: いやいや(笑) 。毎日続ける努力、反復練習って、一度勢いがつくと簡単なんですよね。慣性の法則でも、一度動き出した物はずっと動き続けるし、止まった物はずっと止まり続けたままです。毎日続けるにはコツがあって、たとえば2週間に一度飲み会に行くと、その日の夜や次の日の朝の勉強がつらくて止まってしまいがちです。これで止まってしまうと、あとあと膨大な時間を失うじゃないですか。もちろん、飲み会で得られることもいろいろあるとは思うので、どっちを取るかという話だとは思いますけどね。
Twitterに入社してみて
──続いて2012年頭にTwitterに入社されましたが、何か転機はあったのでしょうか?
蓑輪太郎 氏
ひ: サイボウズ・ラボはとても良い会社で辞めたい気持ちはありませんでした。好きなテーマに打ち込んで、全部自分でやらせてもらっていましたし。ただ一方で、いつかは世界的にトップレベルの会社で働きたい気持ちもあり、ちょうどTwitterがエンジニアを募集していることを知って、面接に行って受かって、という感じですね。
──自分の腕が通用するかを試してみたかったというのもあると思うのですが、実際のところはどうでしたでしょうか?
ひ: 日本の会社なら入社して1ヵ月ぐらいで、どう期待されていて、どう行動すればよいのかわかるのですが、外資系の会社に初めて入ったこともあって、どう行動すればよいかよくわからなかったんですよね。一般的に外資系ではパフォーマンスが悪いとすぐ首になると聞いていたので、自分に与えられた時間を全力投球し続けたんですよね。それを続けていたら、周囲がきちんと評価してくれて「あ、ちゃんと通用するんだな」ということがわかったんです。
──なるほど。日本のエンジニアがサンフランシスコに行っても通用しますか?
ひ: 日本でアウトプットがあって、名前が知られているエンジニアの人たちは、英語の壁さえなければ必ず通用すると思いますよ。技術が好きで、それが原動力となっている人は、アメリカにもそんなにいません。
──アメリカにはどんなタイプのエンジニアがいますか?
ひ: エンジニアには大きく3パターンあると思っています。1つ目は有名大学のコンピュータサイエンス学科卒の超エリートの人たちで、スタンフォード大学を出て新卒でFacebookやGoogleに入るような人たちです。この人たちはピンキリで、すごい人からそうじゃない人までさまざまですね。2つ目は自分で起業して会社をやっている人たちです。起業する人のメンタルモデルは全然違うので、この人たちはどこでも通用すると思います。3つ目は海外から来る人たちです。自分の国のトップの大学を出て、アメリカまで来てチャンスをつかむというハングリーな人が多いですね。
自分の強み
──そんな活躍されているhigeponさんなんですが、ほかの人と差別化できている強みは何でしょうか?
ひ: 自分で感じていることはあるんですが、それを言う前に舘野さんからどう見えているのかを聞いてみたいです(笑) 。
──全部の技術を包括的に学んでいて、キャッチアップすべき技術は必ずキャッチアップしていると思っています。たとえば仕事とは別にモバイルアプリを作って、モバイルアプリでサービスを実現するとどうなるかを、UX(User Experience )から開発まで学ばれていましたよね。最近ならIoT(Internet of Things )関係の機材を買って実装したりと、興味がある技術分野なら必ず学んでますし、そうじゃない部分も必要ならば世の中の流れに合わせて学んでいると感じます。仕事においても「プログラミングしかしません」というわけでもなくて、場合によってはマネジメントもしたり、さまざまなことを吸収していっていて、どの分野も理解していると感じています。
ひ: おおっ、すごい良い風に見えている(笑) 。たしかに、将来困らないように学んでいるというのはあるかもしれません。僕自身はどう思っているかと言うと、「 いろいろな問題を1人で解いてきた」というメタなスキルが一番の強みだと思っています。解く問題は、Webだったり、モバイルだったり、OSだったり、良いユーザ体験を作り出すことだったり、もっと上のプロジェクトをうまく回すことだったりと、さまざまでした。今はテックリードという、チームの技術に責任を持つ仕事をしているのですが、コードレビュー、プロダクトデザインの議論、ほかのチームとのすり合わせ、目標期日までの開発などいろいろな要素が絡まる仕事です。でも、一つ一つの要素は全部過去に自分がやってきたことなんです。そのため、技術的にもプロダクト的にも、まずいにおいをかぎ取り、どこをどうすればうまくいくかが感覚的にわかって、うまく進めることができる力が身についています。その力が一番の強みかなと。
限られた時間をどう使うか
──higeponさんは家庭もあってお子さんもいらっしゃって、家族との時間もしっかり持ちつつさまざまな勉強をしていますよね。時間は有限ですが、どんなことに時間を使うべきか、higeponさんの視点からアドバイスをいただけますか?
ひ: 年齢的に20代後半ぐらいから、家庭を持って結婚する人、子どもができる人が増えてくると思います。そのときに仕事する時間、勉強する時間よりも、自分がどうありたいかについて考えることに時間を費やすべきだと思っています。楽しいので何も考えずに技術を勉強するとか、楽しいことだけをする時期はもう過ぎていると思うんですよね。自分のやりたいこと、やりたくないこと、人生で一番重要なことは何かを考えると、人それぞれの価値観が見えてきて、その価値観の中で自分の時間をどう使うかを考えるべきだと思っています。
──なるほど。
ひ: たとえば僕だったら、やりたいことはコードを書き続けること、あまりやりたくないことはマネジメントやお金の管理、重要なことは家族との時間です。そう考えると、コードを書き続けるためにはそのスキルを磨き続けなくてはならない、マネジメントばかりになりそうな会社には入らない、家族と一緒に過ごしたいから残業がたくさんある会社に入らないなど、自分が取るべき選択肢がだんだんわかってきます。そのうえで、自分がありたい姿と今の自分のギャップを埋めるには何をすべきかというのを徐々に考えていくのがよいと思います。
──実践している人は少なそうですね。
ひ: 僕も10年ぐらい前までは、自分の人生について深く考えたことなんてほとんどなかったんですよ。ただ、週に1回30分間どこかで、白い紙に向かって自分の人生でやりたいこと、やりたくないこと、心配事などを考え続けていると、ぼんやりと思っていたことが明確になってくるんですよね。「 ああそうか、僕は外資系のトップレベルの会社に入りたかったんだ」「 その背景にはエンジニアとしてどこまで通用するかを試したかったんだ」と気づき、「 そのためには英語力が明らかに足りないのでどう勉強すべきだろうか?」とギャップを埋めていく感じですね。自分のことをちゃんと考える時間を定期的に持つとよいと思います。
──本日は貴重なお話、ありがとうございました。