優れたプログラマーを認識する方法は?[閉まっている]


131

当社は新しいプログラマーを探しています。そして、ここに問題があります-インタビューで本当に見栄えが良く、必要な技術を知っていて、良い職歴を持っているように見える開発者がたくさんいますが、2ヶ月の仕事の後、あなたは彼らが働けないチームがいくつかのコードを書くのに非常に長い時間がかかり、さらに、結果は本来あるべきほど良くありません。

それで、正式なテストを使用していますか(ありますか?)。優秀なプログラマーと優秀な人をどのように認識していますか?将来の問題を明らかにするかもしれない単純な「良い」質問はありますか?...それとも、その人についてのあなたの「気持ち」(つまり、主にあなたの経験)、および彼/彼女を試してみることについてですか?

編集:Manojの答えによると、ここに就職の面接でコーディングタスクに関連する質問があります。


3
<joke>優れたプログラマーを認識するために、私は常にプログラマードレスコードをヤードスティックとして使用します。;-) </ joke>
ガルベニア語

7
私は約6フィート、185ポンド、剃った頭とヤギひげです。私は白いサーマルの上にチャック・テイラーズと青いTシャツを着ています。優しく投票してください-私は質問に答えました。:)
MusiGenesis


1
ここにトピックの別のビューがあります- プログラマーにインタビューする方法

2
この質問は、2008年に尋ねられたとき、このサイトにぴったりでした。5年。5年後、Prog.SEはSO2に変わりました。
ウォーレンP

回答:


157

彼らが興味を持っていることについて話してもらいましょう。私は、プログラミングについて話すのに本当に情熱的であるが、実際にはコーディングできない開発者に会ったことがありません。もちろん、それらは存在する可能性があります-あなたのインタビューも能力をチェックする必要があります-しかし、情熱は私の経験の良い指標です。(これは流行語で「話をする」ことができるのと同じではないことに注意してください。)

自分の好きな言語やプラットフォームについて、彼らが気に入らない点を尋ねます。彼らはどのように物事を修正しますか?彼らは次のバージョンで何を見たいですか?趣味のプロジェクトはありますか?ブログを持っているなら、それを読んでください。一般的なオンラインプレゼンスを確認します。


3
素晴らしいアイデア-特に趣味のプロジェクトや好きな言語の問題は、私には本当に良いようです。プログラミングとの関係についてさらに明らかにする必要があります。ブログも良いアイデアです。Unfortuantely、通常、彼らはブログの:-(を持っていない...ありがとう。

25
情熱は必ずしもプロフェッショナリズムやチームワークにつながるとは限りません。コーディングが必要なものではなく、クールで楽しいものをコーディングしたいだけかもしれません。

22
@プレストン:それは理論的には確かに真実ですが、私はうなり声をあげることに満足していない情熱的な人に会ったことはありません。私はプリマドンナのコーダーに会いましたが、彼らはそのようなことをしていると思いますが、一般的には情熱的ではありません。プロフェッショナリズムのためのテストは...とにかく、かなり困難である
ジョンスキート

36
THEIR BADGEの数を確認

83

良い人を雇うのは難しい

私がそれを良くするためには、いくつかの本当の間違いがありました。最初の数回はあなたがそれを信用しなかった後、それを後悔し、あなたの腸管をもっと信頼し始めます。

私はスティーブイェッジの電話画面の質問に大きな敬意を払い、これをいくつかの成功を収めた人々にインタビューするための基礎として使用しました。
また、Joelのゲリラインタビューガイドを読んだ後、人々とのインタビューが上手になったと思います(現在はバージョン3.0で、Webおよびすべてのバージョンよりも先にありますが、それは良いことです)。

また、インタビュータグ付けされたソフトウェアエンジニアリングStackexchangeには57の他の質問(2008年11月20日現在)があり、それらのいくつかは非常に関連性が高いので、それらをチェックしてください。


2
善良な人を雇うことはNP困難です。:)
究極の原因

7
電話画面の質問はうまくいきますが、その後、ますます多くの質問がばかげています。私にとっては、優秀なプログラマーが暗記2^16する必要はないと思います。そして、一番下のファーストトラックバージョンはパロディが貧弱です。
ピーター

SOリンクが壊れているようです(結果なしまたは404)。
スティンゲーケンズ

@StijnGeukens、そのタグはSoftware Engineeringに移行されたようです。リンクを更新しました。
ハミッシュスミス

47

いくつかのアイデア:

  • いくつかの異なる角度から自由回答形式の質問をいくつかします。

    • いくつかのコードを確認します。 何が特定されていますか?技術的なエラー、スタイルの不一致、コメント、アルゴリズム、保守性など
    • いくつかのコードを書きます。 プロセス、防弾、読みやすさなどを探します。
    • 小規模システム用の高レベル設計を作成します。 問題の理解、アプローチ、コミュニケーション、完全性、詳細を探してください。
    • ソフトウェア開発プロセスを説明してください。 デザイン、コラボレーション、レビュー、テスト、良い/悪い習慣、全体的な経験を探します。
  • 候補者がよく知っていると主張する何か-何でも選んでください。簡単な質問をしてから、その答えに基づいて、もう少し詳細な質問をして、候補者の知識の限界に達するまで「掘り続ける」。これにより、次のことがわかります。

    • 誠実さ:彼/彼女は主張されているほど知っていますか?
    • 知識の深さ:物事をどれだけうまく学べるか?
    • コミュニケーション:あなたがなじみのないことをどれだけうまく説明できますか?思考プロセスは論理的ですか?
    • ストレスの多い状況への反応:回答するのにどれだけ苦労しますか?彼/彼女はそれを偽造しますか?避けられない「わからない」は簡単ですか、難しいですか?
  • チームワーク、期限切れのプロジェクト、デバッグなど、候補者が以前の仕事のさまざまな状況にどのように対処したかを尋ねます。答えは正または負ですか?情熱的?インテリジェント?rog慢?

最高の候補者は、熱心で、ベテランで、自信はあるが礼儀正しく、最も重要な存在であると思います。内部に誰かがいることを知る必要があります。:-)


4
印刷されたコードのレビューを依頼された最初のプログラミングインタビューを覚えています。上部には、コードが何をしたかを説明するコメントがいくつかありました。コードを読んでこれを確認し、基本的にコメントを逐語的に読んで、彼らは「とても良い!」と言った。私は、「コメントブロックでまさにそう言っている」と言った。彼らはかなり恥ずかしかった。
ダスティン

@Dustin IMOは、候補者がレビューすることになっているコードにコメントを残すだけでは、かなり不注意でした(?)。これは基本的に、コメントに含まれるものに基づいて、無料の回答または混乱を与えます。
-cst1992

39

優秀なプログラマーを認識するためには、優秀なプログラマーでなければなりませ。つまり、インタビューで言われ、行われた内容を見るにはプログラミングを非常によく知っている必要があり、どの質問をするべきかを知る必要があります。

インタビューで候補者が間違った答えを与えられたのを見たことがありますが、彼らの説明は彼らが主題を知っていることを示しています(したがって、ネットを検索することで簡単に正しい答えを得ることができます)。それを見るためには、あなたが非常によく質問している主題を知る必要があります。

もう1つは、簡単にグーグルで検索できる詳細についての質問を避けることです。これらの質問は、候補者が物事をどれだけよく覚えているかを示しているだけであり、あなたが探している知識と理解を本当に持っているかどうかを示すものではありません。

私の推薦は、多くのプログラミングを知っている人から助けを得て、面接を手伝うために、良い人々のスキルを持っていることです。

編集:インタビューについてのコメントもここに書いた。


3
あなたはグーグルについて完全に正しいです-優れたプログラマーはすべてを知る必要はありませんが、彼はすぐに見つけることができるはずです。

2
「多くのプログラミングを知っていて、優れた人材スキルを持っている人」...そしてそれが問題です-それを見つけるのは簡単ではありません。通常、これらのスキルは1つだけです。それが、両方のブランチを改善するために最善を尽くしている理由です:-)。

7
優れた人材のスキルを持つことは、通常、抽象的な思想家であることと矛盾します。抽象的思考者でないことは、通常、優れたプログラマーであることと矛盾します。
トマラック08年

7
Gius:運がよければ、人間は生物のコンピューターであるということを理解しているプログラマーを見つけることができます。彼らはまた、その分野で自分自身を改善することに興味があるので、しばしば良い人のスキルを開発しました。

Eigir:同意します。しかし、ここで誰かがすでに言及したように-あなたが誰かを見つけたら、あなたは大当たりします;-)。幸運を祈っています。

23

プログラミング能力がすべてではないことを忘れないでください。あなたはあなたのために働く世界で最高のプログラマーを持つことができますが、彼らが他の人々と働くことを嫌うならば、あなたは彼らが非常に役に立つとは思わないでしょう。

プログラマーの性格は、ほとんどの雇用者がランク付けするように思われるよりもリストの上位にあるべきです。私の現在の職場では、彼らは正しいタイプの人を雇うことに非常に注意しています。

一般に、人々は優れたプログラマーになることを学ぶことができますが、人々は一般に優れた人間になることを学ぶことはできません。


1
彼らが他の人との仕事を軽disするなら、どうして彼らを「世界一のプログラマー」と呼べるでしょうか?プログラミングとは、コンパイラーと話をしてコードを分割することだけではありません。プログラマー/ソフトウェア開発者のほとんどのタスクには、ある程度の協力が必要です。
クリストファー・クロイツィヒ

あなたの意見はわかりますが、この文脈では「プログラミング」とはコーディングについてのことです。そうでなければ、「ソフトウェア開発者」という用語を使用していました。「プログラマー」と「ソフトウェア開発者」という用語は同義語ではありません。
ドクタージョーンズ

6
いいえ、実際、多くの人々はより良​​いプログラマーになることを学ぶことができません。彼らは5〜10年の経験を持っている場合と、率直に言って、私は彼らがすでに、あなたが知っている、する方法を知っていることを期待する彼らの仕事をします。これは質問に対する答えではありません。「良いプログラマであるかどうかを気にしないことで、優れたプログラマを識別する」と言っているだけです。
Benubird

1
@Benubirdの私のポイントは、特にチームでの作業に関しては、対人スキルが生のプログラミングの才能よりも重要になる可能性があるということです。私は仕事ができない人を雇うことを主張していません。チームでうまく機能しない場合は、「ロックスター」プログラマーを雇う価値はありません。摩擦と手間をかける価値はありません。
ドクタージョーンズ

@DoctorJonesと私はあなたに同意します。あなたはまったく間違っていません。あなたが与えた答えは、「優れたプログラマをどのように認識するか」という質問に対する答えではないということです。
ベヌバード

16

それらをコードにします。約4時間または5時間で解決できる問題を提示し、実際にコーディングを開始する前に、ドキュメント、コーディングスタイル、ソリューションの計画方法などについてコードを調べます。実際に問題を解決する必要はありません。そして、ジョン・スキートが述べたように、彼らにプログラミング、彼らの選んだ言語、そしてそのようなことについて話させます。優れたプログラマーの情熱を再認識することができます。stackoverflowのように、彼らが従うプログラミング関連のサイトの数を尋ねます。彼らがフォローしているブログは良い指標になります。


私は実際に彼らにコーディングタスクを与え(インタビューの前に行うことができます)、そしてインタビューの主題としてコードを使用するというアイデアが好きです。彼らは上のさまざまなソリューションを選択し、なぜ彼らは説明してください...

一般に、コーディングタスクに関するアイデアは非常に優れています。しかし、私は彼らの中にあるものを実際に示すタスクを作成することは非常に困難であり、別のかなり長い(しかし非常に不愉快な!)議論のための良いトピックであることを恐れています。...ここでそれについて質問する必要がありますか?;-)

お気に入りのブログのリストは、優れた指標です。

6
私はコーディング面接を受けました。インタビュアーは、私は彼と私の解決策について話し合うことを主張しました。私はアイデアを出し、彼はそれが失敗するかもしれない方法を提案するでしょう。このようにして、彼は私が問題をどのように解決するかを学びました。それは私がこれまでに経験した中で最も困難で、最も公正なインタビューでした。

@gius-その質問をするべきだと思う。
マノジ

16

情熱の答えが好きです。実際にそれを上手に使うには、あなたが一緒に仕事をすることに情熱を傾ける必要があると思います。

仕事以外の面で優れたプログラマープログラム(少なくともしばらくの間)。彼/彼女はプログラミングの問題を解決するのが好きです。また、自宅で特定のニーズを解決するプログラムが見つからない場合、通常は自分で解決しようとします。

しかし、プログラマーにはいくつかのタイプがあります。

  • 文書化が大好きな人がいます。個人的には文書化が嫌いです。しかし、行われたことを文書化することは重要です。
  • あなたには「ハッカー」がいます。複雑なパズルを解くことに熱心な人は、どこでグーグルを検索しても解決策が見つからない可能性があります。彼らは、必要なツールを手に入れれば「どんな」問題も解決できます。
  • 市場がプログラミングのために雇われたからといって、プログラマーになるように自分自身を教育する人たちがいます。それらは情熱に欠けているため、通常平凡です。
  • コミュニケーションに優れた人がいて、「何でも解決できます」が、仕事が得られると、彼らは解決しようとしている問題の助けを得るために他のすべての人に引き継がれます。

非常にうまく文書化されており、優れたコミュニケーションスキルを備えた「ハッカー」を見つけることができれば、大当たりしていると思います。

ああ、最後の1つです。あなたはおそらく、彼がプログラミングを使用して起動するだけなので、リーダーの野心を持っているプログラマを望んでいないでしょう。つまり、遅かれ早かれそのリソースを失うことになります。

プログラマーを雇うときに尋ねる質問は、「なぜプログラマーとして自分自身を教育したのですか?」です。彼らがそこにためらうならば、それは死んだ景品になるでしょう。

それが私の意見です。


2
刺激的な質問-「なぜプログラマーとして自分自身を教育したのですか?」

5
遅かれ早かれ、すべてのリソースが失われます。岩だけが永遠です。
カールマナスター2009

1
少し目が見えた。「Schlubladendenken」

6
「おそらく、リーダーの野望を持つプログラマが欲しくない」のでなければ、私はこれに賛成票を投じるでしょう。責任を負おうとする従業員は不可欠であり、組織内でそれらを昇進させる方法を見つける必要があります。
ダニーヴァロード

5
「ハッカー」の定義は私とは異なります。私にとっての「ハッカー」とは、(ある種の)結果が得られるまで可能な限り迅速に物事を「ハッキング」するが、単一のベストプラクティスに従っていないために破壊と恐怖の痕跡を残した人です。「ハッカー」はプロではありません。
デビッドマスターズ14年

7

私の友人は、雇用プロセスに追加のステップがある会社で働いています。最初のスクリーニングと面接の後、申請者は数日間「仕事をテスト」しなければなりません。彼は、1人の候補者が必要なスキルと才能をすべて持っていたとしても、彼は仕事をするのに適しいないので彼を雇わなかったと言った。


これは素晴らしいアイディアであり、私はそれが標準的な実践であることを望んでいます。会社の文化に合わないためにいくつかの仕事から解雇された人として、またはスキルレベルの誤判断から、私は最初に水をテストしたいと思います。
DarenW

20
これに関する問題は、誰かがすでに仕事をしている場合、彼らが本当に仕事を得たかどうかを知るためだけに、他の会社のために仕事に行くために1週間ほど離陸することができないことです。
セルセリラ

@Cercerilla右!面接の時間を見つけることはもちろん、彼らのために1週間働く練習もありません。
eaglei22

6

仕事の面接だけに基づいてプログラマを認識することは非常に困難です。

誰かが優れたプログラマーであると判断するいくつかのことは次のとおりです。

  • チームで働くことができる
  • 理解しやすく、安定した良いコードを書く
  • 新しい技術について学ぶことができる

そのため、インタビューで知ることができるいくつかの小さなヒントがあります。

  • 候補者は1つのテクノロジー/プログラミング言語を知っていますか、それとも複数を知っていますか?異なる言語を知っている場合、彼は新しいことを学ぶことができるようであり、現在の好みの技術/言語の欠点についておそらく知っています。そのため、会社で使用しているテクノロジー以外の知識を求めてください。
  • 彼がすでに働いていたプロジェクト、特に趣味のプロジェクトとオープンソースを求めてください。趣味のプロジェクトは、彼がプログラミングが好きで、それが暇なときでもそれを行うことを示しています(そして、この方法は彼のスキルを向上させます)。オープンソースプロジェクトでは、彼が書いたコードを調べることができます。プロジェクトに複数の人が関与している場合、彼のチームスキルについてのヒントを得ることができます。OSプロジェクトでは、メーリングリストアーカイブを参照して詳細を確認できます。

3

インタビューでいくつかのテストを実行できます。

しかし、多くの場合、作業環境自体にも問題があります。確かにこれはあなたの組織には当てはまらないかもしれませんが、ソフトウェア業界の分野では、技術的負債が大きくなりすぎることがよくあります。それから、新しい人を雇うとき、借金のために彼らが良いかどうかはあまり助けになりません。プログラムコードの読みやすさと理解しやすさを最大化すると、新参者が仕事を始めるのに役立ちます。

また、多くの人々は協力できるほどですが、協力する方法がない場合もあります。たとえば、すべての人が開発者である場合、彼らは仕事をすることになっています。まあ、彼らはそうします。しかし、開発プロジェクトを管理し、会議などを開催するアーキテクトはいますか?通常の開発者は、会議を開始するために必要な権限がないと感じ、他の人を時々中断することは道ではないと考えるかもしれません。

互いに通信することは、最終目標であってはなりません。必要なコミュニケーションが少なければ少ないほど良いですが、それが可能な場合のみです。建築家がいれば、より少ないことが可能になります。コミュニケーションの合計量は良好なレベルに留まる場合がありますが、同じコミュニケーション量でより多くの結果が得られます。


私は従業員だけでなく、あなた自身の組織と内部のプロセスを見るというアイデアが好きです。

3

最初に通常のインタビューから始めます。目の前の人が何か価値があるかどうかを確認し、その人のスキルと知識を判断することは非常に重要です。

その後、主に有効なJavaから取ったいくつかの原則を議論するなど、Javaの分野でいくつかのテクニックを使用します。

この段階で、目の前に優秀なプログラマーがいると思うときは、コードをレビューするためのコードを彼に渡します。私が見たいのは、彼がコードの危険な部分を正確に特定し、改善の指針を示し、パフォーマンスの落とし穴をマルチスレッド化すること、そして重要な発言と「味の発言」を区別できることです。これはすべて、より熟練した従業員を見つけるのに役立ちます。

しかし、最終的には、雇用は一種のギャンブルであることを常に覚えています...予想するのは非常に難しいです...


2

私はこれがあなたの質問に答えていないことを知っていますが、法律が許す限り、最初は常に一時的に雇用することをお勧めします(仕事に応じて2週間または1ヶ月)。人が彼の塩の価値があるなら、彼はあなたの両方のための保護手段であることに加えて、彼は反対しません(あなたは彼を手放すことができ、彼は仕事を好きでなく去ってしまうかもしれません)。


1
あなたは完全に正しいですが、彼があなたに良くない場合、あなたはまだ1つまたは2つの、彼の給料、そしてあなたをプロジェクトに入れる人々の仕事を失います。したがって、このような状況を回避することをお勧めします。

3
問題は...あなただけの彼らに先頭に一時的な仕事を提供している場合は良いプログラマは、おそらく他の仕事のオファーを持っていると、彼らは他の誰かを選んだことができるということです

@Rexxar:気に入らなければ、彼らはまだ去ります。そのように提供するのは、IMOの方がより正直で前向きです。少なくとも私にとっては、マイナスではなくプラスになります(短期契約であり、最後に恒久的になるか、さようなら)。
ビンコヴサロヴィッチ

3
私は自分の請求書を支払い続ける必要があります。私は、たった一ヶ月だけ仕事に就き、それのために永久的な仕事をあきらめることを決して考えません。あなたが失業している、または金持ちの配偶者がいる場合、これはうまくいくでしょう。他の賢明な方法では、恒久的になることについて嘘をついていない可能性がないため、多くの優秀な候補者を失います。
HLGEM

4
「その人が彼の塩の価値があるなら、彼は反対しません」-さて、ここのこの開発者は「それを性交」と言い、より良い仕事を見つけます。
gnasher729
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.