最近のシリコンバレーSoftware Engineer面接への雑感

数年前に候補者として数多くの面接を受け、また面接官として何十人ものSoftware Engineerの面接をしました。この経験から、最近の「シリコンバレーのエンジニア面接」に関して感じることを書きます。

※Software Engineer面接のノウハウなどを提供する記事ではないので、有益な情報をお望みの場合は回れ右をお願いします。

シリコンバレーでのSoftware Engineer面接の現状

シリコンバレーでのSoftware Engineer面接は、平均して6-7回の面接の回数があります。電話でのスクリーニング面接が1-2回あり、その後にオンサイトでの面接が5-6回あります。面接の内容はAlgorithm/Data Structureや職種に関する質問(Mobile EngineerであればAndroid/iOS)で、大半はTechnicalな質問になります。

5年ほど前に日本でエンジニア面接を受けた時は外資・内資・ベンチャーに限らず、非テクニカルな内容が結構なウェイトを占めていました。(※1) 面接官は「経験がある=知識もある」「候補者は経験を偽らない」と、性善説で面接が進んでいたと勝手に推測しています。

アメリカでは、基本的に候補者は履歴書や経験を過剰に盛ります。そのため、Software Engineer職の場合は、候補者がポジションにふさわしい知識やスキルを保有しているか、技術的な質問を通じてみっちり面接で確認をします。

どの分野での”技術的な質問”をするか、選ぶのは難しいです。特に一般的なSoftware Engineerのポジション(特定の分野の専門家を求めていないケース、例えばGoogleのこのポジション)の場合、この難しい状況が起こりえます。(※2) 候補者がある分野で優れた知識やスキルを持っていても、面接官がそのスキルセットを保有しておらず、候補者のスキルを上手く判断できない状況も発生します。また、候補者Aがロードバランスに詳しい・候補者Bがメモリ管理に詳しい等、候補者間で専門が異なる場合に候補者Aと候補者Bのどちらが優れているか、判断が非常に難しいです。

また、過去の技術的な経験を詳細にヒアリングする方法も考えられます。ただ、このケースでは「候補者は経験を盛れる」「技術力よりもアピール力・話力がある人が有利になる」などで、候補者Aと候補者B、どちらの経験が優れているかの判断が難しいといった状況になり得ます。候補者を公平に審査することを追求した結果、Software Engineerの面接ではAlgorithmやData Structureの質問を中心に行うことになったと推測しています。

GoogleのSoftware Engineer面接は、みっちりとTechnical Interviewをすることで有名です。Googleがこのスタイルを取り、AmazonやFacebook等の大手も追従し、そして他のTech企業もこれに習う、という状況になってると勝手に推測しています。これは私の過去の経験からの話ですが、Googleでは非Technical Interviewは一回もなし、FacebookとAmazonは1回だけみっちりBehavioral Interviewの面接があったと記憶しています。この経験から、シリコンバレーのTech企業は「あなたは弊社で働くスキル・能力がありますか?」という点をみっちり確認していると感じました。

※1: 最近ではGoogle, Amazon等が日本でSoftware Engineerの本格的な採用をはじめていて、状況は変わってきてると存じます。
※2: 特定の分野のスキルを求めるポジションも存在し、その場合には話は変わってきます。

現役のSoftware Engineer(私)がどう感じているか

個人的には、面接でAlgorithmやData Structureの質問を上手く解けたとしても、実際の仕事で活きるかは不明というスタンスです。一番の理由は、LeetCodeなどのコーディング教材で準備をすれば面接は突破できてしまう点です。

私は米国の大学院に通っていたのですが、クラスメートの中国人留学生達は、留学前から1年間ほどLeetCodeの問題を毎日解き続ける等、相当な準備をしていました。大半の中国人留学生は、面接までにLeetCodeの大半の問題(当時は500問ほど存在していた)を解いて、面接に臨んでました。もはや受験勉強と変わらないなと感じました。

上記の ”Technical面接で現場でのスキルを図れるかは不明” は私の考えですが、周りのSoftware Engineerは現行の面接スタイルに対しては賛否両論です。私と同じ考えのEngineerもいれば、現行のスタイルはきちんと機能していると考えてる人もいます。

いち個人としては、現行のスタイルは外国人である私にとっては比較的やりやすいです。何を準備すればよいかが明確な点がメリットです。また、behavioral interviewでアメリカ人に敵う気がしないので、努力が比較的結果に結びつきやすいのも嬉しいです。

数年前から面接官として候補者の面接をしていますが、候補者のレベルが上がってると日々感じています。私が候補者として面接を受けていた時も、Cracking the Coding Interview / LeetCodeなどの豊富な問題集があり、準備が非常にしやすかったです。おそらく現在はより豊富な情報がネット上に流れていそうで、候補者も面接前にガッチリ準備してきてそうです。

面白いのが、New Grad(新卒枠)のポジションを受けている学生達の多くは、すんなりと問題を解いてきます。中途採用と新卒採用ともに面接をしてるのですが、中途採用の候補者よりも新卒採用の学生の方が文句のない答えを出します。おそらく新卒採用の学生さんは、中途と比べると準備時間も多くあるのも関連しているかなと。

まとめ

全くとりとめのない文章になってしまいましたが、個人的には「現行のSoftware Engineer面接に対して文句を言わずに、黙々と準備するのが吉」とのスタンスです。名門大学のCS学科の大学教授などであれば、顔パスでGAFAなどからポジションを貰えるかもしれませんが、一般市民の私はそんなことはあり得ません。(*3) なので、日々LeetCodeなどで鍛錬をし、また最新のInterviewのトレンドを追い続けないといけないなと感じる日々です。(*4)

*3: なおGoogleはどんなに社会的ステータスが高くても、みっちりとCoding Interviewを実施するそうです(笑) 知り合いの著名な教授がsabbatical中にGoogleでInterviewを受けた際に、ひたすらCoding Interview面接を受けたと言っていました。
*4:  面接官をやってはいますが、10個ほど問題をストックしておいて、その問題を使いまわしています。なので、自分がきちんとコードを書いたり、新しいトレンド追ってないといけない次第です。

この記事が気に入ったらサポートをしてみませんか?