「コピー&ペースト」コーダーをすばやく除外するにはどうすればよいですか?[閉まっている]


15

コードをコピーして貼り付けるだけで機能することを期待し、機能する場合はチェックインする人の履歴書を除外する方法が必要です。これはすべて、システム内の残りのコードを理解する(または気にする)ことなく行われます。

確かに、コードのコピーと貼り付けは、新しいオブジェクト、コントロールなどの学習の一部であることを知っていますが、それが開発キャリアの70%(またはそれ以上)を占めるかどうかはどうすればわかりますか?

私はおそらく、スキルがプロジェクトに対して非常に時代遅れであるか、プロジェクトにとって無関係である上級レベルの人に出会ったことがあります。その結果、同じプロジェクトでJSON、AJAX、コールバック、ASMX、WCF、およびポストバックのミスマッシュが発生します。各テクノロジーが使用されている場所の背後に一貫性やロジックがないことは明らかです。

最悪の場合、このタイプの開発者はセキュリティの問題と攻撃のベクトルを作成します。

質問

プログラミングのバックグラウンドが低い人を除外するにはどうすればよいですか?履歴書レベルでできますか?そうでない場合、インタビュー中にこれを行うにはどうすればよいですか。


プロジェクトにはテクノロジーアーキテクトが必要なようです。誰かが法律WRTを使用されている標準、使用されている技術に合わせて定め、それを今週の理想から遠ざけなければなりません。
すぐに今すぐ

回答:


47

私はおそらく、スキルがプロジェクトに対して非常に時代遅れであるか、プロジェクトにとって無関係である上級レベルの人に出会ったことがあります。その結果、同じプロジェクトでJSON、AJAX、コールバック、ASMX、WCF、およびポストバックのミスマッシュが発生します。各テクノロジーが使用されている場所の背後に一貫性やロジックがないことは明らかです。

開発者のスキルが問題だとは思わない。あなたの問題はどこかにあります。おそらく、より良いコーディングの規律を「奨励する」自信がないチームリーダーやアーキテクト、または技術的な負債を管理することの重要性を理解せず、開発者はそのための時間とリソースを必要とします。あなたの会社はコードレビューを行っていますか?

リーダーシップが問題になる可能性があり、コピーペーストの開発者ではありません。


16
+1 Leadership may be the problem, not copy-paste developers. それはまさに私の解釈でした。
ジョージマリアン

真剣に。コミュニケーション部門で何かがひどくAWOLです。
MIA

+1:ジョージマリアンのコメントについても同じ。ロバート。
ジムG.

それは良いものです。インタビュアー、リクルーティングマネージャーと同じくらい多くの人に届くことを願っています。
ザール

この答えについて多くのコンセンサスがあるようですが、「上級」レベルの人が機能を指示することはできません。実装はコーダーに任されていますよね?私は上級レベルの人が「ねえ、たくさんの技術を使わないで、これらの2つだけを使ってください」と言うかもしれませんが、それでもコピーペーストの開発者はコピーペーストを行うでしょう!私が間違っている ?
チャニ

13

プログラミングできないプログラマを排除する方法は、スクリーニング段階またはインタビュー段階の一部として、実践的なプログラミング演習を設定することです。(後者は、不正を防ぐために環境を制御できるため、おそらくより優れています。)

しかし、それが本当にあなたの問題に対処するとは思わない。

...同じプロジェクトにJSON、AJAX、コールバック、ASMX、WCF、およびポストバックのミスマッシュがあります。各テクノロジーが使用されている場所の背後に一貫性やロジックがないことは明らかです。

IMO、ここでの本当の問題は、あなたのチームが十分な内部コードレビューを行っておらず、既知の問題に対する好ましい解決策の「プレイブック」を開発していないことです。これは、一部は文化の問題、一部はコミュニケーションの問題、および(おそらく)一部はプロジェクトの期限に関する問題です。

もう1つの問題は、通常、プロジェクトの寿命が長く、その寿命の間に新しいテクノロジー/テクニックが出現し、古いテクノロジー/テクニックは好まれなくなる可能性があることです。テクノロジー/テクニックの「犬の朝食」の使用を避けたい場合は、次のいずれかが必要です。

  • プロジェクトごとに使用される可能性のあるテクノロジー/テクニックのリストを設定および実施する、または
  • プロジェクトで使用されているテクノロジーの更新に努力を注ぎます。

1
面接中に筆記試験を行わない場合は、自分自身を足で撃つ可能性があります。私は最後の4人の雇用主にそれらを持ちましたが、質問のいくつかがどれほど簡単であるかにしばしば驚きました。ある場所で、別の候補者が泣きながらテストを完了せずに去ったと言われました。
エイドリアンJ.モレノ

1
面接中の筆記テストが、あなたの新兵が本当に優れたプログラミングスキルを持っていることを確認する唯一の方法であることに絶対に同意します。しかし、私の答えの主目的は、SOの問題に対処するに開発者のスキルだけでは不十分であるということです。
スティーブンC

編集タイマーに捕まりました。標準とレビューが必要であることに完全に同意します。最近、新しいコーディング標準ドキュメントを公開し、QAに寄せられるバグがはるかに少ない新しいコードレビュープロセスと組み合わせました。私の次の目標が社内トレーニングチームを開始することである場合、1つです。
エイドリアンJ.モレノ

10

3か月の保護観察で人々を雇います。彼らが吸うならそれらを発射します。

検査しない場合は期待できません。コードレビュー、監査ツール。CIサーバーはこれらを自動的に実行できます。

実際のコードからの質問のように、インタビューで実際の質問をします。

ホワイトボードにコードを書いてもらいます。

あなたが非技術的なマネージャーである場合、あなたはこれを判断する資格がありません。

資格がない場合は、評判の良い上級専門コンサルタントにテストを依頼してください。既存の人々、およびビジネスの競合他社に、生産性の100倍の人を知っているかどうかを尋ねます。面接を行うためにそれらを支払う。

手術責任者なしで病院を運営したい場合は、すぐに行ってください。


経験者の話ですか?なぜ彼は仕事を辞めて、彼/彼女が吸うかしないかを許すのに3ヶ月を必要とする場所に参加する必要があります:)なぜ人的資源があるのですか?
ザール

私は経験豊富で有能な人々について話している。彼らは長期的には安くなっています。人材は、雇用法に違反したとして訴えられるのを防ぎます。もともとヘンリー・フォードの数値マネージャーのために微妙なものをするためにそこにいた。実話、調べてみてください。あなたがすでにその人がうまくやろうとしていることを知っているなら、まあ、あなたは私よりも上手です。あなたは働きがいがあり、素晴らしい職場環境があり、保護観察の後、彼らは太ったボーナスを得るので、人は仕事を変えるでしょう。永続的なものとして冗長化されている場合、会社はさらに3か月を支払います。そのようなもの
ティムウィリスクロフト

9

私はここ数年、人々にインタビューし、候補者の90%が単にプログラムを作成できないことに気付きました。プログラミングを決定するための私のインタビュー手法は、候補者に非常に簡単な概要を提供し、候補者にマーカーとホワイトボードを使用して解決させることです。

障害モードには次のものがあります。

設計を思いついた後、別の何かを実装します。これらの候補者は、チームにとって危険であるため拒否されます。仕様に従っていない、バグなどを書いている...

デザインを発明することはできません。驚くほど多くの「経験のある」候補者には、実装設計を含めるための仕様が必要です。

CVが経験を主張しているにもかかわらず、プログラミング言語を知らない。

より詳細な仕様を抽出するために追加の質問をしない。

設計上の決定を説明できない。これはメジャーです。誰かが理由を説明できない場合、毎回異なる方法でそれを行い、一貫性が失われます。

最終的には、面接に多くの時間を費やし、あまり頻繁に採用しませんでした。しかし、開発チームは非常に優秀であり、会社全体の完全な尊敬を持ち、それを実現しました!


あなたの経験はかなり普通に聞こえます。
すぐに

5

Jeff Atwoodがhttp://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.htmlの投稿で言及しているFizzBu​​zzをお勧めします

1から100までの数字を印刷するプログラムを作成します。ただし、数字の代わりに3の倍数で「Fizz」を、5の倍数で「Buzz」を印刷します。3と5の両方の倍数である数字の場合は、「FizzBu​​zz」を印刷します。


9
-1。FizzBu​​zzは合計ばかを検出します。コピー&ペーストコーディングを行うために、あなたは完全にバカになることはできません。
back2dos

@ back2dos-面接に出るまでに、すでに「トータルバカ」を排除する必要があります。FizzBu​​zzは、誰かに問題とその最善の解決方法を考えさせます。コピー&ペーストする人は物事の背後にある「なぜ」を学ばないので、コピー&ペーストする人をさらけ出すのは難しいことではありません。
ジェッティ

3
+1。FizzBu​​zzは、その合計ばかをより多く検出します。また、技術的なスキルの不足を社会的スキルよりも上で補う人を検出します。それらの人々は最初のスクリーニングテストに合格する可能性が十分にあります。例えば、彼らは非常に正当な学位を保持しているかもしれません。
MSalters

1
さて、あなたは私にfizzbuzzを尋ねると、私はすぐに立ち去ります。:) IMOはジュニアカテゴリではあまり役に立たないので、とにかくみんなをトレーニングします。シニアカテゴリでは役に立たず攻撃的です。他の方法で高い人たちにスマート+取得-実行-できるようになるはずです。スポットのような質問のコーディングは、イタチ農場会社のIME表示です。実際に誰かのコーディングスキルに興味がある場合は、コードレビューの質問をします。そして、フラストレーションなしに関連するすべての回答を取得します。
バログパル

@BalogPal:私は笑って2分間狂ったようにタイピングを始めます。それが初めてコンパイル、実行、動作しない場合、私は恥ずかしく思います。
gnasher729

2

私は3つのインタビューの質問をします

  1. コレクションフレームワークから何もインポートせずに、Javaで数値型を格納できるリンクリストを作成します。
  2. リストからノードを追加/削除する方法を示すコードを記述します
  3. そのリストから最大/最小を取得する方法を示すコードを記述します

私はこれを5分で完了する人を見たことがあり、あきらめる前に30分間苦労する人を見ました。


最初の要件はより具体的でなければなりません。java.util.LinkedList l = new java.util.LinkedList()は何もインポートしませんが、確かに組み込みのコレクションを使用します。
バリーブラウン

これは特に最近の卒業生にとって公正な質問です。注意を払ったり、プログラミングに時間を費やしたりするのであれば、これはほとんど簡単なことです。正確である必要はありませんが、十分に近いと思います。
ブライアンハリントン

3
@ブライアン、誰もまだ試していない。そして、答えが100%正しいかどうかは本当に気にしません。彼らが問題を理解し、有能な方法でそれに取り組むことができるということだけです。最も一般的な問題は、リストの先頭または末尾で追加/削除が機能しないという問題です。これを指摘してくれた私への反応に基づいて、人を雇うことを勧めました。
sal

2

彼らは本質的にそれを書くための無限の時間を持っているので、あなたは履歴書レベルでこれを行うことはできませんが、彼らが何をするかの技術的な洞察を必要とするいくつかの質問をする場合、電話インタビューでそれを行うことができます。これにより、答え(良いか悪いか)と、そこに到達するまでにかかった時間の両方が得られます。

インタビューのときに、彼らにコードを書かせます。彼らが実際にプログラムできるかどうかを知ることができる唯一の方法です。問題を簡単にし、インターネットに接続されたコンピューターと使用するIDEをインストールし、質問(gimme-hte-codezを除く)をしてもらい、どのように機能するかを見てもらいます。


編集:事後分析のために、PMDはそれを見つけるためのコピー/ペースト検出器を持っているようです:http//pmd.sourceforge.net/cpd.html


「...そして使用するIDE」まであなたに同意しました。コーダーは作業環境にこだわり、$ random-IDEに精通していない可能性があります。私は20年以上コーディングしてきましたが、最初の10分間は、IDEを投げた場合のIDEの動作方法を見つけようとして無駄になります。私はエディター(webbyのことをするときはbluefish、その他すべての場合はemacs)、その他すべての場合はコマンドラインツール(リビジョン制御、必要なときにコンパイルするなど)を使用します。デバッガーをまったく使用しません。デバッガが必要な場合は間違っていると教えられました。それがデバッグコードの目的です!
HedgeMage

@HedgeMage、私は彼らそれを使用しなければならなかったとは言いませんでした...人がその状況をどのように処理するかを見るのは非常にわかりやすいです。notepad + javacで十分ですか?彼はNetBeansをダウンロードしてインストールしますか?彼はあなたのIDEでXをする方法を尋ね、少しハックしてYとZを求めますか?

@HedgeMage、デバッグコードは、知っておくべきすべての可能なことを事前に決定できる場合に最適です。デバッガーは、次の質問を決定するために質問への回答を確認する必要がある場合に便利です。次の質問は、デバッグコードでは新しいバイナリを必要とし、再起動して再度その場所に移動します。

1
@Thorbjørn:確かに、私の請求書は過去数年間インタープリター言語の仕事で支払われましたが、Cコーディングの時代に戻っても、良いデバッグコードを支持してデバッガーを却下しました。おそらくそれは単なる偏見だろう。私は、それ自体でコーディングの方法を学んだことのない多くの人々と一緒に大学に行った。私はその種の手抜きのコーディングに耐えられません。デバッガーが悪であるということを意味するつもりはありませんでしたが、デバッガーやその他のIDE機能がすべてのワークフローに属しているわけではありません。
HedgeMage

@HedgeMage、私はデバッグのための「それが機能するまでそれを打つ」アプローチは良くないことに同意しますが、デバッガーが悪いと結論付けることはおそらく少し広すぎる結論です。

1

シンプル

  • (1)部屋に入れてロック+無料酸素。
  • (2)インターネット接続+選択のIDE +食品へのアクセスを備えたPCを提供します。
  • (3)すべてのインバウンドおよびアウトバウンドトラフィックを記録するwiresharkまたは同様の方法を使用します。
  • (4)中程度の課題を与えます。
  • (5)すべてのHTTPトラフィックを調べ、割り当て完了をポストします。
  • (6)サブジェクトがソースコードの大きなチャンクをコピーした場合、サブジェクトを終了します。

編集:

指摘されているようにmakerofthings7として、実際的な観点では、ビデオキャプチャ(画面キャプチャ)を実行できます。


小説ですが、最終的には非実用的です。
ロバートハーヴェイ

...または単にビデオキャプチャを実行し、ロジックの進行を確認します。美しさ(またはカオス)が展開するのを見てください。
goodguys_activate

1
件名を終了しますか?遊離酸素を取り去ることによって?乱雑です!

@Thorbjørn:大量のソースコードをコピーした後、彼らが足を撃ち込むほど面倒ではありません。
ジョーD

1
インターネットを有利に利用できない人は、昨日のモードでロックされます。どんなに些細な質問であっても、それらが私にとって見られる良い例だと常に思っています。コピーして貼り付けるのではなく、良い例を見て最高のテクニックを適用します。私はフルスタックのプログラマーです。つまり、私はスペシャリストではなくジェネラリストであり、世界に依存しています。明らかに罪深い!
ジャンキー

1

貧弱なコーダーを「排除」したい場合は、たとえばプログラマーコンピテンシーマトリックス(有用ですが、可能性のあるすべての領域に適用されるわけではありません-もちろん自分で作成できます)またはcodility.com(タスクは非常によく、時間を大幅に節約できます)。

一般的に、優秀なコーダーを雇うことは難しく、多くの場合長年の練習が必要です。インタビューの質問の独自のデータベースを開始することができます。コーディングに関する質問だけでなく、動機付けの質問はもちろん、数学、論理を使って質問することもできます。


0

候補者の問題は、まったくプログラムできないということではなく、仕事に適切なツールを使用する感覚がないということです。私の提案は、新しいシステムの高度な要件が与えられ、アーキテクチャを提供し、コンポーネントの選択を正当化するように求められるエッセイの質問です。ただし、ブラウザなしではまったくコーディングできない候補者のために、FizzBu​​zzを保持してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.