一部のコンピューターマスタープログラムのオンラインアプリケーションでは、次のように述べています。
プログラムを作成したプログラミング言語をリストしてください。言語ごとに、その言語で作成した最長のプログラムの行の長さを示します。おおよそのこともありますが、自分で書いたプログラムの部分だけを数えてください。
言語における「最も長く機能するプログラムの行」とそれに精通していることとの関係は何ですか?通常、プログラマーがその言語に優れている、優れている、公平である、または不慣れであることを示す行はいくつありますか?
「最も長く機能するプログラムのライン」を知ることは本当に役に立ちますか?
それはすべて、彼らがあなたの答えをどのように使用するつもりかによって異なります。ある人は、次のように応答を「バケツ」する可能性があります。
私はそれで大丈夫でしょう。しかし、別の人は、2000行のプログラムと10,000行のプログラムを主張したことを区別するはるかに詳細なアプローチを持っている可能性があります。それはばかげています。なぜなら、それぞれが100行未満の10個のプログラムと1000行のプログラムを書くことに違いがないという意味ではありません。1000行のプログラム(または100,000行)を書いたことがあれば、これを知っています。
この質問には3つの問題があります。
コードの行数はひどい測定です。特に、行数が多いほど良いという前提があります。
同じ問題を解決するように求められた2人の学生を想像してみてください。
コードを書き始め、演習全体を通して、コードを読むことなく、コードをどんどん書きます。演習の最後に、コードベースは次のものでいっぱいになります。
次のような愚かなコメント:
// Concatenate the first and the last name.
string displayName = this.firstName + " " + this.lastName;
次のように、インライン化する必要のあるコードの断片:
int age = this.Age;
int threshold = this.Threshold;
int temp = age - threshold;
int limit = 3;
if (temp == limit)
{
return true;
}
bool tmp = temp > limit;
if (tmp == true)
{
return true;
}
else
{
return false;
}
これは次のように単純なはずです。
int ageWithoutThreshold = this.Age - this.Threshold;
return ageWithoutThreshold >= MIN_AGE_TO_APPLY;
もう1つは、新しいコード行を慎重に追加します。コードが多いほど、エラーの原因が多くなります。彼は定期的にコードをリファクタリングし、どのメソッドをどのクラスに配置するかを非常に簡単に見つけられるように適切にアーキテクチャー化し、コードの重複を回避し、一般に、特定の問題を解決するために必要なことを実行しようとします。
どちらがより良い成績を持つべきですか?
ワーキングプログラムとは何ですか?それが機能するかどうかを判断する方法は?
動作するプログラムがバグのないプログラムである場合、実際には動作するプログラムは世界中にありません(コードにバグがないことを保証できるように正式な証明を使用するものもありますが、の例はほとんど見つかりません。そのようなプログラム)。
動作中のプログラムがバグが知られていないプログラムである場合、今朝私が緊急に書いたスパゲッティコードは動作中のプログラムです。私はまだそれをコンパイルしていないので、そのようなひどい混乱が修正されるのに数週間かかるとかなり確信しているとしても、私はバグに気づいていません。
作業プログラムが、すべての要件に合格する機能テストがあるプログラムである場合、有機的に成長するほとんどのコードベースで何をしますか?多くの場合、機能要件と非機能要件が記述されておらず、機能テストもありません。
動作中のプログラムが作成者によって動作すると想定されるプログラムである場合、質問への回答はまったく関係ありません。 5 000LOCのアプリが機能すると思います。だから何?
ほとんどの大規模システムは、多くの場合Webサービスとして提供される小規模なプログラムから組み立てられます。たとえば、CRMは、ユーザーの認証にREST API、ドキュメントの管理に別のAPI、またはドキュメントのアップロードに3番目のAPIを使用する場合があります。
それらのシステムはプログラムではありません。
たとえば、Web開発者にとって、大規模なプログラムについて話すことは意味がありません。 Web開発者が単一の大きなプログラムを作成することに誇りを持っているのを見るのは憂慮すべきことです。小さなサービスのセットははるかに少ないメンテナンスで済みます。
メトリックを使用して、開発者が言語に精通していることを理解することは意味がありません。 LOC測定が間違っている理由についてはすでに説明しました。他のいくつかの測定について考えてみましょう。
長年の専門的経験
私は2日間、C#プロジェクトに取り組んで、サルができるほど基本的な作業を行ってきました。同じことを2日間行っていない人よりも、C#の経験が豊富になりますか?
Rubyを使ってeコマースWebサイトを何度も何度もやってきた、あまり賢くない若いコーダーを例にとってみましょう。ここで、これまでアセンブラー、C、C++、Java、Haskell、Pythonでのみ作業していた才能のあるソフトウェア開発者を取り上げます。 2週間前、彼はRubyを学び始めました。 Rubyプロジェクトの開発者を探している会社にとって、誰がより価値がありますか?
長年の専門的な経験は無意味な尺度です。人事部がそれをとても愛しているという事実はそれを非常に危険なものにします。
プロジェクト数
ここでも同じ議論が当てはまります。私はeコマースのウェブサイトを何度も何度もやって1年を過ごすことができます。または、技術的に困難なプロジェクトに1年間取り組んで、そこで何かを学ぶこともできます。
悲しいことに、この指標は人事担当者の間でも非常に人気があります。
では、特定の言語で開発者の経験を測定する方法は?体系的なアプローチを通じて、複数の要因をメトリックに変換せずに検討することにより、次のようになります。