インタビューについて(エリック・リッパート)

翻訳者から
Eric Lippertは(過去に)C#言語の開発者として主に知られており、多くの人が彼のブログ「 Faulous adventures in coding」を読んでいると思われます。 以前、このブログの公式翻訳が MSDNで公開されていましたが、LippertがMicrosoftを辞めた後に終了しました。 もちろん、オリジナルを読むことほど良いものはありませんが、私はエリックの最近の投稿から何かを翻訳するための変更を決定しました。 面白いものになることを願っています。



以前、技術面接のプロセスに関する古い記事を2つ(オリジナル: 1つ2つ -およそTransl。)再公開しました。 私はインタビューをどのように行い、何に注意を払うかについて、より詳細に説明できると信じています。



私の主な目標は次のとおりです。





もちろん、悪い従業員を雇うことを避けることは、良い従業員を雇うことよりもはるかに重要です。 優秀な従業員がいない場合、これは非常に悪いことですが、スタッフの不足はチームの生産性を何年も低下させる可能性があります。



最後のポイントも重要です。 人を仕事に連れて行きたいなら、明らかに良い印象を与えなければなりません。 しかし、私も否定されているすべての人が私たちの良い意見を持っていることを望みます。 彼らには話をしたい友人がいます。 いつか彼らは私たちの製品の購入を決定するか、それを勧めることができます。 面接は費用のかかるビジネスプロセスです。 もし彼が雇用につながらないなら、多分私たちはクライアントを獲得するか、少なくとも自分自身に大きな恩恵をもたらすでしょう。



インタビューは次のとおりです。



まず、申請者が快適であること、喉の渇きを癒す何かがあること、トイレに行きたくないなどを確認する必要があります。 それから、誰かが私の前に誰かにすでにインタビューしている場合、私は尋ねます、「お元気ですか?」 この質問の目的は、雰囲気を和らげ、会話を開始し、候補者が面接に関して質問があるかどうかを確認することです。 候補者がすでに自分自身をどのように見せたかについての情報を持っていることもありますが、意思決定を目的とするものではありません。 (Microsoftは、チェーン内の次のインタビュアーに潜在的な問題を掘り下げることができるように、できるだけ早くフィードバックを行うことをお勧めしました。コベリティでは、各インタビュアーが公平に開始する可能性が高くなります。



その後、候補者の履歴書から古くて面白くないものを選択します。まず、「エレベーターピッチ」-プロジェクトを説明するいくつかの文、面白さ、重要性を説明してください-そして、このプロジェクトで解決した問題を詳細に説明してください。



これも、候補者が履歴書から何かについて話しているので、候補者がリラックスするのに役立ち、おそらくそれが得意です。 まず最初に調べたいのですが、インタビューを受けた人は普通にコミュニケーションできますか? あなたは履歴書から物事について1つか2つの文を話すことができない人がどれだけいるかに驚くでしょう。 第二に、彼らはこのプロジェクトで実際に何をしましたか? それは衝撃的かもしれませんが、人々は常に自分の長所を飾ります。 候補者の正確な行動の詳細を調べたところ、彼が本当に「賢くて物事を終わらせる」(賢くて物事を成し遂げる-およそTransl。)かどうかを理解できます。



それから、私たちは本当に興味深い段階に進みます:技術的な挑戦です。 目標は、候補者が毎日書く必要のある種類のコードを書くことができるかどうかを調べることです。 ボード上で手書きでコードを書くことは批判されていることを知っていますが、この批判に同意します。 これは不自然な環境であり、実際のコード記述と同じではなく、ストレスの多い状況などです。 私はそのような困難を最小限に抑える質問を考え出そうとしますが、候補者が実際の仕事に対処するかどうかをまだ示すことができます。 (そして、人がボードにコードを書きたくない場合、コンピューターでそれを行うことができます。しかし、私が尋ねる質問は、6行以上のコードを書く必要はほとんどありません。最高の求職者は、テキストエディターの助けなしで半ダース行を書くことができるはずです。



そして、この段階は本当に重要です。 応募者が通常とは異なる一連の要件を満たしていることを確認します。 言語分析ツールに取り組んでいるチームの候補者は、コンピューターサイエンスの理論的基礎に強く、同時に不完全なコードの現実の世界で働くことができるはずです。 科学者の理論を深く理解する一方で、実際のコードを書くことができず、バイナリツリーとは何かを教えてくれなかった経験豊富な産業プログラマーのブレークスルーについてインタビューしました。



優れた技術タスクには次の特徴があります。



私がMicrosoftで長年使用しており、Coverityでさらにうまく機能するタスクには、次のスキームがあります。



まず、パブリックAPIのC ++で記述された2つのメソッドがあり、それぞれが3行の非常に単純なコードで構成されています。 APIは、「サーバー」上の「タスク」を管理し、「クライアント」によって使用されます。 スクリプトは意図的に非常にぼやけていますが、コードは明確です。 各行に候補者を渡し、候補者がコードを理解していることを確認します。 ここでは、単純な構文の基本的な理解だけが必要です(候補者の大半は履歴書によるとC ++に精通しています。これは仕事に必要なためです)。



次に、このコードを調べて問題ないか候補者に指示します 。 そして、他の誰かのコードを調べるときに、彼がどの方向を掘るかを観察します。 提示されたコードには、設計、信頼性、セキュリティ、テスト容易性、移植性の問題があります。 候補者が自分で見つけた問題を調べ、何かを見逃した場合は、「クライアントがサーバーを意図的に中断しようとした場合、どうしますか?」または「このコードをコンパイルして64ビットマシンで実行するとどうなりますか?」彼がヒントを理解しているかどうかを確認します。



これは、毎日使用する必要がある本当のスキルです。まず、自分のコードと同僚のコードのコードレビューを行います。 次に、私のビジネスは、コード内のコードを分析し、それがコードであると判断するプログラムを作成しています。 申請者が他人のコードを検証できない場合-どこでも成功する可能性は低いです。 6つの命令を含むプログラムで数十個のエラーを検出できない場合、エラーを検出するコードアナライザーを作成することはできません。



ここでは、対象分野の理解、批判的思考、および基本的な知識を探しています。 多くの場合、この段階では危険信号があります。 たとえば、64ビットアーキテクチャではポインターの長さが64ビットであることを知らない「コンピューターサイエンスの博士号」の申請者がいました。 はい、そしてなぜ彼らは知っている必要がありますか? 彼らが言うように、天文学は望遠鏡を作る科学ではありません。 理論的なコンピュータサイエンスの広範な知識は、必ずしもプロセッサとメモリ間のバス帯域幅の知識を必要としません。 しかし、一般的なアーキテクチャでのポインターの実装方法を理解していない候補者は、ポインターの長さに関連するエラーを探しているアナライザーの開発チームで働いて成功することはほとんどありません。



また、多くの申請者はコードの誤りを特定していますが、その結果を説明することはできません。 未定義の動作は、定義により未定義です。 しかし、悪意のあるクライアントが任意のメモリ(任意のメモリへのポインタ-およそTransl。)にポインタを割り当て、そのようなポインタを使用してサーバーに仮想メソッドを実行させると、コンパイラが実際にコードを生成する方法の理解を示します。



これは技術的なタスクの最初のフェーズです。 次のステップには、設計と、場合によっては少量のコーディングが含まれます。 「APIの実装は変更できますが、メソッドシグネチャは変更できません。検出された各エラーをどのように修正しますか?」 繰り返しますが、これは毎日使用しなければならない主要な作業スキルです。「サーバー」のエラーを修正し、「クライアント」の動作を変更できません。 おそらく、呼び出し元のコードは、顧客または別のチームに属しているか、すでに販売されている可能性があります。



この段階では、次のことに注意します。



候補者の成績がよければ、タスクの複雑化は非常に簡単です。 クライアントが多くのスレッドで使用されているとします。 どの同期戦略が高いスループットを維持しますか? コンピューターの再起動時にタスクの状態を保存する必要があるとします。 サーバーがクラスター内にあり、負荷を他のサーバーにリダイレクトできる場合はどうなりますか。 彼らの知識の深さを知りたい。 または、クライアントの数を10に制限することにより、タスクを簡素化できます。 「タスク」が特定の特定の順序で開始および終了し、前のタスクが終了した後に次の「タスク」が開始すると仮定します。 などなど。 申請者には、少なくとも何らかの問題に対処したと感じてほしい。



面接の最後に、候補者がチーム、空席、会社などについて質問できるように、時間を作ろうとしています。 (だれも「リンクされたリストを展開するコードを書いてみませんか?」と尋ねたことはありません。だれかがこれを行った場合、私は非常に驚くでしょう)。 私にとって、これは私たちの会社を「宣伝」する機会であると同時に、応募者の質問から彼らにとって何が重要かを理解する機会でもあります。



All Articles