質問
会社の1つは、JavaやC#などの特定のプログラミング言語でライフタイムに記述されたコードの行数を提供することを従業員に求めています。私たちのほとんどは、複数の言語のさまざまなプロジェクトで長年の経験があり、この記録をほとんど保持していないため、このメトリックを計算するための最良のアプローチは何でしょうか。 stackoverlow.comの優秀なメンバーには、いくつかのアイデアがあると確信しています。
これは、その分野で非常に尊敬されている会社であり、この質問をする非常に正当な理由があると確信しています。しかし、答えるのも難しいのは、考慮すべきコードの種類です。私が実装した困難なアルゴリズム、または例えば300個のプロパティがあり、そのゲッター/セッターがIDEを使用して生成されたPOJO!
解決
これは、「ボーイング747にピンポンボールをいくつ入れることができますか?」その場合、質問者は、実際に書いたコードの行数を知ることよりも、問題解決能力を実証することを望んでいます。私は質問に対する批判に答えないように注意し、代わりに問題を正直に解決しようとします。 )
他のヒント
このような質問に対する最良の回答は次のいずれかです。
- なぜ知りたいのですか?
- そのような数値にどのような意味がありますか?
- 今すぐ立ち去って大丈夫ですか?
私は、現在または将来の従業員に質問をする人の背後にある動機に真剣に疑問を呈します。入力するコードの行数に焦点を当ててコードのレビューを開始するのは、おそらく同じタイプの会社です。
今、彼らがコードの行数がプログラマーの経験の尺度であると主張するなら、私は間違いなくその時点でインタビューを辞めるでしょう。
複雑な問題に対しては簡単な解決策を見つけることができ、通常は問題に十分なコード行を投げてそれ自体を整理するよりも優れています。生成されたバグの数は、ステートメントの数に比例して直線的に増加するため、対処した問題の数と組み合わせて、逆の方がおそらく優れていると思います。
テスト応答として、私はこれを尋ねます:
プログラムで問題A、B、Cを1000行のコードで解決でき、別のプログラマーが500行のコードで同じ問題を解決できた場合、私たちのどちらが最良でしょう(そして答えは:判断するのに十分な情報がありません)
今、まだ行数を推定したい場合、その人が書いたプロジェクトについて考え始め、そのサイズを既知の量と比較します。たとえば、現在約130K行のコードのクラスライブラリがあり、Delphiや他の言語で同様のことを書いており、さらにいくつかの大規模なアプリケーションプロジェクトがあるので、1,000万行のコードがあると推定します少なくとも自分で。数字に意味はありますか?少しでもない。
このような音はD E Shawのアンケートですか?
ohloh をご覧ください。このサイトには、オープンソースプロジェクトの指標が表示されます。
このサイトでは、107,187行のコードが27 Person Years(年間4000行のコード)の作業に相当すると推定しています。
このような測定基準の愚かさの例は、その数値が2年間外で仕事をしていたプロジェクトからのものだということです。
意味のないメトリックに対するばかげた要求を処理するには、基本的に3つの方法があります。
-
回答を拒否し、質問者にその理由を問いかけ、理由がばかげている理由を説明します。
-
可能な限りすべての情報を収集し、最大限の能力を発揮するための答えを計算するために費やす時間。
-
もっともらしい答えを作り、愚かさへの感情的な関与を可能な限り少なくして進む。
最初の答えは、最初の行を取っているようです。彼らの要求の愚かさにもかかわらずあなたがまだ仕事を望んでいるかどうかを考えてください。それでも答えが「はい」の場合は、番号1を避けてください。
2番目の方法では、古いプロジェクトの古いコードリポジトリを確認します。
この場合、3番目の方法を使用します。
言語で作業した年数に年間200営業日を掛け、1日20行のコードを掛けて使用します。
1年に複数の言語を主張している場合は、それらの間で割り当てます。
分析、設計、または管理にもっと取り組んでいる場合は、数字を4分の3下げてください。
高度な儀式環境(防衛、医療)で作業している場合は、桁を1桁下げてください。
特にセレモニーの少ない環境で作業している場合は、その規模を1桁増やします。
その後、愚かさをあなたの後ろに置き、できるだけ早くあなたの人生に乗り出します
彼らが答えをどうするかにもよりますが、これは悪い質問ではないと思います。たとえば、候補者がJavaScriptを履歴書に置いた場合、実際にどれだけのJavaScriptを書いたかを知りたいです。たとえば、私が書いた最大のJavaScriptプロジェクトの行数を尋ねることがあります。しかし、私は実際の数ではなく、スケール感だけを探しています。 10行、100行、1000行、または10,000行ですか?
私が尋ねるとき、プロジェクトのサイズを測定するために粗い数値を探しているだけであることを明確にします。質問者の場合、雇用主も同じことを望んでいます。
いくつかのスマートなコードを書くのではなく、多くの行の悪いコードを書くことができると考えることを求めるのは興味深い指標です。
私は彼らがより多くの行をより少ないよりも良いと考えていると仮定することができます。計画を立てずにコードを書き始める方が良いでしょうか、それはコードの行を書く良い方法です。少なくともそうすれば、通常は少なくとも2回すべてを書くことになります。
スマートなスタックオーバーフローは、一般的にこの種の質問をする組織を避けます。正解が「ええ、wtf ??」でない限り
正当な理由なくこのメトリックを計算するのはなぜですか?また、本当にの指標を求めるランダムな会社は、正当な理由ではありません。
会社の質問が実際に深刻であり、インタビューが何か面白いことにつながると思われる場合は、ランダムな番号を選んで、それがどこにつながるかを確認します:-)
はい、20K +から始まったCベースのテストフレームワークを引き継いだことを思い出します 代わりにサブルーチンに分解して1K LOCに折りたたまれた行 元の作者によって書かれた20K行のディアレアコードのうち。残念ながら、 私の書いたKLOCが実際に行ったので、コードのエラーのために私はもっと激しく叩かれました 否定的...私は、メトリクス主導型の組織でコードベースを縮小することについて、長くて難しいと思うでしょう。...
あなたが真に正直であるならば、あなたはそれを有効な指標として見たことがないので、あなたは知らないと言うでしょう。インタビュアーが合理的/合理的な人であれば、これが彼らが探している答えです。
あなたが知らないと言う他の唯一の選択肢は推測することであり、それは実際に問題解決スキルを示していない。
これが本当に良い指標ではないと言うことで大多数に同意しても、あなたが言うように、それが深刻な会社であれば、彼らはこれを尋ねる理由があるかもしれません。 / p>
既存のプロジェクトの1つを取得し、行数を取得して、コーディングにかかった時間で割ります。これにより、1時間あたりの一種のメトリックが得られます。次に、その特定の言語で何回作業したかを推定し、既に計算されているメトリックで乗算します。正直、これは素晴らしい方法だとは思わない..しかし、正直なところ、これは素晴らしい質問でもない..この数字を思いついたときの戦略も会社に伝えたいと思う..彼らは、この質問についてのあなたの意見を知りたいと思っています。 :p
または、彼らはあなたがいくつかの経験があるかどうかを知りたいだけです。
"このドメインでは非常に尊敬されている会社であり、この質問をする非常に正当な理由があると確信しています
「尊敬されている」ため、そうではないと確信しています。 「彼らはすべて正しいことをする」という意味ではありません。これは確かに正しくないか、そうであれば、少なくとも私の意見では馬鹿げているからです。
「コード行」としてカウントされるものは何ですか?私は約250.000行のC#コードを書いたと推定します。問題? 95%は使い捨てコードであり、すべてが学習用ではありませんでした。既存の行を検索するよりも、これらの3行を再度記述(およびパラメーターを変更)する方が簡単だからです。
また、コード行は nothing を意味します。だから私は2人の男がいて、1人はもう1人よりも20%多くのLineを書いていますが、それらの20%多くは不要な複雑なライン、「ループアンロール」でした。それ以外の場合、リファクタリングされた可能性のある役に立たないもの。
すみません、尊敬される会社かどうか:コードの行を求めることは、プログラマーの効率を測定する手がかりがないことを示す確かな兆候です。つまり、LoCを測定するなど、石器時代のカレンダーとほぼ同じくらい正確です。つまり、たまにNumbersを緩めたり、膨らませたりするのが好きな人にとっては、それが働くのに良い場所だということです。
さて、それは答えよりも大暴れでしたが、この数字の正当な理由はまったくありません。
そして、ビルアトキンソン-2000行のストーリー ...
金曜日の午後(まあ、1か月に約1金曜日)に、過去1年間の職場での自己開発演習、テスト、プロトタイプ、およびインフラストラクチャを含め、約5キロを書いたと思います。ただし、あるプロジェクトでは既存の25kloc C / C ++アプリケーションを使用して1100行のErlangとして再実装し、別のプロジェクトでは15klocの既存のCライブラリを使用して1klocのC ++に変換したため、ネットは非常にマイナスです。そして、私がそれらの数字を持っている唯一の理由は、私がどれほど否定的であるかを見たかったからです。
これは古い投稿であることは知っていますが、とにかく誰かに役立つかもしれません...
最近、Java開発者として約9.5年間働いていた会社から転職しました。すべてのコードはCVS、次にSVNにあり、アトラシアンフィッシュアイがビューを提供していました。
私が去ったとき、フィッシュアイは私の合計LOCを+-250,000と報告していました。以下に、 LOCメトリックのフィッシュアイの説明を示します。各SVNユーザーの個人LOCの計算方法に関する議論を含みます。 SVNでの分岐とマージの問題に注意してください。通常、LOCはTRUNKのみに基づいている必要があります。