会員登録すると
このコラムを保存して、いつでも見返せます
こんにちは。新卒でGAFAのひとつにソフトウェアエンジニア職で就職する者です。GAFAを始めとした外資系企業のエンジニア職を受けるにあたって、欠かせないのが「コーディング面接」です。この記事では、私が体験した内容をもとに、GAFAのコーディング面接がどのようなものかについて紹介します。実際に行なった対策についても詳細に解説しているので、GAFAを志望している人はぜひご一読ください。
自己紹介
現在旧帝国大学の大学院修士課程に在学中で機械学習の研究をしています。プログラミングは大学入学後に始めました。大学2年生の頃からベンチャー企業で機械学習系のインターンを転々としていました。学生の間に複数のメガベンチャーのインターンに参加しました。
「コーディング面接」とは?
日系企業、特にメガベンと括られる企業群を受ける際は、 コーディングテスト が課されることがほとんどです。コーディングテストは一般的には面接者の足切りに使われており、ESと同時か、あるいはES選考を突破した後に課されます。
コーディングテストでは、決められた制限時間の中で、アルゴリズムに関する問題や、何らかの実装を行います。これは面接ではなくテストなので、自分の好きなタイミングで実施することができます。
それに対して、GAFAを代表とする外資系企業では、 コーディング面接 が行われます。これはコーディングテストとは打って変わって、実際の面接中に、面接官からコーディングに関する問題が出題され、その問題をプログラミングを用いて解くというものです。
コーディングテストの場合は制限時間中であれば、ネットや本でヒントを得ることができますが、コーディング面接の場合ではそれができないため、対応力が求められます。
「コーディング面接」と「競技プログラミング」とは別物!
コーディング面接の対策としてよく勧められるのが、AtCoderを始めとする競技プログラミングです。 しかし、コーディング面接と競技プログラミングとは全くの別物です。
競技プログラミングは、どれだけ早く適切なアルゴリズムを思いついて実装できるかを競う競技です。従って、可読性が低いコードであったとしても、適切に動作すれば問題ありません。そこで、変数にaやbなどの適当な命名をすることが多々あります。
また、より高いレートを取ろうとすると、高度で実装に時間がかかるアルゴリズムを用いる場面も増えてきます。そのような複雑なアルゴリズムを毎度1から書き直すのは時間がかかってしまいます。そこで、事前に自作ライブラリを作って、コンテスト中は必要に応じてそのライブラリを用いてコーディングするようになっていきます。
一方で、コーディング面接は、 問題を解けるかどうかのみが問われているわけではなく、問題が与えられたときにその問題にどう対処するかという思考過程を面接官に伝える場 です。従って、極論問題が解けなくとも、その問題に対する思考プロセスが評価されれば、コーディング面接を通過する可能性はあります。
また、そのような背景から、極端に難しい問題が出題されることはありません。 最も難しい問題のレベルであったとしても、ダイクストラ法を実装する程度だと思います。 これは、難しい問題を出してしまい、候補者が何もできずに面接を終えてしまうと、その候補者はこの問題を解けなかったという事実しか分からないためです。これでは問題を解く際の思考過程を見るという本来の目的が果たせません。
巷では、少なくともAtCoderで言うところの青以上ないとGAFAに挑戦する資格がないとまで言われているようですが、これは全くの誤解だと思います。 問題を解けるかどうかという観点で言えば、茶色程度があれば勝負できるレベル感だと思います。逆に、例え赤のレベルだったとしても、面接官にうまく思考過程を伝えられなかったら、面接を通過することはできないでしょう。
私がGAFAの内定を得たときはAtCoderは緑(レートは1,000程度)でしたが、コーディング面接を突破するには十分だったと思います。
プログラミング言語
よく挙げられる疑問の一つに、コーディング面接において扱えるプログラミング言語が決まっているのかというものがありますが、少なくとも私が受けた企業の中では特に指定がありませんでした。
しかし、どの言語でも許容されるという話と、実際にどの言語でも使えるという話はまた別物です。 言うまでもないですが、ほとんど使用者がいないマイナー言語や、とても複雑な記述をしないといけない言語は避けるべきです。あくまでも面接官が理解できることが最優先事項です。
普段慣れているプログラミング言語があればそれを使えばよいと思いますが、そうでない場合は私のおすすめはPythonです。これは、Pythonが他の言語に比べて簡潔に書けること、そして使用者が多く、面接官に理解されやすいためです。
難易度は?
多くの体験記等で言及されている通り、 Leet CodeのEasy ~ Medium程度の難易度でした。 また、特に新卒採用ということもあるのか、Easy寄りの問題のほうが多かったです。中途採用でエントリーレベルでないレベルの職位を狙う場合は、Medium程度の問題が出題されるのかもしれません。また、中途採用ではアルゴリズムの問題だけではなく、システムデザインの面接も出題されるようです。
また、企業ごとに問題の難易度の差はほとんどないと感じました。どちらかというと、面接官による差の方が大きいのではないかと思います。
解答方法について
一昔前は(コロナ前?)実際に現地に行って、その場で出された問題をホワイトボードに手書きで書き込むという形式だったようですが、私が受けた時はオンラインでの実施で、あらかじめ共有されたリンクを通じてアクセスされるテキストエディターのようなものに解答を記述していくというものでした。
必要最低限の機能はありますが、VSCodeのようなリッチなエディターではないため、補完機能や色付け機能などはありません。LeetCodeで普通に練習しているような環境とは違うので、慣れておく必要があります。
実際の面接の流れ
大まかな流れは以下のとおりです。
...
会員登録して全ての内容を見る
続きは外資就活ドットコム会員の方のみご覧いただけます。
外資就活ドットコムはグローバルに活躍したい学生向けの就職活動支援サイトです。会員登録をすると、「先輩のES・体験記」や「トップ企業の募集情報リスト」など、就活に役立つ情報をご覧いただけます。