私は大企業の採用担当者ではありませんが、中小企業での経験が豊富で、常識も少しあります。
2013年に、私はAboutEcho.comで非常に成功した採用キャンペーンを実施し、その結果、9人の上級エンジニアが採用されました。私のロシア語を話す読者はここでそれについて読むことができ ました。
これらすべてが、インターネットの巨人が今日までエンジニアを雇うために使用している方法を批判する自信を与えてくれます。
最良の解決策を目指しないでください
面接に到着すると、面接官はあなたに問題を提起し、0〜2分で解決策を期待します。もっと時間がかかると、彼らは本当に興奮して、何かを言うように頼むでしょう。
これは理解できます-結局のところ、彼らは45分しかなく、あなたと多くのことについて話し合いたいと思っています。
2分以内に思いついたソリューションの品質であなたがどのように判断されているのか理解できません。それは人間の創造性がどのように機能するかではないからです。多くのアイデアを思いつくのは簡単ですが、常に最良のものが最初に来ることを期待するのは奇妙です。天才でさえ、短期間で世界最高のアイデアを予想通りに生み出すことはできません。
創造性とは、思いついたアイデアの流れを評価してフィルタリングする機能です。これに本当に興味があるなら、他の人にいくつかのアイデアを比較して評価してもらいませんか?人が提案されたソリューションのプロパティを評価できるかどうかを確認しますか?彼が長所と短所をはっきりと見ているなら?
そして、2分以内に最良の解決策を考え出すように頼んだら、運をテストしているだけです。あなたは成功した従業員を雇うビジネスをしていますか?または有能ですか?
パズルを聞かないでください
リンクリストにループがあるかどうかを確認するにはどうすればよいですか? 1つのN次元ボックスが別のN次元ボックスに収まりますか? 3番目の変数なしで2つの変数を交換できますか? 2隻の移動する船の間の最短距離を見つける方法は? N-1順列のみを実行して、N要素のすべての順列を検索しますか?
これらのパズルは話すのが楽しく、その解決策は非常に役立ちます。子供の頃、私は彼らの多くに数学の楽しさとエッセイを読んでもらうのが大好きでした 。誤解しないでください、彼らは陽気です。
しかし、どんなに面白くても、これらは単なる逸話です。パズルの特性は、あなたがそれに対する答えを知っているか、知らないかのどちらかであるということです。これは他に何も教えてくれません。それは将来のパフォーマンス、スキル、能力、または他のものとは何の関係もありません。特定の答えを知っているということは、一般的で予測可能な方法で実際の問題を解決するための装置があるという意味ではありません。それがあなたに伝える唯一のことは、その人がこの状況にあり、誰かが彼と解決策を共有したということです。それ以上でもそれ以下でもありません。もうやめなさい。
ろうそくがロープを燃やす前にどのように救われるのですか?
代替案を受け入れる
これはやや予想されることですが、大企業は依然としてそれに賛成しているようです。面接対象者が別の解決策を提供する場合、面接官として、あなたは何かを学ぶ機会があります。これは、提案された解決策が不可能または悪いことが判明した場合にも、より深い議論を行う良い機会です。
しかし、私はかつて同じ複雑さの代替ソリューションを提案したことで解雇され(そして「この問題への唯一の真のアプローチ」についての講義を負いました)、別の機会に私は厳密に特定のソリューションに導きました。後者の場合、インタビュアーは本当に私の懸念をすべて無視し、問題の解決策として彼が見たものだけを話し合いたいと思っていました。その後、私について「印象的ではない」レビューを残しました。
誰もすべてを知っているわけではありません。開かれている。聴く。瞑想する はい、誰かにインタビューしている場合でも。
欠陥に寛容であること
単一のエラーは、CSで最も難しい問題の1つとして広く認識されています。理由は、誰もがエラーを発生させるからです。エラーはプログラマーの生活の一部であり、取り除くものではありません。優れたプログラマーは、それについて何をすべきかを知っているだけです。プログラマーの質は、彼らが犯した間違いの数によって決まるわけではありません。
さて、面接中に間違いを犯さなかった人だけを選ぶと、魔法のように、常に完璧なコードを書くプログラマーのチームができなくなります。彼らが必然的に間違いを犯したとき、あなたは彼らがどのように振る舞うかを知らないだけです。
ですから、間違いは実際には良いことです。なぜなら、この人がどのように間違いを訂正するかを学ぶからです。エラーを判断せず、対話者がエラーをどのように処理するかを評価します。
- 簡単なコード、
- 分裂とルール、
- セルフテスト、
- 不変量、
- ステートメント、
- コンパイルと実行、
- テスト。
ああ、最後の2つについては申し訳ありません。あなたが彼らに彼らのプログラムを実行させないことを忘れました。さて、あなたはその時何を期待しましたか?
確認させてください!
真剣に、ホワイトボードにプログラムを書くことは何ですか?
つまり、抽象的なことを議論する方が効率的であるため、アルゴリズムについて議論できてうれしいです。
しかし、ノートブックで本物のプログラマのためのプログラムを書くのでしょうか?それらを実行せずに?ポイントは何ですか?コードの最初のドラフトを取得するのは、プロセス全体の10分の1であり、その後にコンパイル、検証、チューニング、テスト、検証などが続きます。誰をからかっていますか?これらは、プログラマーのワークフローの重要な部分です。コードを確認するのは、これまでにではなく、すでにこれらすべてを実行した場合にのみ役立ちます。
それは、アーティストに馬を描くように頼み、最初のスケッチの途中で彼を止めて、脚の4本の垂直線を見てそれを判断するようなものです。彼女についてどのくらい学びますか?
より深く探求する
5つの短いインタビュー?または2つの長いもの?
5つを使用すると、2つよりも優れた5つの独立した意見が得られます。しかし、45分でどれくらい深く潜ることができますか?練習では、20〜30行のコードを記述し、いくつかの非常に単純な質問をするだけで十分であることが示されています(難しさは何ですか?テスト方法は?)。
次のインタビュアーは、前のインタビュアーまで同じプロセスを繰り返すだけです。それは長くは続かないでしょう。長くはない。
それらを2つにして、本当にしっかりさせてみませんか?たとえば、昼食前と昼食後?3時間もそれほど多くはありませんが、少なくとも、45分ごとにリセットして最初からやり直すことなく、コードをテストする方法、コードを変更する方法、要件を処理する方法を確認する機会があります。 ..。。
時間がかかると、真空中の抽象的なアルゴリズムの問題だけでなく、システムの一部であるかのようにコードを記述して、その実際の特性についてさらに1つか2つ学ぶように彼に依頼することもできます。
そして、もっと意見が必要な場合は?後で議論するように、部屋に数人のインタビュアーを配置します。
背景を探る
私は 14年の経験があります(執筆時点、2019年)。関数型プログラミング、分散システム、コンセンサス、レプリケーション、共同編集、CRDT、並列アーキテクチャ、ユーザーインターフェイスフレームワーク、チームプロセス、製品設計、ユーザーエクスペリエンスについてお話しさせていただきます。私はこれらすべての分野で実践的かつ研究的な経験を持っています。それらのすべては、私がインタビューしたインターネットの巨人に多かれ少なかれ直接的な関心を持っています。
私はこれについて尋ねられたことがありますか?番号。
「リストを取得する関数があると想像してください...」が5回続けて表示されます。5つの学校レベルのタスクはあなたに何の適切な考えを与えるべきですか?コーメンらをどれだけ詳しく読んだか?正直なところ、彼らも彼らについて尋ねられることはめったにありません。
代わりに、候補者の経験に基づいて面接をカスタマイズしてください。彼が得意なことについて話してください。あなたは深い質問をし、経験のレベルとそれがあなたの会社にもたらす利益についてもっと学ぶ機会があります。
プロセスをスムーズにする
間違った方向?遅延チケット?オリジナルのAdobeReaderを特別にインストールする必要があるアプリケーションフォーム?なじみのないキーボードレイアウトと、ローカルマシンでも速度が低下するショートカットのない悪いWebエディターを備えた安価なウルトラブック?申し訳ありませんが、私は世界で最も有能なIT企業のオフィスにいますよね?
私の場合、1人の採用担当者が1日に5回の面接を行っていました。毎日5人。この会社の採用担当者の数を掛けたもの。これらの候補者全員がプロセスに少し不満を感じていると想像してみてください。毎日。毎年。
あなたはそれが問題ではないと思うかもしれません。依存します。ドアに漫画の名前が書かれたテレビ番組「ルイ」のエピソードがありました。したがって、彼は次のように主張しました。そうです、この間違いは簡単に起こりますが、修正するのも簡単です。関係ありません、一日だけです、少しでも心配なら、正しくやってください。
はい、私は誰もがより良くできると信じています。
最終的に
ソフトウェアエンジニアを雇うなら、大企業の開業医はあなたの友達ではありません。常識、公平さ、寛容さ、真の関心、そしてオープンマインドは友達です。
良い採用!