こんにちは、皆さん!

2020年の9月からカナダのバンクーバーにあるアマゾンで新卒エンジニアとして働くことが決定しました。この際、そこにたどり着くまでの軌跡が海外で頑張っているまたは海外エンジニアに興味のある人たちの役に立つのではないかと思いましたので、ブログにまとめようと思いました。

トピック


プログラミングとの出会い

日本で高校まで通っていた僕は大学に入ってからプログラミングに出会いました。カナダの大学に進学する際に専攻について考える機会があったのですが、何がやりたいのかよくわからず、名前がかっこいいからという軽い理由でコンピュータサイエンス(CS)を選びました。

そしたら、一年生の2学期(2017年1月)から最初のプログラミングの授業を取ることになりました。僕はUBCのオカナガンキャンパスからスタートしたので、Javaでプログラミングを学習し始めました(バンクーバーキャンパスはDrRacket)。

最初の授業でコンピュータに打ち込んだ通りに動作してくれるのを見て、プログラミングするのが楽しくなりました。

ただこの時はまだ他の言語も見てみたりとかはせず、ただ学校の授業を追う形でやっていました。

二年生になり、バンクーバーキャンパスに転校してからは学校の授業でデータ構造やコンピュータシステムを勉強しました。


ウェブ系へのフォーカス

そうして二年生を終えた夏休み、freeCodeCampという英語のサイトで基本的なウェブ系の勉強を始めました。最初はHTMLファイルで書いたものがウェブサイトに表示されて、Javaと比べると、作ったものがすごく簡単にわかりやすい形になるのを見て、この分野をもっと掘り進めてみたいと思うようになったのがきっかけでした。

この頃にアマゾンに一度インターンで応募をしたのでしたが、特にこれとした経験もなかったため、オンラインセッションすら受けさせてもらえませんでした。


夏休みも後半に差し掛かって、学校でサマーコースを取っていましたが、ネット上でRuby on Railsを使ったインターンの募集を見つけたので、急遽Ruby on Railsを勉強し、インターンに応募してみました。小さな会社だったので、割とあっさり受け入れてもらえました。

この頃からバックエンドを利用したしっかりしたウェブサイトを作れるようになりましたが、まだ何か大きな成果物を作り出せるほどにはなっていませんでした。


インターン経験

小さな会社での夏のインターン(フルタイム2ヶ月)

最初のこの小さな会社でのインターンではHerokuにデプロイされているRuby on Railsで書かれたサイトのメンテナンスが主な作業になりました。たったの3人しかエンジニアがいなかったため(うち一人はリモート)、ほとんどの仕事を一人でやることになりました。ウェブサイト自体も大きくなかったため、初めてのインターンとしてはレベル的には合っていたのかもしれません。

収穫

技術的な学習ではセッションの使い方やHerokuの発展的な使い方ぐらいでしたが、ここでの1番の収穫はやはり、自分の履歴書に何か書けたことだと後から振り返って思います。


学校でのバイト(週10時間8ヶ月)

9月から学校に戻ると、学校の方でもアルバイトを探し始めました。UBCでは学期が始まると、Work Learnと呼ばれるプログラムが開始し、アルバイトの仕事がたくさん出回ります。この時見つけたフルスタックエンジニアの仕事で0から1のサービス作り体験をさせていただくことができました。こちらでは面接してくれるかが履歴書を見て判断されるので、この時に夏のインターンがすごく生きてきました。

このバイトでは主に一人での作業が多く、教授と週に1回くらいのミーティングでどんな機能を追加していくのかを相談するくらいでした。

収穫

なんと言ってもReactを1から学習できたのは大きな経験でした。ウェブサイトを作る時に自分でテックスタックを選んで良いと言われたので、迷いなく、気になってたReactを選びました。その他にもAPIエンドポイントの作り方やそれがどのようにフロントと繋がるのかを学習でき、本格的にフルスタックエンジニアっぽくなりました。

ちょうどのこの期間のことでしたが、Linkedinでアマゾンから連絡をいただいて、フルタイムで働きませんかと勧誘を受けました。残念ながら、学校があったので、断りましたが、Linkedinに自分の情報を載せるのはとても役に立つことだとわかりました。


グノシーでのインターン(フルタイム1ヶ月)

3年生の夏休み、久しぶりに日本に帰ることになったので、日本でインターンを探しました。以前から日本での経験は勤勉な日本人の印象もあり、海外での就活には役に立つと聞いておりました。

いろんな会社と面接した中でグノシーで働かせてもらえることになりました。たくさんのエンジニア、大きなサービス、六本木ヒルズという高層ビルでの仕事と、前回のインターンにはなかった要素がたくさん入ってきました。自分の実力が通じるのか不安に思うところもありましたが、1ヶ月無事最後まで走り抜けることができました。

もっと詳しく知りたい人はこちらの日記から見てみてください。

収穫

本格的なエンジニア経験を得ることができたのが大きいと思います。滞在中にこなしたタスクの質(フルスタックサイトの管理、AWS SDKの使用)を見ても面接でしっかり話せる内容になっていることが伺えましたので。そのほかでは日本の方でも通用するネームブランドを手に入れることができ、エンジニアとしての価値はだいぶ大きくなったのではないかと思います。


その間

インターンが決まってからその後の面接で役に立ちそうな個人プロジェクトを作成することにしました。その中で思いついたのがツイッター上にツイートを予約投稿できるようなアプリでした。この頃はウェブサイトとして作りましたが、今はモバイルに移行しました。よかったらこちらのリンクからそちらについても読んでみて下さい!

プロジェクト完成後、9月からのインターンも探してみることにしました。その中で、Vision Criticalというバンクーバー発のスタートアップに面接をいただき、オファーをもらいました。8ヶ月と長くて、卒業が延期することに親が反対したので、いきませんでした。その他にもアマゾンからも返信をいただくことができ、オンラインチャレンジを受けたのですが、失敗したので、オファーまではもらえませんでした。

こうしていくつか面接に進むことができた経験ができたので、その後の将来にも希望を感じることができました。

Vision Criticalでの出来事はこちらの記事にまとめましたので、よかったらぜひみてみて下さい!


新卒就活

そして、ついに4年生になり、9月の下旬から本格的に就活を始めました。この時点ではまだアメリカの会社くらいしか求人を出していなかったので、アメリカの応募できる会社全てに応募しました。バンクーバーではアマゾンとマイクロソフトのみ応募しました。

以下が僕の就活時の統計です。

応募した会社207
返事をもらえた会社96
最終面接まで行けた会社
オファーをもらえた会社

海外ではオンライン上で電子版の履歴書を送ればいいので、応募するのは容易いです。その分、他の応募者も同じなので、会社側には非常に多くの履歴書が届きます。一人に6秒しか使わないという話も聞きます。返事をもらえた会社はお断りのメールのみの会社も含めております。

この頃にしていた準備といえば、Leetcodeで問題を解くなどです。合計で50問はやりました。これはでも、一般的に見ると、少ない方みたいなので、皆さんはもっとやりましょう。基本的にはEasyとMediumの問題をやっていた形になります。その他ですと、応募した会社が多かったので、いろんな会社の問題も解き、だんだんオンラインでコーディングしていくことに慣れることができました。


アマゾンの面接プロセス

アマゾンから最初の連絡が入ったのは10月上旬でした。最初はオンライン上で用意してくれたクイズをやって欲しいというものでした。僕は不安もあったので、ゆっくり期限の最終日前日に毎回やるようにしていました。

オンラインクイズ Part 1

まずは与えられたコード内のバグを見つけて修正する簡単なデバック問題でした。これは前回もパスしたので、楽々クリアしていきました。


オンラインクイズ Part 2

今度はLeetcodeみたいに問題だけ与えられて1からコードを書き出すというものです。こちらで前回は落ちたので、正直受ける時はものすごく緊張しました。しっかりとアマゾンはツリー構造が好きであるという情報を元にLeetcodeでツリー中心に鍛えて備えました。その功もあり、予想があたり、2問ともツリー構造の問題で、100分の制限時間のところ、わずか20分で書き終えることができました。問題を見て、まず紙に自分のプランを書き出すという手法で、なるべくコードの書き直しを減らすことで効率をあげることができました。ひとつ山場を超えることができました。


オンラインクイズ Part 3

ここでは働き始めた時に遭遇しそうな状況を向こうが用意してくれて、その時の反応をみるというようなテストを受けました。いろんなサイトを見た結果、お客様重視、そして、期限厳守という二つの柱に沿って、外れすぎた回答を選ばなければ大丈夫みたいです。

その後、IQテストもありましたが、わからないところは調べたりして、問題なくクリアしました。


最終面接(3時間連続)

いよいよ未知の最終面接にたどり着きました。他の最終面接を既に終えていたので、3回の面接を連続でやればいいという風には認識していました。それぞれで異なるエンジニアと面接をし、与えられた問題を解く必要があります。

最初のエンジニアからはこれまでにやったことなかったアルゴリズム系の問題が出題されました(機密情報のため、問題の詳細は言えません)。ただオンラインクイズと違って、エンジニアに質問をして、いろんなヒントをもらうことができるので、それらを頼りにしながら、なんんとかコードを書き終えることができました。

次のエンジニアはシアトル在住みたいで、質問はまたもアルゴリズム系のものでした。ここではなんとなく回答が書けたので、それを見せて、終わりかなっと思ったのですが、僕の回答では遅いので、もっと速くなるように改良して欲しいと言われ、あまりうまく回答できないまま終わってしまいました。後から考えると、この面接が一番不安でした。

最後の面接では二人のエンジニアが担当し、デザイン問題を出されました。オブジェクト指向でコマンドラインを作ってくださいというような問題です。こちらは何を変数として定義したり、どんな関数を作ったりするのかを見ていくので、与えられた条件を満たせるようなデザインができれば問題ないです。



用意したプロジェクト

エンジニアとして、どのような物を作ってきたのかは職歴の次に大事なポイントになってきます。

僕は普段からプログラミングをするのが好きでしたので、3つの職歴以外にもいくつかプロジェクトを用意しました。それらを紹介していこうと思います。

  • ツイートを指定した時間にしてくれるスケジュールウェブサイト(Django / React)
  • Semantic UIライブラリの検索バーに検索機能を搭載した検索バーReactコンポーネントNPMライブラリ(React)
  • 正しい条件に沿って色を選ぶスマホゲーム(React Native)
  • 学校のコースを検索フィルターできる学校のプロジェクト(Typescript)
  • 与えられた点を元に指定された点を全て囲めるアルゴリズムを構築した学校のプロジェクト(C++)

このように使用した言語が多彩ですが、重要なのはプログラミングを学校外でもやっているかなどの興味的なポイント、そして、ここからもわかるように実際にそのような業務をこなせるかどうかという点です。


オファー

オファーは合計で二つもらいました。一つはアマゾン、もう一つはシリコンバレーのスタートアップでした。シリコンバレーのスタートアップからもらったオファーに関しては、1ヶ月考える時間を与えられたので、当時はまだ結果が出ていないアマゾンの結果を待つことにしました。しかし、1週間後に向こう側から「もう新卒枠は埋まってしまったので」という理由で内定を取り消しにされました。これに関しては、同情の声もたくさん友達からいただいたのですが、叔母からは「それは1週間で向こうがこの会社に興味があるのか詮索してたに違いないじゃん」って言われたので、そういう裏の意味も考える必要があるなというふうに学習しました。

その後、1ヶ月くらいして、12月末の頃にアマゾンからオファーを期限内に受け入れなかったので、オファーが無くなったという通知のメールが来ました。最初は驚きました。オファーのメールすら届いていないのに、期限切れの通知だけが来たからでした。

急いで連絡を取り合って、事情を説明したら、そこのところを理解してくれて、オファーを再発行してくれました。対応してくれた方には本当に感謝しています。ただ、元々はトロントオフィスだったのが、向こうが埋まってしまったため、バンクーバーオフィスに変更することになりました。


まとめ

書き出してみると、意外と内容が多かったので、結構省略した部分もありました。何か付け加えて欲しいものがありましたら、コメントで是非教えてください!

海外にはたくさんのIT企業があります。どのオフィスでも海外らしいラフな働き方を感じることができると思いますので、GAFAなどにこだわる必要はないかと思います。多くの会社が同じようなプロセスを踏んでエンジニアの採用を行っているので、この投稿の情報を是非参考にしてみてください。

それでは、長くなりましたが、今後とも暖かく見守っていただければ幸いです。

みなさんの役に立つことを願います!
では、また次回まで✌
記事更新はツイッターで告知するので、ツイッターの方でもフォローお願いします!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です