POSTD PRODUCED BY NIJIBOX

POSTD PRODUCED BY NIJIBOX

ニジボックスが運営する
エンジニアに向けた
キュレーションメディア

Ammon Bartram

本記事は、原著者の許諾のもとに翻訳・掲載しております。

この記事の前編はこちら: プログラミング面接を突破する方法 (前編)


5. 成果を強調する

される可能性のある質問の3種類目は、経験です。面接官は、過去に完成させたプログラミングプロジェクトについて話すよう要求してきます。この質問で多くのエンジニアが犯す間違いは、技術的に興味深いサイドプロジェクトについて話をすることです。多くのプログラマは、ニューラルネットワーク分類器を実装した経験や、Twitterボットを書いた経験について話そうとします。しかし、その選択は間違っています。面接官がそういった分野のことを評価するのは、非常に難しいからです。多くの求職者が単純なサイドプロジェクトを誇張します(実際にやったことがない場合もある)が、面接官には、あなたがそれをやっているかどうかを知る方法はありません。

解決法は、結果を生んだプロジェクトを選んで、結果を強調して話すことです。必ずしも技術的に興味深いプロジェクトについて話すことになるとは限りませんが、効果的です。実社会に大きく影響を与えた自分のプログラミングについて(事前に)考えてみてください。もし、iOSゲームを製作したことがあり、5万人もの人がダウンロードしてくれたとします。ダウンロード数を挙げるのは得策でしょう。もし、インターンシップ中にadminインターフェイスを書き、それが管理者用に実装されたことがあるのであれば、その開発したものが実装された事例を話すのもいいでしょう。製品の実用化に至ったプロジェクトについて話すのも集中し仕事を成し遂げることができることを表すのにいいでしょう。興味ある分野の技術のみに固執するプログラマを会社は好まず、避ける傾向があります(このようなプログラマは必ずしも生産性が高いわけではありません)。

6. 動的言語を使用する。でもC言語も言及する

面接中にPythonやRuby、JavaScriptなどの動的言語を使用しましょう。もちろん一番よく知っている言語を使用するのが最善策でしょう。しかし、「本当」のプログラミング言語だと思い込んでいるため、多くの人がC言語やC++、Javaで面接を進めようとする傾向があります。少なくともスタートアップ会社の採用面接において、これは悪いアドバイスだと思います。動的言語を使用している時の方が候補者のパフォーマンスは良いのです。これは、動的言語のコンパクトな構文や柔軟性のある型付け、配列やハッシュリテラルが利用できるため、このような事実があるのだと思います。いずれも寛大な言語なのです。複雑なシステムを構築する際には障害になる場合があります(賛否の多い点です)が、ホワイトボードに二分検索を書き込むのには最適です。

どの言語を使用するにしても、他の言語にも触れることは大切です。会社がスクリーニングするアンチパターンは、1つの言語しか知らない人です。もし、1つしか知らないのであれば、その言語に頼るしかないでしょう。しかし、ちょっとでも複数の言語を使用した別のプロジェクトに参加したことがあるのであれば、ぜひ触れてください。CやC++、GoやRustなどの低水準の言語を使用したことがあるのであれば、これも役に立つでしょう。

Java、C#やPHPは難しいケースでしょう。Triplebyteの 最後のブログ投稿 で説明したように、これら言語に対してスタートアップ会社が偏見を持っていることを知りました。実際にこれらの言語を使用するプログラマの方が面接の合格率が低いことがデータで分かりました。不公平ではありますが、事実なのです。もし、選択肢があるのであれば、他の言語をスタートアップ会社の面接で使用することをお勧めします。

7. とにかく練習をする

質問に答える練習をすれば、面接での応対が良くなるでしょう。これは面接自体がストレスとなり、そのストレスがパフォーマンスに悪影響を及ぼすからです。解決策は練習です。面接という状況に慣れることでストレスを軽減することができます。数をこなせば自然に慣れます。例えば、同じポジションの面接でも、最初の面接がうまくいかなくても、何回か面接が続くとだんだん自信が備わってきて、パフォーマンスが向上します。もし、ストレスが原因で面接に失敗してしまうのであれば、練習をしてストレスを感じないようにするしかありません。面接質問集(『Cracking the Coding Interview』はお勧めです)を入手し、答える練習をするのです。各質問にタイマーを20分に設定し、答えてみるのです。ホワイトボードに書きながら答える練習をするのがいいでしょう(会社によってはホワイトボートを使わず説明することになります)。ない場合は、ペンで紙に書くのも良いシミュレーションになるでしょう。もし、お友達に助けてもらえるのであれば、二人で面接の質疑応答をするのが良い練習になります。面接質問集をたくさん読むことで、どのような状況で何を言えばいいのかなど、いろいろとアイデアが浮かんできます。驚くほど多くの質問が再利用されています(そのままの形で利用されたり、形を変えて利用されたりする場合があります)。

経験豊富な(ストレスを感じない)求職者にとっても役に立つ情報です。面接とプログラミングに使うスキルは根本的に異なり、使わないと衰えます。しかし、経験豊富なプログラマは面接のために準備をする必要がないと(かなりの人)が思っています。そのため、準備をほとんどしません。このこともあり、若手の求職者の方がベテランの求職者よりも面接で上手な応対ができるのです。会社側もこのことを把握しているため、逆に、ベテランの求職者に対しての期待値を低く設定していると言います。

8. 経歴について触れる

資格は面接官に先入観を与えます。Triplebyteの求職者でも、一流企業での就業経験や一流大学を卒業したプログラマの方が、職歴や学歴のないプログラマよりも面接に合格する確率が30パーセント高いことが分かっています(職歴や学歴を伏せてパフォーマンスレベルが同じあると結果が出ているにも関わらず)。個人的には好ましくない状況だと思います。実力主義ではなく最悪だと思いますが、もしこのような経歴を持っているのであれば、面接官に必ず伝えた方がいいでしょう。面接官が必ずしも履歴書を見てくれているとは言えません。

9. 他社からの採用通知について述べる

会社の創設者の資金集めの話を読むと、最初のベンチャーキャピタルの投資にまでこぎつけるのが一番難しいと言います。しかし、1つでも投資提供があると次々と出資は続きます。職探しにおいても同じことが言えます。実際に別の会社から採用通知をもらっている場合、面接でこれを必ず述べましょう。他社が採用しようとしていることを知ると面接官の判断に大きく影響します。

戦略としては、興味の薄い会社から順番に面接を受けていくといいでしょう。数をこなすことで、面接のコツがつかめ、本命の会社に採用される確率が上がります。この戦略をお勧めします。

結論

面接に合格するにはスキルが必要です。腕の良いプログラマであることは大切ですが、全体像の一部でしかありません。面接で落ちることは多くの人が経験することです。そのため、きちんと準備すれば誰でも合格できます。重要になるのは意欲ですが、調査をすることでさらに強固なものにしてくれます。面接中、面接官は候補者を助けてくれようとします。正しいプロセスを踏んできちんとコミュニケーションをとれば、助けてくれていることが分かります。練習はどんな時でも役に立ちます。多くの面接で出題される質問を読み、ストレスなく応対できるようにすれば多くの採用通知が届くでしょう。

この方法は理想的ではありません。面接の準備には労力が伴い、プログラマにすばらしいソフトウェアの構築以外のスキルを習得させるのは時間の無駄でしょう。会社は採用面接のプロセスを改善し、学歴やどれだけ何を覚えているか、練習された回答などをそれほど重視するべきではありません。Triplebyteではこれを実行しています。履歴書を見ず、プログラマに仕事を紹介しています。求職者の評価方法について求職者自身に選択肢を幾つか提示して、その中から求職者が好むものを選んでもらっています。Triplebyteではこの評価方法を研究し、定期的にプロセスの改善を実施しています。Triplebyteででは、スタートアップ会社への就職支援をしています。興味のある方は、 ここ から。しかし、一般的なプログラマの採用面接プロセスの現状は上で述べたとおりです。プロセスが変わるまで事前に準備して面接に望むしかありません。

Jared Friedman、Emmett Shear、Garry Tan、Alexis Ohanian、Daniel Gackle、ドラフト版を読んでくださってありがとうございました。