ソフトウェア開発者として海外🇨🇦で働く:就活・面接対策

· 2 min

海外(カナダ )でソフトウェア開発者として就職しました。いくつかの面接経験を経て、なんとなくポイントが見えてきた気がするので、学んだ事を書き残しておこうと思います。日本でソフトウェア開発の経験があり、海外就職に興味がある人の参考になれば幸いです。


LinkedIn・履歴書・カバーレター

求人情報を探して応募→いくつか面接を経て契約にいたる。と、大枠は特に日本と変わりません。

大きく違うのが、LinkedInです。こちらではLinkedInが広く使われていて、リクルーターから連絡を受ける事も多々あるため、プロフィールの最適化は必須です。僕はこの記事などを参考にアレやコレやと日々変更を加えていきました。ある程度プロフィールが充実してくると、AmazonやMicrosoftのリクルーターからも連絡が来ます。(採用に繋がるかは別の話)

履歴書についてはいくつも書籍があるほどですが、重視するポイントはキーワードの利用と「何をした」だけでなく、「その結果どうなったのか」という視点で書くべきらしいです。(STARやCARと言われています。)

また僕の場合学歴が低いため、カナダのカレッジに通っている事はあえて記載せず、職歴だけで1ページ埋める形を取るよう変更したところ、返信率が少し上がった気がします。

カバーレーターは何を書けば良いのか分からず、当初はネットで見つけたテンプレートをつぎはぎして作成していました。そんな中たまたまTwitterで以下のスレッドを見つけ、これを参考に自分について話すように変えたところ、少し返信率が上がった気がします。そもそもカバーレータに書くことがない=会社を理解していないか、マッチしていなかったのかもしれないです。

※言うまでもなくですが、これら全ては最低でネイティブの英語話者、理想的にはITの採用に明るい人にレビューしてもらうべきです。

コーディングインタビュー

日本で受けた事がないのですが、カナダの会社ではほぼ100%アルゴリズム問題があり、それに加えてより実務的なアプリーケーションの実装や設計に関する問題が出題されました。

どの種類も共通して「どうやって解くか」のプロセスがとても大切です。問題の定義を明確にするため必要な質問をして、わからない時は黙らずに悩んでいるポイントを話す。失敗しても「あー動かないなー。デバッグしてみるね。」くらいの感じでいると、相手も「そんな事もあるよ」と励ましてくれるし、打ち解けやすいです。

と言いつつも勉強は必要なので、僕が実際に使って役立ったものを紹介します。もちろんこれがベストではないし、僕の基本方針は「お金で解決できる事はお金で解決する」なので複数の有料サービスを試しました。(大人になってよかった😌)

アルゴリズム

先ずは最低限の基礎を理解したかったので、Grokking Algorithmsを読み進めました。図解で分かりやすく、とっかかりにすごく良かったです。

次のステップに選んだのは Educative の Ace the Python Coding InterviewData Structures for Coding Interviews in Python は結局2周しました。次の Big-O Notation For Coding Interviews and Beyond は必要そうなところだけかいつまみ、Grokking the Coding Interview: Patterns for Coding Questions (本命)に進みました。完了はしていないものの、理解が大きく進んだと思います。

理解は進んだものの、Amazonのインタビューが迫る中で量が足りていないと思いLeetCodeの Mock InterviewでAmazonの問題を毎日練習。結果、似た問題が出題されたので価値はあったと思いますが、Amazonなどを受けないのであれば有料会員になる価値は低いと思います。

これらに加え、(バーチャル)オンサイト前にはPrampを使ってインタビューの練習をしました。無料でコーディングインタビューを擬似体験できるので必須です。英語で話しながら問題を解く事、また面接する側の視点も得られるので本当におすすめです。

後にAlgoExpert にも登録したのですが、問題のバランスが良いのと解説動画がわかりやすいので、Grokking Algorithmの後にAlgoExpert全集中でも良かったかもしれません。Tips & Tricksでは面接事の注意点なども説明されているのと、最近モックインタビューができるPrampのようなサービスも出したようなので、インタビュー練習の全てを解決してくれるかもしれません。

システムデザイン

AmazonやGoogleなどの大きい会社で行われるようなのですが、候補者がスケーラビリティなどを意識したシステム設計をできるかを見定めたいようです。範囲が広くてどのように準備すれば良いのか未だにわかりません。

有料のもの含め色々と漁った中だと、Gaurav SenのYouTubeチャンネルがインタビューとか関係なしに勉強になりました。ちなみにAWSの公式YouTubeチャンネルにもなんかすごいプレイリストがあります。

アプリケーション作成(ライブコーディング・宿題)

企業やポジションによって内容は大きく異なりますが、APIの実装やReactを使ったアプリケーション、クラス設計などが出題されました。

宿題として期限以内に提出する方式だったり、ビデオ通話中にスクリーンシェアをしながらコードを書いたりと出題方法も様々です。

これに関しては特に面接対策としての勉強はしませんでした。アルゴリズムやシステムデザインと違い、付け焼き刃ではどうにもならない部分が大きいと思われます。

提出系の宿題の場合、ただ実装するだけでなくどこかにデプロイをしたり、READMEなどに設計意図や改善点など記述しておくと、話が円滑に進みます。(僕はある会社で出された課題のREADMEをテンプレートに利用しています。)

面接の質疑応答

日本で面接を受ける時は準備はあまりしない派だったのですが、今の僕の英語力でそんな事をすれば「何言ってんだコイツ」という顔をされるだけです。(一度やってしまった。)

欧米での面接の流れを学ぶためCracking the Amazon Interview を読む&聞く(Audible)、かつBizMatesの面接対策教材をやりました。このBizMatesを経てようやく、どう振舞うべきなのか、なんとなくコツが掴めました。

こちらから聞く質問

面接の最後に必ず「何か質問ありますか?」と聞かれるので、毎回3つほど準備するようにしていました。

僕が面接の中で絶対に聞くことの1つが、オンコールなど障害発生時の対応手順です。論理的な回答が得られる場合、その会社が十分に成熟している、もしくはチームがよく作られていると捉えています。

もし事前に面接官の名前がわかっている場合は、LinkedInのプロフィールを見て、その人のポジションや過去の経験に促した質問をすると会話が弾みやすいです。

例えば、数ある経歴の中で現在の会社の就業期間が一番長い人に対して「なぜこの会社が一番長いのか」と聞いたところ、その会社の良い面について沢山話を聞けました。逆にまだ入って1年ほどの人であれば、「入る前に知っておきたかったことはある?」など聞くとネガティブな面を教えてくたりします。

会社について知れるチャンスかつ、面接官との関係をうまいこと印象付ける機会なので、十分に準備しておくとべき。それこそ、候補者として会社をこちらが面接していると捉えるくらいがちょうど良いです。

実際の体験

戦績は…54社応募・11社インタビュー・2社オファー。その中で最終面接まで進んだ3社の面接過程を時系列で挙げてみます。

大まかな流れはどの会社も共通していて、応募〜採用・不採用の決定まで大体1ヶ月くらいです。(準備のためスケジュールは遅く調整していましたが…)

Amazon Prim Pantry の場合

Amazonは採用に関する情報を公開しているので、応募する際はくまなく見ておくと良いと思います。とくにソフトウェア開発者のトピックでは、ホワイトボードコーディングなどに関するヒントなども多く公開されているため必読です。公開されている情報はAmazonに限らずどこの会社での技術面接にも役に立つと思います。

  • 02月10日 TECH TALENT DAYと言う企業説明会のようなイベントに参加

    Amazonのブースがあったので記念に話を聞き履歴書を置いてきました。

  • 02月11日 リクルーターからコンタクトを受ける

    この時点ではアルゴリズムの勉強などほぼしていなかったため、仕事が忙しいことを言い訳に1ヶ月待ってもらうようお願いしました。

  • 03月20日 オンライン・コーディングテスト

    Amazon独自のシステムで上でLeetCodeのようなアルゴリズム問題を解きます。2問出題されたのですがどちらも1つずつテストケースが通りませんでした。

  • 03月25日 リクルーター電話面接

    通常の電話面接です。Cracking the Amazon Interviewで学んだ内容が助けになりました。

  • 03月30日 次のステップの連絡をもらう

    肌感的に無理だろうと諦めていたのですが、次のステップに進む事ができました。思わず「コーディングテストの結果もイマイチだったのに何で?」と聞いてしまったほど。

  • 04月15日 バーチャルオンサイト(最終面接)

    コロナの影響で最終面接もビデオ通話をつかったオンラインで行われました。当日は4人の開発者とのコーディングインタビュー・1人の採用担当者との通常面接の合計5人。朝9時〜3時ごろまでの長丁場でした。(声が枯れた。)

    面接の内容はLeetCodeのようなアルゴリズム問題と、クラス設計、WEBサービスのシステムデザインなどでした。難易度に関しては、とても難しいものの、不可能ではない範囲だったと思います。

    それよりも過去の経験などについて聞かれる通常の英会話部分の方がはるかに難しかったです。

  • 04月21日 不採用の連絡を受ける

    予想通りの不採用でした。

アメリカのスタートアップ Tile の場合

  • 07月25日 LinkedInで求人を見つけ応募

    この時点で計22件応募していたものの書類がなかなか通らず、どうせダメならとカバーレターを少しカジュアルでストーリー性のあるものに変えてみました。

  • 07月28日 リクルーターから返事をもらう

    カバーレーターが効いたのかはわかりませんが、リクルーターから連絡をもらいました。

  • 07月31日 コーディングインタビュー1

    いきなりコーディングインタビューで少し焦りましたが、難易度は低くスイスイ解く事ができました。この時にはBizMatesで面接対策を行っていたのと、ポジションもフロントよりという事もあり回答に詰まる事はありませんでした。

  • 08月06日 コーディングインタビュー2

    アルゴリズム問題を期待していたのですが、実際に行われたのはReactを使った小さいアプリケーションの開発。CodeSandboxのURLを渡され、スクリーンシェアをしながら進めました。

    いくつかの機能に分けられており、若干時間をオーバーしたものの最低ラインは達成。URLを共有していたので、面接終了後にもダメ押しで残りの機能を実装。そして面接官に対するメッセージもHTMLで書くという、浅ましい努力でアピールしました。これがうまく行って最終面接に到達しました。

  • 08月13日 バーチャルオンサイト(最終面接)

    2人の開発者・1人のプロダクトマネージャーの計3人とビデオ面接がありましたが、みんな優しくかつポジティブな反応ばかりで面接が楽しかったです。

    開発者のうち1人はこれまでのコーディングインタビューの内容で満足してくれたらしく、コーディングパートをとばして開発に関するアレコレを質疑応答するカジュアルなものになりました。質問の内容は、「サーバーがダウンした時にどう対応するか」など実務的なものが多く答えやすかったです。

    もう1人の開発者との面接ではアルゴリズムの問題でしたが、それもmedium 程度のものでした。

  • 08月17日 追加面接

    全て終わったと思いきや、エンジニアリングを統括している方との面接が追加されました。内容は過去の経験や仕事の取り組み方などカジュアルなものでした。

  • 08月19日 内定

    リクルーターの方から電話をもらい、口頭で採用通知をもらいました。

    その後リファレンスチェックがあり、日本の同僚や前の会社でお世話になった上司などに協力してもらい、もろもろの手続きが進んでいるはずでした。

  • 09月30日 正式に内定取り消し

    数週間にわたってビザサポートに関するやりとりが続いていたのですが、そこで問題が発生しました。僕が学生ビザで滞在していることと、ビザの有効期限が1年未満であること、(また恐らく学歴の問題で通常の就労ビザの発行が難しく)採用ができないと。

    学校とビザのコンサルタントに協力を仰いでどうにか説得を試みたものの、結局覆る事はなく内定が取り消されました。

    後から学んだのですが、書面で契約を結ぶまでは採用通知に効力はなく、企業側は理由を告げずに取り消す事も可能なようです。

    “Talk to you soon.” なんて言ってたのに…会えなくてとても残念。

カナダのスタートアップ Thrive Health の場合

  • 09月17日 リクルーターに返事をする

    リクルーターからの連絡を受けた時点では内定があったため、返事をせず保留していました。そんな折、Tileから内定取り消しが打診され、保険として面接を受ける方向で返事をしました。

  • 09月21日 リクルーターとビデオ面接

    会社・ポジションの説明、僕の経験・ビザの状況などを話し、その場で次の面接の予定が組まれました。

  • 09月22日 テックリードとの面接

    コーディングはなく、現在のポジションや仕事の進め方、なぜ応募したのかなど通常の内容。やはり英語がネックで、肌感といてはイマイチでしたがなんとか突破。

  • 09月25日 コーディング課題

    次のステップは課題の提出でした。Expressで実装されたバックエンドのコードを渡され、それを利用した簡単なUIを実装すると言う比較的簡単なものでした。

    React + TypeScriptで開発をしていると聞いていたので、同じツールを使って実装。最大限にキレイに書いてアピールしつつ、Herokuにデプロイして提出。

  • 10月06日 最終面接

    最終面接では2対1の面接が2回行われました。1つ目は提出した課題について、「どうしてこの実装にしたのか」「こういう場合はどうする?」などの質疑応答。余った時間で過去の経験や趣味などの話をしました。

    2つ目の面接では、Easyレベルのアルゴリズム問題をいくつか。それに加えて、実際に稼働しているアプリケーションの画面を見ながら、ReactのコンポーネントやAPI・DBの設計について質問をされました。

  • 10月08日 内定

    一次面接を担当したテックリードの方から連絡があり、採用の通知を受けました。前回(Tile)の反省を活かし、ビザの話などもこの時点で説明し理解を得る事ができました。カナダのスタートアップのため、co-opなどについても理解している事が大きいのかと思います。

  • 10月13日 契約

    仕事の開始時期など話し終えた段階で契約に至りました。

  • 10月19日 仕事開始

    多くの会社では1日から開始になることが多いようですが、ここでは採用後すぐに開始することができました。

そもそもの英語力

言わずもがな、書類〜面接〜契約まで全てが英語で行われるので、英語力は必須だし、上手であればあるほど簡単に仕事が見つけられると思います。ある会社には「コロナ渦によるリモートワークにおいて、コミュニケーション能力が不安」という理由で断られてしまったこともあります。

そんな僕の英語勉強方などあまり意味がないかもしれませんが、やった中でよかったものを参考までに。

  • MEFA — イギリスの言語学者がやっているコースです。実際にやることはとても単純ですが、本当に勉強になっています。彼自身が第二言語を学び身に付けた経験があるというのが説得力があります。

    ただ彼は厳しくて毒舌で…一度叱られた時に10年ぶりくらいに本気で落ち込んで反省しました。

  • BizMates — 面接対策としてとてもよかったです。「英語を学ぶ」ではなく「英語で学ぶ」であったことがより実践的で身になったのかと思います。とは言いつつ、また再開するかは分かりません。

相手がある程度寛容であれば、単純な英語力よりも良い印象を残せることの方が大事なのかと思います。それこそ面接中に笑みが溢れるような場面があれば、それは単純な英語力に勝ると思います。

給与

気になる給与面についてですが、日本と比べ少し増えました。正直お金に関しては全く期待していなかったため、嬉しい誤算です。US系の会社はUSドルが強い事もあり、高給になる傾向があるようです。取り消されたオファーだとCA$100Kになる予定でした。想像ですが、求められる力が高い分給与ベースも日本より少し高いのかと思います。

面接時にどのくらい欲しいか聞かれるので、リクルーティング会社のリクルーターにどのくらい望むべきか相談してみるのも良いと思います。僕の経歴だと、CA$70K~CA$80Kを目安とする事を勧められる事が多かったです。

実務経験は本当に大事

長くなりましたが、僕自身の体験から、就活時に役立った事をまとめました。逆にここに書いた事以外はやっていない、またはやらなくて良いのかなと考えています。

ポートフォリオやサイドプロジェクトは試みたものの断念し、結果不要でした。ローカルのハッカソンの参加経験は良い材料になるかと思っていましたが、実際に面接中に触れられたのは2〜3回。それも時間が余った時やアイスブレイクの話題としてのみです。(もしかすると、書類選考時に効力を発揮していたかも🤔)

もちろん企業によってポリシーは異なだろうとは思います。それでも、経験者である以上、中心になるのは実務の話です。もっと重要なのは実務経験とそれを説明・証明できる力です。

言葉もまともに話せない外国人である以上、どうにかして価値を出していけるよう頑張っていこうと思います。

就活以外の経緯などをまとめた別記事もあります。興味あればご一読を。

では、また。


Photo by Aditya Chinchure on Unsplash


Shota Senga

@__senta

Software Developer who enjoys beer 🍻 and music 🎧