web-dev-qa-db-ja.com

優れたプログラマーをどのようにして認識するか?

当社は新しいプログラマーを募集しています。そしてここに問題があります-インタビューを本当によく見て、あなたが必要とするテクノロジーを知っていて、良い仕事のバックグラウンドを持っているように見える多くの開発者があります、しかし2ヶ月の仕事の後、あなたは彼らが仕事ができないことに気付きますチームでコードを書くと、非常に長い時間がかかり、しかも、結果は本来あるべきものほど良くありません。

では、正式なテストを使用していますか(ありますか?)?優れたプログラマー、そして優れた人物をどのように認識しますか?将来の問題を明らかにする可能性のある簡単な「良い」質問はありますか? ...または、その人(つまり、主にあなたの経験)についての「感情」と、その人を試してみるということだけですか?

編集:Manojの回答によると、 here は就職の面接でのコーディングタスクに関連する質問です。

133
gius

彼らに興味のあることについて話してもらいます。プログラミングについて話すときに本当に情熱を傾けているが、実際にはコーディングできない開発者にまだ会っていません。もちろん、それらは存在する可能性があり、面接では能力も確認する必要がありますが、私の経験では情熱が良い指標です。 (これは、流行語で「話をする」ことができることと同じではないことに注意してください。)

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

157
Jon Skeet

良い人を雇うことは難しいです。

私が上手になるには、いくつかの本当の間違いがありました。最初の数回はそれを信用せず後悔した後、腸管をより多く信頼し始めます。

私は Steve Yeggeの電話スクリーンの質問 を非常に尊敬しており、これをある程度の成功を収めた人々へのインタビューの基礎として使用しました。
私はまた、読んだ後に人々との面接が上手になったと思います ジョエルのゲリラへの面接ガイド (現在バージョン3.0では、Webおよびすべてのバージョンよりも前のバージョンです。良い)。

インタビューでタグ付けされたソフトウェアエンジニアリングStackexchange および some には他にも57の質問があります(2008年11月20日現在)。

84
Hamish Smith

いくつかのアイデア:

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

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

    • 正直:主張されているとおりに知っていますか?
    • 知識の深さ:彼/彼女はどれだけ上手に物事を学びますか?
    • コミュニケーション:聞き慣れないことをどの程度説明できますか?思考プロセスは論理的ですか?
    • ストレスの多い状況への反応:彼/彼女は答えるのにどれくらい努力していますか?彼/それは偽物ですか?避けられない「わからない」は簡単ですか、難しいですか。
  • チームワーク、期限切れのプロジェクト、デバッグ、etcなど、以前の仕事で候補者がさまざまな状況にどのように対処したかを尋ねます。答えは肯定的ですか否定的ですか?情熱的?インテリジェント?傲慢?

私は、熱心で、熟練していて、自信があり、丁寧で、最も重要な候補者を見つけますpresent。内部に誰かがいることを知る必要があります。 :-)

47
Adam Liss

優れたプログラマーであることを認めるには、優れたプログラマーである必要があります。つまり、インタビューで語られ、行われた内容を確認するには、プログラミングについて十分に理解している必要があり、どのような質問をするかを知っている必要があります。

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

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

私の推奨は、インタビューを手伝うために、プログラミングをよく知っていて、優れた人材スキルを持っている人から助けを得ることです。

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

39
Eigir

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

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

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

24
Doctor Jones

それらをコードにします。たとえば4〜5時間で解決できる問題を挙げ、ドキュメントのコード、コーディングのスタイル、実際にコードを開始する前にソリューションをどのように計画したかなどを調べます。実際に問題を解決する必要はありません。そしてジョン・スキートが述べたように、プログラミング、彼らの選択した言語、およびそのようなものについて話してもらいます。あなたは良いプログラマーの情熱を和らげることができます。 stackoverflowのように、彼らがフォローしているプログラミング関連サイトの数を尋ねます。彼らがalsをフォローしているブログは、良い指標になる可能性があります。

16
Manoj

私は情熱の答えが好きです。私はあなたが実際にそれで非常に上手になるためにあなたが一緒に働くものに情熱を傾ける必要があると思います。

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

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

  • 文書化が大好きな人がいます。個人的に私は文書化が嫌いです。しかし、何が行われたかを文書化することは重要です。
  • あなたは「ハッカー」を持っています。複雑なパズルを解き明かすのに熱中しているもので、どこにググればいいのか、おそらく解決策が見つからないでしょう。彼らは、彼らが必要とするツールを入手している限り、「あらゆる」問題を解決することができます。
  • あなたは、市場がプログラミングのために雇われるのに適しているからといって、プログラマーであることを教育する人々を抱えています。彼らは情熱を欠いているので、それらは通常平凡です。
  • あなたはコミュニケーションが得意な人がいて、彼らは「何でも解決することができます」が、彼らが仕事を得ると、彼らは彼らが解決している問題の助けを得るために他の人にぶら下がります。

非常によく文書化し、優れたコミュニケーション能力を備えた「ハッカー」を見つけることができれば、私はあなたが大当たりしたと思います。

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

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

それが私の意見です。

16
Wolf5

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

7
Svante

就職の面接だけでプログラマを認識するのは非常に難しい。

誰かが優れたプログラマーであると決定するいくつかの事柄は次のとおりです。

  • チームで働くことができる
  • 理解可能で保守可能な優れたコードを書く
  • 新しいテクノロジーについて学ぶことができる

だからあなたはインタビューで見つけることができるいくつかの小さなヒントを持っています:

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

インタビューでテストを実行できます。

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

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

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

3
Silvercode

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

その後、Javaの分野でいくつかの技術を使用します。主に、Effective Javaから取られたいくつかの原則について説明します。

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

でも結局、採用はギャンブルのようなものだといつも覚えています。

3
baba smith

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

2
Vinko Vrsalovic