VancouverにあるAmazon S3チームのDeveloperになります

tl;dr - Amazon に入って 3 年が経ちましたが、この度転籍という形で Canada の Vancouver にある Amazon S3 開発チームに Systems Development Engineer として移ることになりました。

2010 年頃からずっとなりたいと思っていた北米での開発者の仕事(もちろん英語のみ)なので、本当に嬉しいです。AWS の Solutions Architect(SA)としてお客さんと向き合う仕事をじっくりさせてもらい、そこから実際に開発をしているチームに開発者として拠点も含めて移れるキャリアパスがあるんだよ、という一例になれましたので、SA になると自分の手を動かす機会が減ってしまうことを懸念している開発者の方の背中を押せたら幸いです。なお、2018 年 6 月頭に日本を出国予定で日本の会社も退職してしまうので、(旅行を除いて)日本に戻ってくるつもりは基本的にありません。もし日本で僕と直接会って話がしてみたいという方がいれば、5 月中にぜひ連絡下さい。

以下、長いので興味の有る方だけどうぞご覧下さい。

なんで Vancouver?

元々はアメリカに行きたいと思ってましたし、実際 2013 年には San Francisco で働きました(その時は日本からの出向)。Amazon に入ってからもずっとアメリカのポジションを探していたのですが、なかなかフィットすることができず困っていて、ふと隣のカナダってどうなんだろう?と思い、色々調べてみました。

最初に、カナダで大学院に入る選択肢を調べました1。それが一番自分のコントロール配下で場所を移りやすそうだったからです。すると、アメリカの大学院とは違い、配偶者には work permit がついたり、自分も part time で自由に働けたり、卒業後も最大 3 年の visa 探し期間が付いてきたり、学校によっては卒業したらそのまま永住権の申請ができたり、とかなり魅力的でした2

それでカナダにかなり興味が湧いてきたので、合わせてカナダにある Amazon のポジションを探してみたところ、たまたまこれから行く S3 の開発チームと巡り合いました。

Vancouver は Amazon の HQ がある Seattle から車で 3,4 時間程度と近いところにあり、S3 のチームはもちろん Seattle にもあるので一緒に仕事しますが、距離も近いしタイムゾーンも同じなのでとても助かります。いずれまたアメリカも、と思った時に西海岸で距離が近いというのは自分にとっては大きいメリットです。ちなみに Vancouver の空港にはアメリカのボーダーがあり、アメリカに飛ぶ際に国内便で行けるというのも中々良いです。

なお、なぜ北米に行きたいのかについては、50%くらいの理由は NFL を普通の時間にライブで見ることができるからです(マジ)。残りは、子どもを英語かつ多様性のある環境で育てたいことなどがあります。上の子どもが小学校に入る前に移ることができたので、そこまで苦労せずに英語を話せるようになってくれると期待しています。あとは、妻には結婚前から海外に行くと約束していたので、ようやく達成できたという形です。

なんで Develper?

自分は、「小学校からプログラムやってました」みたいなギークでは全くなく、大学で初めてちょっとプログラムを書いて、社会人になった時点ではサーバってなんですか?みたいな、普通の人です。そんな僕のキャリアの殆どは「他人が書いたソフトウェア」の相手をしてきました。Ops をやっていた時も SA をやっていた時も、誰かが書いたソフトウェアについて学び、動かし、フィードバックをすることしかできず、自分で開発することができませんでした。

もちろん、そのおかげで技術もついたし見識も広がったし、特に SA の仕事では世の中にあるありとあらゆるシステム・お客さんと渡り合うことができ、自分のスキルを効率よく磨くことができたので、とても良かったです。Big data から Machine Learning/Deep Learning、それから Container に DevOps と、バズワードをかき集めた感じの幅広いトピックで専門性を身につけることもできました。

でも、どうしても自分は「自分が書いたソフトウェア」の相手がしたくなってきました。Amazon の CTO の Werner Vogels は “You build it, you run it” が Amazon のやり方だと言っていて3、自分はまさにそれがやりたいと、特に Amazon に入ってから強く思いました。

しかし、Developer としてキャリアを積んでこなかったために(前職の最後の 1 年が唯一の開発経験でした)、例えば「最近 ○○ の開発をした経験ある?」といった質問を受けてもそもそも最近開発をしていないので何も答えられず、Computer Science も修めていないので、いわゆるアルゴリズムとデータ構造みたいな話でもビハインドしてしまい、中々ポジションにフィットすることができませんでした。

そこで偶然巡り合ったのが Systems Development Engineer という role でした。この role は developer なのですが開発対象がいわゆる product feature ではなく、システムの為に必要なものの開発で、例えば自動化ツールだったり、手動プロセスの自動ワークフロー化だったりします。その為、ピュアな開発スキルだけでなく、大規模システムの運用経験だったり、Linux の細かい運用 TIPS だったりが評価されます。そこは自分がキャリアの中でもやってきたことだったので、うまくフィットすることができました。

S3 という巨大な分散システムの開発に携われるということも、非常に exciting です。自分は分散システムが好きで、先日はMulti Paxos アルゴリズムを実装して遊んでみたりしたのですが、分散システムは動いているものと戦わないと本質を学ぶことは困難なので、S3 を開発(もちろん運用も)できるというのは本当に貴重な経験になります。

どうやったの?

細かい話は書きませんが、以下の 4 つのポイントが自分が大事にしてきたことです。

言い続ける

自分が北米に行きたい・開発者になりたい、というのは四六時中まわりに言い続けてきました。そうすることで、もしいい opportunity があったら紹介してもらえるかもしれません。何も言わなければ可能性は 0%ですが、言っておくことで 0.1%くらいにはできると思います。また、周りにそう言い続けることで、逆に自分にプレッシャーをかけることもできます。自分は絶対にこの夢を達成するんだ、と何度も何度も刷り込むことになりました。

前職の同僚で尊敬するエンジニアの 1 人である @mootoh氏が、前職時代にアメリカに移ると聞いて、どうやったらアメリカで働ける様になるんですか?と聞いたら、「そう言い続けることやで。日報の最後に脈絡なく『ところで、僕はアメリカに行きたい』って毎日書くくらい。」と言われたのが 2010 年くらいだったでしょうか。それからずっと愚直にそれを守った4おかげで僕も夢をかなえることができました、本当に感謝しています!(ってこないだ飲んだ時に伝えた)

備える

機会はいつやってくるかわかりません。いきなり明日面接をしようって言われるかもしれません。そうなってもいいように、準備を怠らないようにしてきました。後述の英語はもちろんですが、Ops の時も SA の時も、開発することが責務ではなくても隙を見つけては開発をしてきたし(単にスクリプティングだけでなく、デプロイやプロビジョンツール開発やfluent-plugin-kinesisといったライブラリ開発をしました)、仕事と関係なくてもコンピュータやシステムの勉強は欠かさない様にしました(ちなみに最近は iOS 開発や LLVM や Stack machine の勉強をしています)。また、Amazon の中の仕組みを勉強できる機会を大いに活用することで、ここでしか学べないことを学び続けました。

デザイナーの奥山清行(Ken Okuyama)氏が語っていた「いつ来るか分からない 15 分のために、常に準備をしているのがプロで、来ないかもしれないからと言って準備をしないのがアマチュア」という言葉が僕はとても好きで、このブログでも何度か言及しています5。チャンスをつかみたいのであれば、来るとわかっていないときにこそ準備を怠ってはいけないと思っています。

妥協しない

僕は今回、「場所を変える」と「職種を変える」の両方を一辺に達成させました。おそらく、もっと確実なやりかたはどちらか 1 つを先に達成して、その次にもう 1 つを達成するというやり方だと思います。しかし、それでは時間がかかってしまいます。子どもの年齢があるので、relocation をこれ以上遅らせることはできなかったし、開発から遠ざかっている期間が長引けばそれだけ role change も難しくなっていくので、どちらか 1 つをまずやるという妥協は絶対にしないと決めて、両方達成できるポジションだけを探し続けていました。

ただし、些細なことにはこだわらないのも重要でした。アメリカに固執していたらまだ無理だったと思いますし、feature development にこだわったらいつまでもうまく行かなかったと思います。どちらも別に諦めたわけではなく、大きく距離を近づけることができたという点で今回の選択にとても満足しています。

英語

僕は日本人の両親を持ち、大学に入るまでパスポートすら作ったこともなく留学経験も全く無し、1 人で海外に初めて行ったのは社会人になってから、というバックグラウンドです。当然、英語はずっと生活のなかには存在せず、英語とは距離をおきたいと思っていました。そんな僕でも、英語のみの環境で生活できるようになりました。詳しくは以前書いたこちらのブログをどうぞご覧下さい。

今回のポジションでも、上司含めチームとの会話はもちろん英語だけでしたが、プロセスの始めから今まで一度も英語が懸念点として話題に上がったことはありません。繰り返しますが、2010 年に自分の英語のできなさに本当に絶望した時には、たった 7 年程度でここまでなれるとは全く思っていませんでした。

自分には夢があったのでここまでやれたんだと思いますが、今は正直英語の方が話するのは楽じゃないかなとも思ってます。日本語はとてもスピードの遅い言語で、特に会話しながら整理するのに効率が悪い感じがしています。会話するという文脈では英語の方が僕は合っている気がしています。一方で読み書きの速度はまだまだで、もっと鍛錬しないといけないと認識しています。

ちなみに、中国語の方がもっと速いのでは?という話を聞いたりもしていて、中国語にも真面目に興味が湧いています。Vancouver も中国の方はとても多いですし、近いうちに時間を取って、まずは発音から勉強しようと考えています。@songmuさんから中国語は全然難しくないよ、と言ってもらっているので頑張ろうと思います。

Next step

2009 年に社会人になって以来約 10 年かかって、ようやく Developer のキャリアをスタートさせることができました。本当に長かった。このキャリアを積んでいきながら、Canada の永住権を取ることが次のマイルストーンになります。そこから先は、自分も何がしたいのか正直まだわかりません。でも、その時に準備不足とならないために、“You can’t connect the dots looking forward; you can only connect them looking backward.”6の精神で、自分の心に従って突き進んでおこうと思います。

Footnotes

  1. ご存知の方も多いと思いますが、私は修士課程を退学しています

  2. これら情報は参考程度にして、常にご自身で最新情報を見るようにして下さい。

  3. https://queue.acm.org/detail.cfm?id=1142065

  4. さすがに毎日日報に書くまでは真似できませんでしたが、今回転籍が決まったということを人に話すと、100%の確率で「ずっと言ってたよね」と返ってきたことで、改めてこれを実感しました。

  5. サンフランシスコ生活終わりました/運用エンジニアから開発エンジニアになるためにやったこと

  6. 僕の聖書である Steve Jobs の言葉です。https://news.stanford.edu/2005/06/14/jobs-061505/