「コードサンプル」はどのように表示されますか?[閉まっている]


24

ちょうどいい電話インタビューをしたばかりです(CakePHPに関連した立場のため、質問にとって特に重要なことではありません)。インタビュアーは私の履歴書と性格に感銘を受けたようです。しかし、最後に、彼は私の既存の作業プロジェクトからのコードサンプルをメールで送信するように頼みました。「あなたがひそかにひどいプログラマーではないことを確認するために!

私は自分のコードがそれ自体で成り立たないのではないかと心配しているわけではありませが、私は専門家というよりは中級のプログラマーです。コードサンプルその場で私を除外する場合、コードサンプル落ちないことを確認するべき明らかな落とし穴は何ですか?第二に、これはおそらく答えるのが難しい部分です。コードサンプルのどの機能が印象的で、すぐにプログラマーに好意的になりますか?

すべてのアイデアや提案を歓迎します!


2
送信するコードサンプルに要件はありましたか?かなり無意味なようです、誰でもウェブから美しいコードをコピー/貼り付けできます。彼らがそれを正しくすることさえできない人々を除こうとしているのでなければ
FrustratedWithFormsDesigner

5
キックのために、彼/彼女の名前の形をしたPerlスクリプトを送信することができます...;)
FrustratedWithFormsDesigner

2
@thesunneversets:だから私はあなたの個人的なプロジェクトからの絶対にゴージャスなソースコードが出ていると思う...;)真剣に、これ簡単に偽造される可能性があります。また、あなたの現在の雇用主は、ソースコードの代表的なサンプルを提供しても大丈夫ですか?コードの一部が同僚によって書かれていたとしても大丈夫ですか?(ファイルは時間の経過とともに数人の間で行き来しているかもしれません)
FrustratedWithFormsDesigner

2
倫理的な意味は少し心配です...しかし、ほんの少しです。私は産業スパイのtrapに陥る思わない。同僚に関しては、悲しいかな、このコードベースを手に入れたのは2人だけで、他の人のコードは大きな混乱でした。:)
thesunneversets

4
@thesunneversets、雇用主のコードを提供することは非倫理的であるだけでなく、多くの場所で違法です。そんなことしたらダメ。
HLGEM

回答:


17

私はきれいなコードを見たいです

クリーンコード:別のコーダーが簡単に読み取ったり変更したりできるように、正しく整理された形式でフォーマットされたソフトウェアコード。

つまり:

  • 機能性 -自明ではない機能のいくつかの簡単なビット(ゲッター/セッターの束は、あなたが何かを知っていることを示さないでしょう)
  • 一貫性のあるクリーンなスタイル - 一般的なまたは少なくとも一般的なケーシング、インデント、間隔、ブラケットスタイル
  • 適切な名前付け -高品質の名前- i唯一の増分値でない限り、使用しないでください。意味のない変数名を使用しないでください。
  • クリーンコードのその他の属性-エラーチェック、条件、ループ、便利なメソッドまたはユーティリティメソッド、および適切な懸念の分離(メソッド間)の適切な実践。そして、これは100%乾燥するのに良い時期です - 繰り返しはありません!

面白いだけでなく、優れた開発者がそれが何をしているのかをすぐに理解できるように十分にきれいなものを送信したいのです。

上記のコメントのいくつかは、これがいかに簡単に偽装できるかを懸念しているようです。


*少なくとも、インタビュアーが過去のプロジェクトについて前もって尋ねてから、このプロジェクトのサンプルを求め、それを書くのに何が必要で、どのように進化したかを尋ねると、このプロセスはかなり嘘つきにならないと思います。とにかく、うそをつくほとんどの候補者、他の分野で問題を示すだろうと思います。


コードを説明するように人に頼み、それを書くことができなかった場合、または他の人のコードを最初に理解することを気にせずにメンテナンスで調整した場合。私が長年にわたってインタビューしてきた中で、自分のサンプルを説明できない人がどれだけいるのか、私には驚くべきことです。
HLGEM

マーカーがクリーンなコードを嫌う場合にコメントを追加します。
ユアン

9

仕事を探していたとき、ACMプログラミングコンテストの質問をいくつかの異なる言語で解決し、それをコードサンプルに使用しました。私は彼らが良いコード例を作ったと思う:

  • 彼らは困難な問題を解決しました
  • 問題は膨大なコンテキストを必要としませんでしたが、質問を取得するのは簡単です
  • 記述されたコードには、IPリスクはありません。
  • 各問題は1つのファイルに合理的に存在し、極端に長くはない場合が多いため、誰でも簡単にソリューションをコンパイルおよびテストでき、質問のテストデータを使用できます。
  • 複雑な問題を小さな断片に分解できることを示しています。
  • ソリューションのあらゆる側面がどのように機能するかを尋ねられた場合、特に何年も前のものであるが何が起こっているかをすぐに解読できる場合、あなたが話していることを知っていることを示す絶好の機会を与えてくれます。

そして、作成するコードは、明確で一貫性があり、読みやすく、理解しやすいものでなければなりません。

そして最後に:

  • ただ楽しむためにそれらを解決する価値があり、良い習慣です。

これは素晴らしい解決策です。これをするつもりです。一番気に入った質問はありましたか?
-zkent

1
私からのコメントとして、単一ファイルのコードサンプルを用意することは、コードまたはアルゴリズムを最適化するためのポジションを申請しない限り、必ずしも素晴らしいアイデアではないと思います。コードは確かに巨大であってはなりませんが、実際に達成できることをある程度代表するものでなければなりません(たとえば、適切なオブジェクト指向コードを記述し、コードをモジュールに合理的に分割できる場合、それはそれを実証するはずです)。
Namey

6
  • 最高の厳格さレベルでエラーと警告をコンパイル/解釈する必要があります。
  • 毎日書く定型的なコードであってはなりません。あなたがそれをコピー/ペーストしなかったことは明らかであるように、それをユニークで面白いものにしてください。
  • どうやって/なぜ作ったのかを説明するコメントとともに、いくつかの興味深い設計上の決定が必要です。
  • 2〜3ページ以内の印刷を目指します。
  • 申請する言語である必要があります。
  • 初めて読んだときに脳を傷つけてはいけません。友人に見てもらうか、codereviewに投稿してください。

3

まあ、私があなたにインタビューしていたら、あなたのコードを見たいです。

クリーンは良い、問題解決は良いが、本当のコードは良い。優秀なプログラマーは、いつ他のプログラマーにされたのかを知っているので、自信が落ちます。

別の人のコードを読むことは、セックスをして踊るようなものです。あなたがそれが本物であるときを知っています。(現実のオタクは踊り方を知らないことに気付いたばかりです)

あなた自身とあなたのコーディング能力を信頼してください。インタビュアーを本当に知らない限り、コーディングスタイル/スキルから彼が何を期待しているかを予測することはできません。


10
オタクは踊れるとは思わないが、あなたは彼らの性的能力に自信があるのが大好き!:D
thesunneversets

いや、私は自分であまりにも多くの災害を見ました... :)
マチャド

私の学校では、社交ダンスのクラス/ボールに参加するのは工学専攻だけです。
エヴァ

より正確にするには、セックスをいくつかのゲーミングリファレンスに置き換える必要があります。)
zkent

2

また、それがあなたの現在の雇用主からのコードではないことにも非常に注意してください(彼らはあなたが所有していないので、あなたはそれを共有することを嫌います。)誇りに思うものを自分で取り、雇用主固有ではないように自分で修正します(データベーステーブルやサーバー名などへの参照を取り除きます)。ミスをしたコードや、コードの種類としては不十分なコードを送信しないでください(セットベースの操作がより簡単で、SQLコードを確認するときにパフォーマンスが向上する場合は、おそらくカーソルを送信したユーザーを拒否します。他のより一般的な問題に使用できる比較的まれな問題を解決するためにある他の言語にも同様のテクニックがありますが、それらの他の問題には最適ではありません。その文は理にかなっていますか?


私は同意します。完全に作り直して、雇用主固有の情報が含まれないようにすることは良い考えのようです。倫理は重要です-ヒントをありがとう!
-thesunneversets

0

クリーンなコードに関するRenesisの投稿を2回目にしますが、送信するコードに品質と十分に文書化された単体テストを提供するリストに追加します。優れたプログラマーは、コードの単体テストを作成する必要があります。


0

候補を評価するときにコードサンプルを要求する人からの1つの意見として、いくつかの高レベルの機能(コードの内容)といくつかの低レベルの機能(コードの構造)があります。高レベルの機能:

  1. アイデンティティ:コードのフレーバー。UI / HCIコーダーとして自分自身に請求している場合、私はそれを実行するときに視覚的な何かの良い外観/雰囲気を見たいです。DBビルダーの場合、データの表現や分析に関して興味深いものを見たいと思います。サンプルはあなたが誇りに思うものでなければなりません。それらの少なくとも1つを持っていない場合は、アイデンティティがありません。
  2. 成熟度:さまざまな問題に戦略をシフトしていますか?興味深い問題を解決していますか?コードまたはアプローチを同様の問題に簡単に拡張できますか?逆に、カーゴカルトコミューンのメンバーを見ているような気がしますか?
  3. コミュニケーション:コードは、コードの実行内容とその理由を簡単に説明していますか?これは、コードを単純にする必要があるという意味ではありません。実際、複雑なコードを理解しやすくすることはボーナスです。

低レベルの側面はより単純です:

  1. スタイル:コードはクリーンで一貫性があり(確立されたガイドラインに従って)、十分に文書化されている必要があります。
  2. パッケージング:少なくとも、短いreadme、実行可能なバージョン、および実行可能なテストが必要です。READMEには、後者の2つを実行する方法と、この特定のコードサンプルを示す理由が記載されています。
  3. 言語:私は通常、誰かにポジションの言語のサンプルと、彼らが最も強いと感じるものを求めます。現在の上限についての良いアイデアを与えます。

良い候補としては、A)防弾の小さなサンプルか、B)より大きな興味深いプロジェクトのかなりの部分(たとえば、Githubの個人リポジトリからのモジュール)のいずれかをサンプルとして期待しています。私はそれらが個人的なプロジェクトまたは学術的なプロジェクトであることを期待しています。彼らが有料プロジェクトからのものを送る場合、私は彼らがそれを使用する許可を与えられたというメモを期待しています。そのメモが得られない場合、候補者からそれらを切り取るか(弱い候補者)、インタビュー中にそれについて尋ねます(強い候補者)。許可がないと、大きな危険信号になります(おそらく乗り越えられません)。上級候補者の場合、最高のソースサンプルの一部は仕事の一部として行われたため表示できないことに注意してください。しかし、私はなぜ彼らがその見せられないデザインを誇りに思っているのか、そして子供のようにそれを愛しているのかについての噴出する証言を期待しています。

最後に、一部の人々は「ああ、誰かがインターネットからコードサンプルを入手するだけだ」と言っているのと同様に、反論として、優れた製品品質のコードを理解していないほとんどの人はそれを見ても理解しないということです。その上、コードをチェックするための独特な行をいつでもグーグルにできます。また、せいぜい、コードを盗むことで、候補者は面接に参加します。

前職からのコードに関する最後のメモとして:しないでください。人事の観点からすると、以前の雇用からのコードを要求することは不適切であり、会社についての警告です。あなたは両方とも法的責任を負い(すなわち、あなたは両方とも訴えられる可能性があります)、彼らが何をしているかわからないことを示しています。以前の雇用主のために行われたコードは、そのコードが既に公開されているか、その雇用主からの明示的な許可がない限り、決して与えられるべきではありません。さらに悪いことに、大企業では、あなたの上司があなたに許可を与える権限を持っていないかもしれませんので、その場合は法務部で楽しんでください。私は彼らが既存の従業員に自分のIPを公開することに大喜びするだろうと確信しています。


また、完全な開示では、博士課程に合格した大学院研究室にコードサンプルを提供したことにも注意してください。このコードサンプルは、特定の3つのファイルが選択された、自律ロボット(5〜10k行)の完全なコードです。ドキュメントは立派でしたが、手付かずではありませんでした。もう一度やり直さなければならなかったなら、おそらく現場でのインタビューにコードの印刷版を持ってこなかっただろう(「ROOKIE MISTAKE」と書かれた大きな文字で100ページ持っていたかもしれない)。私は完全なフェローシップを受け取ったので、それはそれほどの過失ではありませんでした。道徳:多すぎる> =少なすぎる。
Namey
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.