📖

第一章 イントロダクション

イントロダクション

サカモトは、2021年5月にTwitterアカウントを作成し、外資やメガベンチャーのテック企業に関連する情報発信を始めました。当時を振り返ると、更にその数年前までは私も外資を目指すエンジニアの一人でした。あの時は、ただ何となくAtCoderやLeetCodeをやって面接に臨んだわけですが、多くの面接で見事に落ちてしまいました。その後、ある程度数をこなし面接にも慣れた後、ようやくとある外資のソフトウェアエンジニアポジションのオファーを一つ獲得することができましたが、あの時の状態はまだまだ準備不足だったと思います。
外資の面接について詳しい情報を得たのは、実際にその職に就いてからでした。当時の私は、再現性の高い外資のオファーをもらえる自信がなく、悩んでいました。いつ転職することになるか分からない中、もう一度オファーを獲得するための準備を今のうちにしなければならないと思い、外資に関する情報収集を始めました。その過程でその情報を誰かに届けたいと思い、外資の年収や面接の情報をTwitterで発信することで、私の情報収集のモチベーションを高め、一人でも多くの人に役立てられることを期待して活動を始めたのです。
今では、Mercari、Woven by Toyota、PayPay、SmartNewsなどの日系企業もグローバル標準の面接スタイルを取るようになりました。一般的な日系テック企業の面接は、普段の仕事で成果を出されている方であれば通過できる面接形式になっていると思いますが、これらの企業の面接は対策なしでは通過することが困難になっています。
「面接をわざわざ対策するのは気持ち悪い。素で受けて面接を通過できないのであれば、その企業で働くべきではない」という意見もあるでしょう。しかし私はそんな事を言ってる場合ではないと考えています。が所属する会社のUSの同僚などを見るとほとんどが移民(インド、中国等)でチームは構成されていますが、人口比で見ても日本人はマイノリティと言わざる終えません。他の例ではAmazon Japanのソフトウェアエンジニアを見ても半数以上は外国人で構成されています。
その一つの原因としては情報格差があると考えています。英語で「software engineer interview prep」と検索するだけでいくらでも対策リソースが出てくるわけです。しかし日本語ではどうでしょうか?英語に比べると随分と少ないと思います。私はこれを不平等であると思っていて、日本語のリソースを作成したいと常日頃考えていました。
「どうせ英語を話せないとグローバルテック企業に入れないのだから英語だけでよくね?」という意見も聞こえてきそうですが、私はそうは思いません。まず最初に知ってもらうには日本語のコンテンツがある事が何より重要だと考えています。実際に外資に行きたいという相談者の話はよくサカモトの所に来ますが、面接の仕組みなどの話は知らない場合がよくあります。ここで解説する事でまず入り口に立ってもらいたいという願いもあるのです。
更にこの本では日本語と英語の両方のコンテンツを作成しているので、日本語と英語のテック用語が頭でリンクできていない方にも役に立つと信じています(例: 単一障害点 = Single point of failure)。
この本はテック企業のオファーの獲得を目指す全てのエンジニアに向けて書かれています。これまでサカモトやgaijineersが蓄積してきた全ての情報をこの本に残していくつもりです。
想定読者は数年ソフトウェアエンジニアの実務経験を持ち転職をこれからの3ヶ月〜半年くらいにかけて準備を考えている方(英語の問題は別、レベルによりますが1年は見た方が良いと思います)です。もちろん、まだ転職を全然考えず転職の大変さを知りたい方にもオススメです。
この本のメインの対象者としては
  • グローバルテック企業(GoogleAmazonIndeedWoven by Toyota等)を目指すエンジニア
メインではないが次の対象者としては
  • メガベン、日系テック企業(Yahoo Japan、サイバーエージェント、DeNA等)を目指すエンジニア
  • スタートアップを目指すエンジニア
  • SIer/ITコンサルを目指すエンジニア
などを想定しています。我々が作成した問題集はグローバルテック企業を目指すエンジニアでなくても役に立つと信じています。
次に、この本を読んで得られるメリットですが
  • テック企業の面接の流れや各面接の種類と対策方法が分かる
  • テック企業の面接にたどり着くまでの情報が分かる
  • 各テック企業の面接フローが分かる
  • 英語のレジュメを書く方法が分かる
  • 英語の技術面接の対策が分かる
  • 英語と日本語の両方が書かれているので英語学習に役に立つ
  • 分野別の技術質問の問題集を解く事で自分の得意不得意分野を確認できる
などがあります。是非こちらの本を読んでいただき、ご自身が叶えたい転職活動に活かしてくれましたら幸いです。

エンジニアと給与

エンジニアの給与の話をします。私は「日系外資関係なくグローバルテック企業に入って活躍できるエンジニア」と「日本国内の閉じた世界だけで働けるエンジニア」とでは今後も大きく給与に差がついていくと予想しています。dodaによると日本のITエンジニアの平均年収は438万円(※2021年12月時点)になっています。こちら給与水準とグローバルテック企業の年収を比較していきましょう。OpenSalaryによるとGoogleを始めとするグローバルテック企業が平均と比較すると3 ~ 5倍程度の年収が支払われている事が分かります(中央値と平均なので一概に比較はできませんが)。時には同じ実力で似たような仕事をしているにも関わらず、年収が大きく変わる事があるわけです。それは雇用されている企業の年収レンジが単に高い、ただそれだけの事実でしかありません。私は一人でも多くが現状より上を目指す事で、全体の給与が上がる事を期待しています。日本のエンジニアを医者と同等に稼げる職にしていきましょう!
OpenSalayから投稿されている企業の中央値年収(ソフトウェアエンジニア)
OpenSalayから投稿されている企業の中央値年収(ソフトウェアエンジニア)

面接スタイルの解説

ソフトウェアエンジニアの面接は様々なスタイルで行われます。一つの面接の中でこれらのスタイルが複数混ざっている事もあるでしょう。全ての会社の面接がここで書かれている形式を必ず取るわけではありませんが、数多くのテック企業の面接に参加していくと、これらの形式に出会っていくと思います。

オンラインコーディングテスト(Online Assessment)

応募時の足切りでよく導入されています。LeetCodeのようなアルゴリズムの問題をオンラインのコーディングエディタに書いて問題を解く形式です。HackerRankCodeSignalが良く使われるプラットフォームです。実際の流れとしてはリンクが送られて、いつまでに解いてねとリクルーターから言われます。練習方法としてはLeetCodeで十分でしょう。

課題提出(Take-home Assignment

応募時の事前課題として宿題を出される場合があります。こちらを採用してる企業はそこまで多くありませんがMercari、Woven by Toyota等は受けた際には提出を求められます。短いもので2-3時間、長いと8-10時間程度かかります。実装した内容を基に次の面接で何故このような実装をしたかを議論する事になります。渡される宿題としてはテンプレートが決まってるわけではなく、自由に書いて良いパターンが多いです。
会社によっては宿題に対してお金が出る場合があるが実際そんなにありません。過去に受けた企業の中でお金を出してくれる企業の例
harvest:
  • 5時間かかるコーディングで $1000
DuckDuckGo:
  • 3時間テクニカルライティングで $150
  • 5時間デザインドック $500
  • 10時間コーディング $500
 
課題の例:
  • CRUDのAPIをWebフレームワークで開発してください
    • 応募するロールで使われているWebフレームワークが指定されたことあります。(Spring Boot、Phoenix、Node.js)
    • 0から作るころもあるしある程度コードが用意されていてそこからコードを追加していくパターンもあります
  • S3にある生ログをダウンロードして指定されたロジックで処理してcsvにするコマンドを作成してください
    • 大きなファイルだとどのように最適化するかなど考えておくと良い
一人でやっていると段々とやる気が出なくなります。油断すると”いいや”と思ってクオリティの低いものを出して落とされるパターンは避けたいので時間をとってやりましょう。完成したものをすぐ出すのではなく一晩寝かせてもっと良いアイディアが思いつくかもしれないです。Take homeとは言いつつこちらは本気でコードを書いてプロダクションにリリースするようなクオリティにしましょう。

コーディング面接(Coding Interview)

ソフトウェアエンジニアとして最も重要な面接になります。GAFAの面接と言えばこちらを思い浮かべる方が多いでしょう。コロナ前は実際に会社に訪れてこの面接が行われていましたが、今では全てオンラインで完結しています。簡単なオンラインエディタ(codeshare.ioCodePen等)やコーディング面接プラットフォーム(HackerRankCodeSignal等)を活用して面接が行われます。応募者は面接官からコーディングの問題を渡され(文章もしくは口頭で)、要件をクリアにしていきながら問題を解いていきます。問題の形式としては
  • LeetCode形式(アルゴリズムとデータ構造)
  • Puzzle free(実務に沿ったコーディング問題)
  • UIコーディング(フロントエンドエンジニア専用、HTML/CSS/JS/React等)
など様々な形式で出題されます。受けるポジションによっては単に関数を実装するだけでなく、UIコーディングのような問題も出されますので受けるポジションによって訓練しておいて下さい。コーディング面接で使用するプログラミング言語は基本何を選んでもよい場合が多い(代表的なものはC++/Java/Python)ですが、場合によっては面接官から指定される事があります。特にフロントエンドエンジニアやiOSのモバイルアプリエンジニアは扱う言語がプラットフォームで固定されているのでJavaScriptやSwiftで面接に臨まなければいけません。

技術質問(Domain Knowledge Question)

典型的な技術質問は以下のようなものです。
  • ブラウザでURLを開くとき何が起きていますか?
  • 仮想DOMとは何ですか?
  •  docker run コマンドを実行した時に何が起きていますか?
  • L4とL7のロードバランサーの違いを説明して下さい
  • Webページの高速化する上で出来ることを何でも教えて下さい
技術質問は特定のドメイン(Broswer、React、Container、Networking)の理解度の深さと広さを評価されます。形式的にこの面接スタイルを取る場合、一問一答の形で次々と質問されて答える事になります。また一つ出題された場合、前に出題された問題に関連する分野を深ぼって質問されるパターンもあります。この質問はどんな場面でも飛んでくる可能性があるので注意して下さい。例えばコーディング面接をしている時に「ArrayListを使ってるけどArrayListってどんな仕組み?」など聞かれる場合があります。
質問のタイプとして、”正解が明確に一つある”ものと”特定の正解パターンはなく候補者に委ねられている(Open-ended Question)”ものが2つ考えられます。前者は仮想DOMとは何ですか?”で、後者は”Webページの高速化する上で出来ることを何でも教えて下さい”に当たります。
知識を問う問題なので比較的に対策しやすい面接スタイルです。この本の問題集はまさにこの技術質問の対策にフォーカスを当てた教材になります。是非活用して面接対策に活かして下さい。またこちらの対策により後述するシステムデザイン面接の対策にも繋がります。

システムデザイン面接(System Design Interview)

ジュニアレベルのポジションでは目にする事は少ないかもしれませんが、ミドルレベル以上では出題される傾向にあります。日系テック企業でもMerpay、MoneyForwardなどで導入されている実績があります。システムデザイン面接ではリアル世界のソフトウェアシステムの設計を面接の場で議論していきます。ソフトウェアエンジニアとして業務でやっている内容に非常に近いものはあるため、特に対策せずとも通過できる可能性はありますが、面接の流れは必ず抑えておいた方が良いです。大規模システムを信頼性、拡張性、保守性などを意識した設計を利点・欠点を説明しながら進めていかなればならないので、特に分散システムを構築した事がない人は注意してください。システムを設計する上で引き出しの多さが面接突破の重要な要素になってきます。問題の例としては
  • URL短縮サービス(Bitly)
  • ソーシャルメディア(Twitter)
  • 動画サイト(YouTube)
  • ファイル共有サービス(Dropbox)
をデザインせよなどが予想されます。Miroなどのホワイトボードツールを活用して問題に取り組む場合が多いです。

行動面接(Behavioral Interview)

ソフトウェアエンジニアは、一見すると技術力だけを評価されて仕事していると勘違いしている人もいるでしょう。特にシニアレベルになれば、イニシアチブを取ったり、他者への影響力を高め、優先度に応じた重要な決定を任される立場にもなってきます。特にテック企業はCore Values(行動指針)を社員全体に共有し、これに基づいた働き方をする事を推奨しています。AmazonのOLP(Our Leadership Principles)は世界で最も有名なCore Valuesの一つです。
行動面接でこの会社で働く上で相応しいマインドセットを持った人間かを判断するために行われます。企業は面接でよく「カルチャーフィット」という言葉を使いますが、まさにこれの事を指しています。典型的な行動面接では応募者の過去の経歴にフォーカスをして、どのようにしてその状況に対処したかなど具体例をあげて説明する事が求められます。この質問の裏には企業が大切にしているCore Valuesにどれだけフィットした行動を取っていたかを評価する事となります。質問の例としては
  • これまで仕事で直面した最も困難な状況をどのように解決しましたか?
  • チームメイトと対立した時の経験を教えて下さい
  • 仕事で失敗した時にどのように対処しましたか?
  • 自分でイニシアチブを取ってプロジェクトを推進した時の話を教えて下さい
などが挙げられます。

レジュメの深堀り(Resume Deep Dive)

Resume Deep Diveとは、候補者の過去から現在までの経歴を深く掘り下げていく面接スタイルのことです。応募者のレジュメに書かれている過去の経験、プロジェクト、スキル、達成事項に関する質問をします。主な目的は、
  • 過去の経験やプロジェクトが、求められる役割にどのように関連しているかを理解する
  • 過去にどのような課題に取り組み、それをどのように解決したかを把握する
  • 専門知識やスキルを評価し、ポジションに適しているかどうかを判断する
日本のテック企業にもよくあるタイプの面接スタイルです。このような形式張った名前はしていませんが、レジュメにかかれている経験は詳しく話せるように準備しましょう。

面接の流れ

ここまでで様々な面接スタイルについて学んできました。ここでテック企業の典型的な面接の流れを紹介します。

1. 人事面接(HR Interview)

書類選考を通過するとHRと人事面接が行われるケースがあります。ここでは自己紹介、選考プロセス・ポジションの説明、転職理由の確認など面接というよりは面談に近いと思います。特に対策の必要はないと思いますが、一応準備してから臨みましょう。

2. 電話面接(Phone Screening Interview)

電話面接は大企業で採用されている場合が多いです。電話もしくはビデオチャット(Zoom/Google Meet)などで面接官と会話し、技術質問コーディング面接を課される事が多いです。コーディングはオンラインエディタ(codeshare.ioCodePenJSFiddle)や面接プラットフォーム(HackerRankCodeSignal等)に書きます。オンサイトに進むべき人材かどうかを見極めるため易しめの問題が出るケースが多いです。
また、KaratというInterview As A Serviceがあり、電話面接として使われている企業もあります。こちらは応募企業に所属していないエンジニアが登場し技術面接を行います。

3. オンサイト面接(Onsite Interview)

ここからが本番と言っても良いでしょう。オファーを出すかどうかを決める最終段階となります。オンサイト面接は通常複数のラウンド(コーディング面接、技術質問、システムデザイン面接、行動面接)で構成され3-5回、場合によっては更に追加で複数回を設定されます。非常に体力がいる面接なので私は複数日付を分ける事をオススメしています。昔はオンサイトと名が付くように実際に会社に行って面接を行っていましたが、今では大体オンラインで解決するようになっています。またGoogleのような企業ではオンサイト面接の後にチームマッチなどがあります。大抵の場合、この面接を突破した人はこの会社に入社できる資格を持つという意味だと捉えてもらって構いません。

4. オファー面談(Offer Interview)

おめでとうございます。ここまで来れば一安心です。人事からあなたにオファー内容を説明されます。どのようにTotal Compensation(年収)を交渉するか?については別のセクションで行う予定です。グローバルテック企業だとTotal Compensationは基本給+キャッシュボーナス+RSU(株)で構成されている事が多いです。心躍るオファーを期待しましょう。
すべてを見るには

返金は購入日から1日以内に申し出て下さい。詳細はこちらからご確認ください。
また、このコンテンツ以外の他の永久アクセス権は付与されない事はご注意下さい。

支払いはによって保護されています

購入済の方はこちらからログインしてください

Loading...