【22新卒エンジニア】Indeedから内定をもらうまで【新卒1000万】
はじめに
Indeed Japanの新卒エンジニアの内定をもらうことができました。本記事では、応募に至った経緯から内定をもらうまでのプロセスと、自分がどのように選考の対策をしたかについて書きます。
自分が体験した選考の流れは、ざっくりまとめると以下のようになります。
1. 履歴書(CV)を出す (2021年2月上旬)→ 書類通過のメール(2月中旬)
2. Karatというサービスを用いて外部のエンジニアとの面接 60分 (3月下旬)→ 通過の連絡(電話面接の翌日)
3. 本面接: Indeed Japanのエンジニアと1対1の面接 1時間 × 3回 (4月下旬)
4. オファーをもらう(4月下旬)
応募から内定まで、2ヶ月ほどしかかかりませんでした。これは新卒採用ではかなり短い方なのでは?と思います。なお、僕は準備に時間をかけたかったため、できるだけ面接の予定を遠くに設定してもらいました。面接の日程の希望の出し方次第では、最短1ヶ月で合否がわかる、ぐらいのスピード感でした。
自己紹介
早稲田大学の情報系の学科に所属している大学4年生です。大学に入ってからプログラミングを始めました。インターンや受託開発、学校の授業や研究などでコードを書いてます。競プロが抜群にできるわけでも、数学オリンピックに出たことがあるわけでもありません。
始まりは唐突に
宇宙ツイッタラーXさんという方のツイートがたまたまタイムラインに流れてきました。
僕は学部を卒業し、院進せずにエンジニアになろうと考えていました。外資系の会社では、給料もいい上に英語で仕事ができ、さらにグローバルで使われるプロダクトの開発に携われるということで、これはGAFAに行くしかない、大学3年生の頃にそう考えるようになりました。
Indeedはリクルートが買収したため、厳密には内資に該当します。しかし、色々調べたところ、企業文化や給与体系は外資系のそれであるし、業務も(エンジニアは)ほぼ英語ということなので、よっしゃ応募してみるか、と軽い気持ちでエントリーしました。場数は多いほうがいいと思ったのです。
履歴書を提出
僕は学部3年の9月ごろにAmazon Japanの新卒エンジニアの選考を受けていました。結果は最終面接にて不採用でした。このときに履歴書(CV)を作成していたため、履歴書は時系列を更新して同じものを提出しました。履歴書を提出してから約1週間後に、書類選考が通った旨のメールを受け取り、ちょっとホッとしたことを覚えています。
※ Amazonの選考についても、後日記事にまとめるつもりです
※ 履歴書はzetyというサイトで作成しました。サブスク型なので、1ヶ月だけ契約して、resumeを作り、無料プランに切り替えました。少しコスパが悪い気がしますが、フォーマットを埋めるだけで簡単にresumeが作れるので、個人的には安い買い物でした。
コーディング面接の対策をする日々(2月〜)
書類が通過したあと、リクルーターとzoomにて今後のプロセスの説明を受けました。「アルゴリズムとデータ構造」や「コンピューターサイエンスの基礎」を問うような問題が出るから、対策をするように、と。あともちろん、面接は英語なので、英語は勉強しておいてね、と。(リクルーターとの会話も英語でした)
前述のとおり、半年ほど前にAmazonの選考を受けていたので、コーディングの対策の仕方についてはすでに把握していました。
休眠していたLeetCode のアカウントを復活させ、プレミアムプランに課金しました。また、後述しますが、AlgoExpertというサービスも以前に使用しており、非常に教材の質が良かったので、それも併用しました。
問題を解き始めたのは2021年の2月頭からです。もっと早くから準備をするべきだったと思います。とはいえ、ギリギリになってから尻に火がついた状態で猛烈に勉強をしたので、かえってよかったのかもしれません。
勉強法や、どれぐらい勉強したのかについては後述します。
一次面接: Karatでの面接(3月下旬)
一次面接では、Karatというサービスを用いて、外部のエンジニアと1時間の面接をしました。自分で面接の予定を入れる仕組みです。リクルーターからは3月中であれば問題ないと言われていたため、遠慮なく3月の末まで面接を延期しました。
面接は1時間で、15分がプログラミングに関する短答式の口頭での問題、残りの45分で「アルゴリズムとデータ構造」の問題を解きます。
手応えはそこまで悪くなかったのですが、ここで落ちたら洒落にならないので不安でした。
Karatでの一次面接では、うまくいかなかった場合に再度面接をすることが可能で、一回目の評価をなかったことにできます。面接の日から24時間以内にメールを送ると、もう一度チャンスがもらえるという仕組みです。
僕は面接後、リトライしようか、このままでいこうか、迷いに迷っていました。24時間は猶予があるので、翌日に再度挑戦するか決めよう、と考えていたのですが、リクルーターから面接の数時間後に合格のメールをもらい、胸をなでおろしました。
本面接(4月下旬)
本面接は、1対1の面接が1時間で、それを3回行います。各面接官は独立して評価を行うため、複数の視点から公平な採用が行えるとのことです。
僕が経験したGoogleやAmazonの新卒採用では、本面接を一日にまとめて行いましたが、Indeedでは一日一回で、計3日間の面接でした。
3回の面接のうち、2回は「アルゴリズムとデータ構造」に関するコーディングの問題を解き、残りの1回は"Resume Deep Dive"という名目の、今までの経験を問われる面接でした(いわゆる behavioural interview と呼ばれるものです)。
手応えとしては、5点満点でコーディング①が3.5、コーディング②が4.5、Resume Deep Diveが3.5といったところでした。致命的な箇所はなかったですが、もう少しうまくできた、そんな感じでした。
合格: Offerをもらう
僕は同時期にGoogleの選考を受けていたため、Indeedの面接が終わっても、対策は引き続き行っていました。気の休まらない日々でしたが、約2週間後にリクルーターからメールが届きます。"I have some good news" とのことで、これはもしかして?と小躍りしながらzoomをすることに。
リクルーターからは、「面接官からはポジティブなフィードバックをもらったよ!」と言われ、詳しく聞いてみると、採用!とのことです。「詳しい契約書は来週に送るけど、リラックスして大丈夫」と言われます。具体的なオファーの金額もこのとき提示されました(金額は記事の最後に書いてあるので楽しみにしてください)。
最初は色々信じられず、本当かなと思い、Really? と聞き返したぐらいですが、どうやらマジでした。
翌週、正式なOffer Letterをもらいました(5月の上旬)。他の選考があったため、受けるか辞退するかは5月中まで待ってほしいとの旨を伝えたところ、快諾してもらいました。
最初は信じられなかったのですが、契約書を何度も見返すうちに、実感が湧いてきました。とっても嬉しかったです。
コーディングの対策に使った教材
面接の過程で使用した教材、サイト、書籍を紹介します。
1. 世界で闘うプログラミング力を鍛える本(Cracking The Coding Interview)
GAFAを始めとした外資系の企業を受けるにあたってのバイブルとも言える本です。僕ももれなくこの本を購入しました。
本の内容としては、①コーディング面接全般について、②アルゴリズムとデータ構造概要、③面接にて頻出の問題と解説、の3つのパートに分類することができます。僕はこのうち①と②のみをやりました。プログラミングの問題を解くのは、LeetCodeやAlgoExpertにてやればいいと考えていたためです(後述します)。
③面接にて頻出の問題と解説 については、解説の部分の熟読だけしました。解説の部分だけでも非常に得るものは大きかったです。実際のコーディング面接のように、いくつかの手法を上げた後、各手法について議論を重ねてよりよい回答を出す、というプロセスが学べます。
2. LeetCode
コーディング面接ではほぼ必須、と言っても過言ないです。どのような問題を解けばいいかわからなかったため、コーディング面接対策のために解きたいLeetCode 60問 にて紹介されている60問 + Top 100 Liked Questions を解きました。
プレミアムプランが月額$35という値段なのですが、格安だと思います。僕は迷うことなく課金しました。
LeetCodeは150問ほど解きました。
※ LeetCodeはテック企業からNDA無視でコーディング問題をパクっているサイト、との評判があるようですが、僕はそんなことを言ってられる状態ではなかったので、遠慮なくサイトを使い倒しました。LeetCodeを使うかは各自の判断におまかせします。
3. AlgoExpert / SystemsExpert
Clément Mihailescuという、アイビーリーグ(非CS専攻)→Google→Facebook→起業という経歴の人物が運営するサービスです。
僕はAlgoExpertの問題を100問ほど解きました。SystemsExpertについては、動画形式なので、全部の動画を一回見て終わりました(システム設計の対策はそこまで必要ではなかったので、SystemsExpertはあまり使い込んでいません)。
値段については以下のようになってます。僕は最初、AlgoExpertを使用しており、システム設計の勉強もやりたくなったため、SystemsExpertも購入しました。ちなみに、プロモーションコードにて"clem"と入力すると、約5%の割引ができます。
※ clemはclementの略で、創業者の名前です。僕にアフィリエイト報酬が入るわけではありませんが、使ってみて大変よかったので紹介しています
AlgoExpertの特筆すべき点は、①LeetCodeとは違い、一問一問に丁寧な動画での解説がついていること、②アルゴリズムとデータ構造の解説動画が付録でついていることです。全て英語なので、英語面接に望む僕にとっては非常にありがたかったです。
彼はYouTube動画も配信しているので、それを見て気になった方は購入してみるといいのではないでしょうか。動画を見ると、コミュニケーション力の高さがビシバシ伝わってきます。表現もこなれている(平易な表現でわかりやすく伝える)ため、面接のお手本としていました。
ちょっと喋り方にしゃくれが入っていて癖がありますがw
僕が感じたAlgoExpertのマイナスな点としては、以下のものがあります。
①(Pythonについて)解答のコードがなぜかキャメルケースであり、pep8のコーディングスタイルに従っていない(LeetCodeにも、たまにそういうコードがあるんですが、なんでなんだろうと思ってました。コーディング面接では、フォーマットはあまり評価の対象とはならないそうですが、できることはすべてやっておきたいですよね)
②(主にPython)解答のコードでは、heapやqueueをライブラリを使わずスクラッチで実装しているため、ライブラリを使った洗練されたコードの書き方が学べない(LeetCodeではライブラリを使った実践的なコードが解答にあるので、併用をおすすめします)
③(主にPython)たまに解答のコードの質が低い。無駄に長い(ももっと良いコードになるよね?というのがたまーにあります。とはいえ、大体のコードは十分キレイだと思います。やはりLeetCodeとの併用がおすすめです)。
4. AtCoder
AtCoderを始めたのは3月の後半です。それまではLeetCodeやAlgoExpertをせっせと解いていたのですが、少し飽きてしまい、ゲーム性のあるAtCoderを始めることにしました。AtCoderは100問ほど解き、コンテストにも5回ほど出場しました。
LeetCodeなどのサイトと比べると、
・ 問題が面白い。よく練られている
・「アルゴリズムとデータ構造」をAtCoderだけで習得するには少し不安
・考察力を問う問題が多め
・全探索や木構造などの問題が多め → stackやqueueの練習には少し物足りないかも?
と感じました。補助輪として、またモチベーションを維持するためにAtCoderを使用するのがオススメです。
なお僕のレートはこんな感じです。受ける回数が少ないというのもありますが、あまり突出した成績ではないのが伝わるでしょうか。もう少し早くからAtCoderを始めていても良かったかなーと思います。
以下のGitHubにあるリポジトリのものをサラッと読みました
新卒の面接では、システム設計の問題は出ないとされています。最低限の基本を抑えたら、余力があったら取り組むぐらいの感覚で問題ないでしょう。基本というのは、僕の感覚では以下で紹介する動画が「まあ当然だよね」となるぐらいのレベルです。ちなみに僕にとってはeye-openerとなる動画でした。世界の見え方が変わったのを覚えています。ぜひ一度見ていただきたいです。(僕も大学でこんな講義を受けたかった)
これもシステム設計のサイトです。インターン先のアメリカ出身のエンジニアに教えてもらいました。記事がたくさんあるので、気になったものを軽い気持ちで読んでいきました。
このサイトの運営者が出版した本も勉強になりました。中々面白いです。必読書ではないですが。
どれくらい問題を解いたのか?勉強のスケジュール
対策を始めたのが2月の頭で、選考が終わったのは4月末です。実際に解いた問題数としては、LeetCodeが150問程度、AlgoExpertが100問程度、AtCoderが100問程度です。インターンなどで日中に埋まっている場合は一日5題、何もない日は一日10題を目標としました。また、問題を解いているだけだと飽きてしまうので、休憩しているときにはコンピューターサイエンスの本を読むなどし、効率の良い学習を心がけました。
全部で解いた問題は、大体300 ~ 400問の間に収まるかと思います。とはいっても、このうちで簡単に解けた問題もありますし、難しくて、結局最後まで習得できなかった問題もあります。最終的に自分の血肉についた問題数はというと、大体200 ~ 250問程度でした。
もう少し問題を解いておけばよかった、というのが正直な感想です。さらに100 ~ 200問解いておけば、コーディング面接のパフォーマンスは非常に安定したものになるだろうと感じました。最大限の努力を100とすると、80は超えたと思いますが、少し詰めきれませんでした。
僕が選考を終えて振り返ると、「競プロはやりすぎるぐらいでちょうどいい」と思いました(一般人の感覚です)。AtCoderで言えば、緑・水色ぐらいのレートに到達するまでに必要とされる勉強は、コーディング面接のために必要な勉強と一致するところが多いと感じました。
コンピューターサイエンスの基礎とは?読んだ本のリスト
GAFAを始めとするテック企業では、コンピューターサイエンスの基礎を問うような問題が出る可能性があります。僕は大学でCSの授業を取っていましたが、知識の漏れを防ぐために、再度網羅的に勉強をしました。僕が読んで役に立った本を紹介します。
Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識
Webを支える技術 -HTTP、URI、HTML、そしてREST
大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ
コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方
低レイヤーの本が多めです。他にも色々読んだ本はあるのですが、面接で役立ったかと言われると、?なものが多いので。
「キタミ式イラストIT塾 基本情報技術者」と「キタミ式イラストIT塾 応用情報技術者」は重複が多いので、ある程度基礎ができていると思う方は応用編だけで十分です。この2冊の本を読んで、「なんか当たり前のことが書いてあるなぁ」ぐらいに感じたら、コンピューターサイエンスの基礎ができた、と言っていいでしょう。学習の成果を測定するための試金石な本です。
ただ、キタミ式で勉強するのはおすすめしません。見る人が見ればわかりやすくまとまっていますが、初学者には知識の背景が見えづらく咀嚼しずらいかな?と思います。
「コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方」は読まなくてもコーディング面接には必要ないかもしれません。ハードウェアの設計からOSの構築、独自言語やコンパイラの作り方まで包括的にまとまっているめちゃめちゃ勉強になる本なのですが、ある程度基礎がある人でないと挫折すると思います。色々学習していって、最後に余力があったら読む、ぐらいの感覚でしょうか。
「大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ」は選考が終わった後に読みましたが、もっと早くに出会いたかった、と思わされた本です。2010年発売の本なのですが、まったく色褪せません。それだけ普遍的で応用のできる内容です。もともと、はてな社がインターンシップでやった内容が書籍になっているので、学生でも非常にとっつきやすいです。初期に通読しておくことをおすすめします。
Behavioural Interview について - 傾向とその対策 -
Amazonにしろ、Googleにしろ、Indeedにしろ、程度の違いはあれ、行動面接(behavioural interview)がありました。僕がどのように対策したのかまとめます。
とはいっても、コーディング対策に9割5分の時間を割いていたので、やったことはそんなにありません。自分の人生の棚卸し(経験を英語に翻訳する作業)をしたぐらいでしょうか。幸いなことに、自分はエンジニアのインターンを数年やっており、エピソードには特に困りませんでした。新卒の場合は、インターンの経験がなくても、研究のことや、友達との活動のことなどを話せば大丈夫のようです。聞かれる質問自体も、業務経験がなくても答えられるようなものがほとんどのはずです。
Amazon behavioral interview (questions, method, and prep)
この記事が特に秀逸でしたので、一読をおすすめします。
英語力について
Indeedのエンジニア職は英語が公用語のようで、メールやリクルーターとの会話、面接官との会話に至るまで、選考プロセスもすべて英語でした。
僕の英語力はというと、
・非帰国子女
・フィリピンの語学学校に1月ほど留学したことがある
・TOEIC925点(大学1年のときに取得)
・スピーキングは不安。リーディング・リスニングは特に不安を感じない
というレベルです。僕は一年浪人しており、その時期にNetflixで海外ドラマを英語字幕で見たり、洋書をKindleで読んでいました。このおかげで大学に入ってから新入生が受けるTOEICで900点を超えることができました。
とはいえスピーキングは不安だったので、瞬間英作文をやりこみ、瞬発力を高めました。AlgoExpertの解説動画に出てくるフレーズを丸暗記するのも約に立ちました。そのおかげか、まだまだ拙いとはいえ、英語面接でも意思疎通はなんとか大丈夫でした。
ここで大事なことは、どこまで英語力を高めればいいのか、ということですよね。僕の結論としては、「コーディングのパフォーマンスに致命的な影響が出ないレベル」までです。
英語でのコーディング面接では、英語を話すこととコーディングの問題を解くことの2つに脳のリソースを使います。英語力が低いと、脳のCPUリソースを英語に振りすぎてしまい、コーディングに割り振るリソースが足りなくなってしまいます。とはいえ、そこまで高い英語力は求められないので、コーディング対策に大半の時間を割いたほうが絶対よいです。
競プロがめちゃめちゃできる人であれば、脳の90%のリソースを英語のスピーキングに割り振っても問題ないでしょう。僕はそこまで競プロができなかったので、英語を練習した、という次第です。
モチベーションの維持と情報の収集
ずっとコーディングの対策をしてばかりでは飽きてしまうのと、過去にGoogleなどに入社した方のノウハウを知っておきたいと理由から、色々な記事を読み漁りました。
How I Learned to Code in 6 Months - And Got Into Google
My Google Interview Experience (ex-Google software engineer remembers)
提示された待遇 - ぶっちゃけいくらもらえるの? -
さて、皆さんが気になっているであろう待遇です。
そもそも、巷のエンジニアはどれぐらいもらえるの?という話ですが、これは levels.fyi やopensalary、project-comp などといったサイトで情報がまとまっています。
僕の場合ですが、提示された条件としては、ベースが1,000万 + RSU(要は株)+ ボーナス、です。めちゃめちゃ高いですよね。新卒の募集要項で、給与のレンジが書いてあり、本当にその宣言通りの待遇なんですが、未だに信じられません。
最後に
なぜわざわざこんな記事を書いたのか、それは、もっとエンジニアの人口が増えて、日本がIT先進国になっていけたらいいな、と思ったからです。諸外国のテック企業などと比べると、日本国内でのエンジニアの待遇はまだまだ低いし、夢がないなと思ってしまいます。
グローバル化の流れがより一層進むことは必至で、国内のエンジニアの待遇はしばらく上がり続けていくでしょうが、その流れに拍車をかけられたらなと。
英語とプログラミングができれば、グローバルに活動している外資企業・内資の企業で働けるようになるわけで、見える世界はとても広がるのではないか、そう考えて僕は英語を勉強したり、CSを勉強したりしました(もちろん、勉強それ自体が楽しかったというのもありますが)。
実際に必要とされる英語力は、想像したより高くはありませんでしたし、最終的には気合でなんとかなりました。チャレンジしてよかったと心から思います。失敗しても、その過程で勉強したことはムダにはなりませんし、やっぱり必死こいてやると、知識が自分の血となり肉となる感じがします。僕の場合は、プログラミングの力が、飛躍的に高まった実感があります。
最後に、僕の就活のざっくりとした結果をまとめます。学部4年の1~2月頃にGoogleやAmazon、Indeedの募集が始まりました。応募をしたのはGoogleとIndeedの2社だけです。僕はAmazonの選考を学部3年の秋に受けており、最終面接で落ちてしまったため、応募ができませんでした。どこも通らなかったら大学院に行こう、そう決めていました。
※ ちなみに、Amazonの選考が学部4年の2月に始まると知っていたら、学部3年の秋には応募しなかったです。当時は夏休みで、ほぼフルタイムでインターンをしていました。たまたまLinkedInを見たらAmazonの新卒採用のフィードを見かけ、急いで書類を作ってコーディング対策をすることになったので、もう少し準備できたらなと思いました。
理系の学生は大学院に行く割合が高いですが、せっかくなら学部で行きたい企業の選考を受けてみれば?と思います(特にエンジニア)。僕は学部で就活をして、ダメだったら、大学院に行ってからまた同じ企業を受けようと考えていました。
GoogleやAmazon、Indeedでは、履歴書さえ通ってしまえば、学部生か院生かはほぼ関係ないように感じました。あくまで面接でのパフォーマンスが全てであり、非常にフェアな勝負のようです。結局、その後にオンラインでのコーディングテストなどが行われ、勝手にフィルタリングされるので、書類ではあまり厳しくふるいにかけてはいないんじゃないかな?と思います。あくまで想像ですが。
約1万文字の長編記事となりましたが、ここまで目を通していただき、ありがとうございました。この記事が皆さんのお役に立てば幸いです!