卒業生/ジュニアエンジニアにはどのような基準が期待できますか?[閉まっている]


38

卒業生の開発者からのバッファオーバーフローは許容されますか?バーの設定が高すぎませんか?卒業生/ジュニアエンジニアの期待される能力は何ですか?

コンテキスト:

現在、主にLinuxのCで働いているジュニア開発者の募集をしています。

プロセスの一環として、候補者はCで自由にコードテストを完了する必要があります。

これまでのところ、コードは読みやすく、場合によってはかなり慣用的ではあるが、無制限のバッファ書き込みによるバッファオーバーフローエラーに悩まされていたため、2つの候補を拒否しました。

[編集]:

  • エラーチェック済みの製品品質コードを明示的に要求します。
  • 候補者にテストとビルドのフレームワークを提供します

[更新]:

このスレッドと、他の開発者と直接話し合った結果、コードテストの実施方法と採用対象者を変更しています。

候補者がバッファオーバーフローを修正または理解できないということは、私たちが実施する作業に不適当であり、特に、私たちが納得できる以上の指導を必要とすることを意味すると判断しました。したがって、最終的に堅牢なコードサンプルを送信できない候補は引き続き拒否します。

ただし、採用プロセスを私たちと候補者の両方にとってより生産的にするためのいくつかの手段を導入しました。

特に:

  • 生産品質が意味するものを明確に説明し、入力とエラーに対してコードが堅牢であると予想されるという警告で、期待をより明確にします。
  • コードテストの説明では、候補を防御プログラミングのリソースとC標準ライブラリにリンクしています。
  • ターゲットオーディエンスをジュニア開発者および卒業生から変更し、ある程度関連する経験を持つ人々をターゲットにしました。
  • 提出されたコードが何らかの方法で失敗するが、そうでなければ受け入れられる場合、エラー条件を引き起こす最小限のテストケースを提供し、候補者に間違いを修正する機会を与えます(他の理由でコードが拒否されない限り)。必要に応じて、問題のある行/関数も指摘します。
  • テスト自体の目標は、フロントエンドフィルターから、候補者のより良い状況を構築する機会にわずかに変更されました。特に、電話での議論に役立ちます。とはいえ、私たちはコードのみに基づいて拒否するつもりです。

[2015-07-09更新]: NujobのAndy Davisが、候補者の観点からのコードテストの使用に関する興味深い関連記事を書きました。この記事は一見の価値があります。ここで見つけてください


29
多分...?学校の多くの人々が現在、CよりもJavaの経験がはるかに多いように思われることを考えると、候補者が学校を出たばかりで、コーディングの露出の2/3がJavaである場合、Cはあなたをパスするほど強くないかもしれませんテスト。しかし...彼らがオープンで学びたいと思っているなら、あなたは何と言いますか?結局のところ、これはジュニアポジションです
...-FrustratedWithFormsDesigner

4
また、インタビューで書かれたコードであり、おそらく時間の制約を考えると許されます。少なくとも、彼らのコードがバッファオーバーフローに悩まされることはないことを彼らに言及することは確実です。
マンスフィールド

4
2番目の@FrustratedWithFormsDesigner。私はジュニア開発者であり、Cに対処しなければならなかったのは、CPUアーキテクチャのクラスでの2つの割り当てのためだけでした。一方、私は、C#、Java、Rubyでかなり問題ないと考えています。
ケビン-モニカ

4
また、テストフレームワークには、バッファオーバーフローを引き起こすテストが含まれていますか?
FrustratedWithFormsDesigner

44
あなたが何か悪いことをしていると言うことはできませんが、過去数年間に何十人もの大学生のCS卒業生をインタビューした後、「プロダクション品質コード」が何を意味するのかという概念がほとんどないことがわかりました。ほとんどのCSインストラクターは、他の人が使用するコードを書くことに関心がないと思います。
ジムでテキサス州

回答:


109

バーの設定が高すぎるとは思わない。別のバーが必要になると思う。

コードテストは候補者の能力を判断するのに役立ちますが、合格/不合格であってはなりません。コードテストの結果を使用して、候補者との対話を開始する必要があります。

彼らが犯した間違いを見つけた場合(特に彼らがジュニア開発者である場合)、それらを指摘し、彼らが違うやり方をするか、または彼らが問題がある理由を理解しているか尋ねます。


1
+1それは真実であり、良い提案です。実際、候補者にコードのエラーを確認してもらい、十分な時間を与えましたが、間違った種類の修正が戻ってきました。場合によっては、オーバーフローを引き起こしたエラーを修正せずにコードを悪化させました。そもそも。
ブライス

15
@brice彼らが実際にジュニア開発者であるというかなり堅実なデモ。一見明らかな間違いを避けるには、練習と経験が必要です。
トンバトロン

34
@brice:彼は特定のエラーについて話し合うように言っていました。エラーがあったとは言わずに、返事をお願いします。エラーをリアルタイムで話し合います-それらにヒント(行番号または説明と機能を与えて、行番号を教えてください)を与え、それがどのように防止されたのかを尋ねます。目標は、エラーのないテストコードではなく、申請者の長所と短所を十分に理解することです。
jmoreno

6
ジュニア開発者が問題を見ることができた場合、彼らは問題を修正したでしょう。それが私だったら、彼らとあなたと一緒に働く能力をテストします。問題が何であり、どこで見つかるかを伝え、実際の同僚と同じ治療を彼らに与え、彼らがどのように反応するかを見てください。彼らと仕事をするのが面倒なら、彼らはそのポジションにふさわしくない。彼らと仕事をするのが楽しみなら、彼らを雇ってください。
zzzzBov

67

ここでは、ジュニア予選が大きな違いを生むと思います。ジュニアは能力についてテストされるべきではなく、学習能力、好奇心、情熱、倫理、そして間違いなく謙虚さについてテストされるべきです。ジュニアとの仮定は、彼らが有能はないということである必要があります、そうすることはシニアとしてのあなたの仕事です。

明らかに、彼らはfizzbuzzのような基本的なコードを書くことができ、概念の一般的な知識を持っている必要があります。あなたが彼らにそれを指摘し、彼らがバッファオーバーフローが何であるかさえ知らなかったなら私はそれはノーゴーだと言うでしょうが、私は後輩がバグなしで5行以上のコードを書くことを期待していません。

あなたがあなたのジュニアの能力を信頼する日はあなたが質問されるべき日であり、ジュニアは多くのメンタリングと「信頼するが検証する」という健康的な量で扱われるべきです。私はかつて後輩でしたが、当時そこにいたすべての人に:すみません。後輩としてした恐ろしいことを覚えていますか?(私だけだと言ってはいけません。あなたは私に複合体を与えます。)


1
私は公式にまだ2年の経験を持つ「ジュニアソフトウェアエンジニア」です!私の経歴はCS工学でもSW工学でもありません(物理学です)。私は、現在、または採用されたときに、任意の入力でセグメンテーション違反のコードを喜んで提出しません。
ブライス

31
修正すると、故意に入力でセグメンテーション違反のコードを渡すことはありません。ちょうどバグを書いたことがないと主張した場合、John Carmackに迷惑をかけて申し訳ありません。
ジミー・ホッファ

ハーグ!バックペダル!それは確かに私が主張することではありません。バグのあるコードをリリースしましたが、他のコードよりも悪いものもあります。しかし、どれも何の最初の例のように見えないことではないあなたが「バッファオーバーフロー」のためのgoogleときどうする
ブライス

オーバーフローを引き起こしたテストなど、コードのテストフレームワークも提供します!
ブライス

@briceテストフレームワークを提供したと言うとき、メモリの問題をテストするvalgrindのようなツールを提供しましたか?
BЈовић

15

ここにいくつかの問題があります。

1つ目は、平均的なコンピュータサイエンスの卒業生が、何でも知っているということです。彼らはしません。率直に言って、Visual Studioのインストールとセットアップの方法を知っているコンピューターサイエンスの卒業生を見て驚いた。ヘック、私は最近のMicrosoftスタック書き込みに五年以上の経験を持っていると主張する男と働いていた.NETのかを把握できなかったコードTFSがあったか、またはどのように接続するに。

2番目は非常に限られたプールです。また、プログラミングテストを行う候補者もいます。作成しなければならない5つの「プログラム」があります。彼らは自宅でそれを行い、コードを出荷します。テストは非常に単純(データベースなし、外部依存関係なし)で、Visual StudioのExpressバージョンを使用し簡単に実行できます。テスト自体は、約30分で上級者が簡単に完了します。通常、これらは最近の卒業生に対して最大3年間の検証可能な実務経験でのみ行われます。

私たちが定量化したのは、テストを受けた人の約70%が私たちに決して戻らないということです。通常、露骨な構文エラー(たとえば、欠落;)が原因で、コンパイルされないものを約15%が投入します。別の10%はコンパイルしますが、必要なアクションを実行できません。

これにより、なんと5%になります。この時点では、数値が必要なときに入力としてアルファ文字を入力するなどの条件さえ考慮していません。アプリケーションが適切な出力を行う入力として、非常に限られたXのセットが与えられるだけです。また、これらの数字は過去4年間で約500人の候補者から得られたものです。知りたいので統計を保持しました。

コード構造と、管理されていないリソースの適切な破棄やtry .. catchステートメントの使用などの防御的なコーディング手法をさらに検討すると、ほとんど誰も合格しません。

もちろん、問題はなぜですか?

4年制大学のこの分野の学位を持つ子供が、単純なプログラミングタスクを達成できないのはなぜですか?答えは、大学はビジネスニーズに完全に対応しておらず、最先端の技術とは何年も遅れているということです。10年前のコーディング標準は、セキュリティが事実の後にあなたがしたことでした。ユニットテストはまだ流行していませんでした。一方、今日のセキュリティは、すべての機能または拡張機能を使用して頭の中で最前線にいます。覚えておいてください。ほとんどの教授は、この分野で実際に働いたことがないか、長い間働いていません。それを知ると、なぜ彼らがこれほど遅れているのかを理解し始めます。さらに悪いことに、これらの教授の一部は、特定の技術(JavaPHP、何であれ)、コード構造や許容可能なアプローチなどの深刻な基本的な問題について議論しません(そしてなぜ!)。

ほんの一例です。最近の卒業生は、彼のクラスの1つでモバイルOSを作成した経験について話してくれましたが、基本的な用語でさえ、Webサーバーがどのように機能するかを説明できませんでした。彼は単に知りませんでした。15年または20年前は、おそらくOSの作り方を理解するのにふさわしい時期でした。今日...それほどではありません。しかし、これは、防御的プログラミングのクラスが彼らと外の世界にとって非常に有用であるときに必要なクラスでした。

どうしようか?

それらの5%のうち、もう少しインタビューして、彼らの性格とフィット感のアイデアを得ます。それから、私たちは彼らの教授が満たしたがらくたを取り除くために彼らを「再プログラミング」するのに約6ヶ月費やそうとしていることを完全に知っている「最高の」ものを選びます。


2
ここで完全に同意します。私は大学で学んだことよりも、業界で2年半勉強しました。学校にいる間にウェブ開発者としての最初のインターンシップを取得した後、私はこれを痛々しく学びました。
ライアン

5
今、私はあなたのプログラミングテストを試してみたい..
Akash

1
本当に?特定のソフトウェアをインストールした経験があり、探しているものがWebサーバーの機能の単純化されたバージョンを提供できるか?誰かがモバイルOSの作成に対処できれば、ウェブサーバーの仕組みを学ぶことができます。
マイケルショー

@MichaelShaw:誰かがOSを書いているが、最も一般的なサーバータイプの基本的な操作をまだ教えられていない場合、彼の学校は彼の教育の大きな(そして非常に関連性の高い)分野をスキップしていることを示しています。質問は、他にスキップされたものになりますか?
NotMe

2
@ChrisLively:これらのことのどちらが大きな問題であるかはわかりません。ゆっくり動く小さなフィールドがあるわけではありません。仕事で学ぶことが起こります。ここでは基本的に良い点があると思いますが、例は説得力がありません。CSカリキュラムに問題がある場合、「Visual Studio 101のインストール方法」および「Webサーバー101の基本」を追加しても修正されません。(「防衛プログラミング」クラスのアイデアが好きです。)
マイケルショー

5

あなたは問題を間違った方法で見ていると思います。あなたが自問すべきことはこれです:彼らが仕事をすることができるために候補者に何を要求しますか?位置とそれに伴う内容を適切に評価する必要があります。以下は、ジュニア開発者を雇うべきときとそうでないときに関するいくつかの提案です。

ジュニア開発者を雇うとき:-簡単な仕事が溢れている場合、上級開発者にとっては時間の無駄です。-今後数年間、この人物を指導し、訓練する意思がある場合。-会社を成長させようとしていて、長期滞在する人が欲しい場合。1年しか滞在しないジュニア開発者は会社のリソースの無駄であり、何も生産することはほとんどなく、結果のほとんどは自分の成長にあります。-誰かの成長にお金を使う気がするとき。繰り返しになりますが、ほとんどの利点は学んだことです。

ジュニア開発者を雇わないとき。-作業が複雑すぎる場合。この場合、それは彼らのリーグから外れています。-お金を節約したいとき。上級開発者は、同じタスクをほんの少しの時間で完了し、より良い品質の結果を得る必要があるため、常に安価である必要があります。-仕事が外部委託可能であるか、従業員を忙しくするのに十分でない場合。そのような場合、作業の一部を民間の請負業者にオフロードする方が良いでしょう。

最後の重要なポイント。ジュニアデベロッパーを雇うな 最終的には、お金をトイレに流すだけです。また、それらのスキルを習得すると、とにかく大金を要求します。

私について:

  • 正式なトレーニングがほとんどない物理学の学位。
  • 2年の実務経験。だから私は学習プロセスが何であるかを知っています。
  • ソフトウェア開発者を開始します。私は非常に厳しい仕事をしており、さまざまな個人のさまざまなスキルレベルを見てきました。それらの多くは、私がしていることの多くを処理できません。

4

他の人が言及したように、ジュニアポジションはCの経験がほとんどないかもしれません。私は個人的にCのバッファオーバーフローについて簡単に教えられましたが、それらを監視することができたとしても、いくつかを導入する可能性があります(特に役立つ割り当てが与えられた場合)バッファオーバーフローを作成します)。おそらく、多くのジュニア開発者は、バッファオーバーフローを知っているかもしれませんが、広範な方法でそれらを識別して処理する準備ができていない同様の状況になります。

これを考えると、次の可能な相互作用で問題を持ち出し、バッファオーバーフローについて何を知っているかを尋ねて、全体的な知識をテストするのが適切な対応だと思います。その後、想定される本番用のコードで見つかったことを伝えます。これにより、修正や指示にどのように反応するかを判断するための適切なウィンドウが提供されます。

知識は少ないが学習して改善できる意欲のあるジュニア開発者は、知識はあるが改善できない、または改善できないジュニア開発者よりも価値があるという一般的な考えではないでしょうか?

そうは言っても、コメントの1つで、使用した場合のコードのバッファオーバーフローを指摘するテストを渡しました。おそらく、もっと大きな疑問は、なぜ彼らがテストを実行しなかったのか(もし実行したのなら、なぜバグのあるコードを入れたのか)でしょうか?


3

バッファオーバーフローは絶対にありません。対応するコードの質問があるかもしれません。このコードのすべてが間違っている(間違っている可能性がある)場合、候補者は問題を特定できるはずです。問題は、とにかくクリントを実行しているので、問題が無関係であるかどうかです。

ただし、人為的な自由形式のコードテストでは、sprintfのような違反に対しては穏やかです。時間が少なすぎる(想定)、機能亢進を気にし、何かを効果的に提示したいという衝動が大きすぎる。


10
彼が「ジュニア」に言及していることに気付くまで、私はほとんど同じ答えを書きました。それを覚えておいてください。経験によって
ジミーホッファ

@JimmyHoffaはい、あなたの最初の行を読んで、私の「絶対ノーゴー」を修正しました。あなたのポイントは検討する価値があります。今まで、私はすべてのプログラマーを使用し、推定することができましたが、1つの精神的なケースと1つの「嘘つき」です。
ヨープエッゲン

@JoopEggen:「サイキック」はあなたが探していた言葉ではなかったと確信しています。そうでなければ、彼らはあなたの心を読むことができるはずだった...;)
NotMe

2

あなたは間違った質問をしていると思います。プロのプログラマーになるための客観的な基準はありません。もしあれば、標準的なプログラミング試験はありますが、ありません。個々のバーは、どれだけうるさいのか、支払うのにどれだけの余裕があるのか​​、ソフトウェアがどの程度の過失を受け入れるのに耐えられるのか、教育に費やすことができるのかに応じて設定する必要があります。

この場合、バッファオーバーランとはおそらく、候補者が模範的な作業のサンプルとして提示したこのコードが、要求したことを行う代わりにセグメンテーションフォールトでクラッシュすることを意味すると推測しています。それで、あなたが要求したことをするのではなく、セグメンテーションフォールトでクラッシュするコードを書くコーダーを受け入れるべきですか?質問:

  • あなたの組織は、実用的なコード書くことができる人を引き付けることができますか?

  • あなたの開発プロセスは、コードをほとんど書くことができる誰かがピアレビューとテストサポートの助けを借りて作業コードを書くことができるほど十分に堅牢ですか?

  • プログラマーになる方法をプログラマーに教えることができますか?その努力を費やして数年待って、候補者の内なる才能が実現することを望んでいますか?

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