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の精神で、自分の心に従って突き進んでおこうと思います。
- ご存知の方も多いと思いますが、私は修士課程を退学しています。 [return]
- これら情報は参考程度にして、常にご自身で最新情報を見るようにして下さい。 [return]
- https://queue.acm.org/detail.cfm?id=1142065 [return]
- さすがに毎日日報に書くまでは真似できませんでしたが、今回転籍が決まったということを人に話すと、100%の確率で「ずっと言ってたよね」と返ってきたことで、改めてこれを実感しました。 [return]
- サンフランシスコ生活終わりました/運用エンジニアから開発エンジニアになるためにやったこと [return]
- 僕の聖書であるSteve Jobsの言葉です。https://news.stanford.edu/2005/06/14/jobs-061505/ [return]