web-dev-qa-db-ja.com

言語における「最も長く働くプログラムの行」とそれに精通していることとの関係?

一部のコンピューターマスタープログラムのオンラインアプリケーションでは、次のように述べています。

プログラムを作成したプログラミング言語をリストしてください。言語ごとに、その言語で作成した最長のプログラムの行の長さを示します。おおよそのこともありますが、自分で書いたプログラムの部分だけを数えてください。

  1. 私はそれをよく覚えていません、そして私は各プログラムの行を数えたことがありません。プログラマーは、各プログラムのおよそ何行かを常に知っており、それらを記録していますか?
  2. 言語における「最も長く機能するプログラムの行」とそれに精通していることとの関係は何ですか?通常、プログラマーがその言語に優れている、優れている、公平である、または不慣れであることを示す行はいくつありますか?

    「最も長く機能するプログラムのライン」を知ることは本当に役に立ちますか?

1
Tim

それはすべて、彼らがあなたの答えをどのように使用するつもりかによって異なります。ある人は、次のように応答を「バケツ」する可能性があります。

  • 100行以下:あなたが書いたのはデモか学校の宿題だけです。小さなスクリプト用に設計された言語でない限り、おそらくそれを完全に理解していないか、定期的に使用していません。
  • 100,00行以下:通常のサイズのプログラムを作成し、おそらくそれらすべてを理解している。言語のすべての機能を満たし、その言語でデバッグする方法を知っており、少なくとも1つのフレームワークを知っている可能性が高い。
  • 100,000行以上:誇張しているか、インタビューでこれについて話し合う必要があります

私はそれで大丈夫でしょう。しかし、別の人は、2000行のプログラムと10,000行のプログラムを主張したことを区別するはるかに詳細なアプローチを持っている可能性があります。それはばかげています。なぜなら、それぞれが100行未満の10個のプログラムと1000行のプログラムを書くことに違いがないという意味ではありません。1000行のプログラム(または100,000行)を書いたことがあれば、これを知っています。

4
Kate Gregory

この質問には3つの問題があります。

1.LOC

コードの行数はひどい測定です。特に、行数が多いほど良いという前提があります。

同じ問題を解決するように求められた2人の学生を想像してみてください。

  • コードを書き始め、演習全体を通して、コードを読むことなく、コードをどんどん書きます。演習の最後に、コードベースは次のものでいっぱいになります。

    1. デッドコード(どの時点でも使用されていないコード)、
    2. Ctrl + C/Ctrl + Vの乱用(ソフトウェア開発で最も重要な問題の1つ)によるコードの重複、
    3. 編成が不足しているために単純に重複しています(メソッドは最初から作成されていますが、他のクラスにはほとんど同じものが存在します)、
    4. 次のような愚かなコメント:

      // Concatenate the first and the last name.
      string displayName = this.firstName + " " + this.lastName;
      
    5. 次のように、インライン化する必要のあるコードの断片:

      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つは、新しいコード行を慎重に追加します。コードが多いほど、エラーの原因が多くなります。彼は定期的にコードをリファクタリングし、どのメソッドをどのクラスに配置するかを非常に簡単に見つけられるように適切にアーキテクチャー化し、コードの重複を回避し、一般に、特定の問題を解決するために必要なことを実行しようとします。

どちらがより良い成績を持つべきですか?

2.作業プログラム

ワーキングプログラムとは何ですか?それが機能するかどうかを判断する方法は?

動作するプログラムがバグのないプログラムである場合、実際には動作するプログラムは世界中にありません(コードにバグがないことを保証できるように正式な証明を使用するものもありますが、の例はほとんど見つかりません。そのようなプログラム)。

動作中のプログラムがバグが知られていないプログラムである場合、今朝私が緊急に書いたスパゲッティコードは動作中のプログラムです。私はまだそれをコンパイルしていないので、そのようなひどい混乱が修正されるのに数週間かかるとかなり確信しているとしても、私はバグに気づいていません。

作業プログラムが、すべての要件に合格する機能テストがあるプログラムである場合、有機的に成長するほとんどのコードベースで何をしますか?多くの場合、機能要件と非機能要件が記述されておらず、機能テストもありません。

動作中のプログラムが作成者によって動作すると想定されるプログラムである場合、質問への回答はまったく関係ありません。 5 000LOCのアプリが機能すると思います。だから何?

3.プログラム≠システム

ほとんどの大規模システムは、多くの場合Webサービスとして提供される小規模なプログラムから組み立てられます。たとえば、CRMは、ユーザーの認証にREST API、ドキュメントの管理に別のAPI、またはドキュメントのアップロードに3番目のAPIを使用する場合があります。

それらのシステムプログラムではありません。

たとえば、Web開発者にとって、大規模なプログラムについて話すことは意味がありません。 Web開発者が単一の大きなプログラムを作成することに誇りを持っているのを見るのは憂慮すべきことです。小さなサービスのセットははるかに少ないメンテナンスで済みます。

親しみやすさの測定

メトリックを使用して、開発者が言語に精通していることを理解することは意味がありません。 LOC測定が間違っている理由についてはすでに説明しました。他のいくつかの測定について考えてみましょう。

  1. 長年の専門的経験

    私は2日間、C#プロジェクトに取り組んで、サルができるほど基本的な作業を行ってきました。同じことを2日間行っていない人よりも、C#の経験が豊富になりますか?

    Rubyを使ってeコマースWebサイトを何度も何度もやってきた、あまり賢くない若いコーダーを例にとってみましょう。ここで、これまでアセンブラー、C、C++、Java、Haskell、Pythonでのみ作業していた才能のあるソフトウェア開発者を取り上げます。 2週間前、彼はRubyを学び始めました。 Rubyプロジェクトの開発者を探している会社にとって、誰がより価値がありますか?

    長年の専門的な経験は無意味な尺度です。人事部がそれをとても愛しているという事実はそれを非常に危険なものにします。

  2. プロジェクト数

    ここでも同じ議論が当てはまります。私はeコマースのウェブサイトを何度も何度もやって1年を過ごすことができます。または、技術的に困難なプロジェクトに1年間取り組んで、そこで何かを学ぶこともできます。

    悲しいことに、この指標は人事担当者の間でも非常に人気があります。

では、特定の言語で開発者の経験を測定する方法は?体系的なアプローチを通じて、複数の要因をメトリックに変換せずに検討することにより、次のようになります。

  • オープンソースプロジェクトへの貢献を含む、コミュニティ内の人の含意、
  • 実際に販売されたプロジェクト、
  • 人気になったオープンソースプロジェクト、
  • 執筆(出版物、ブログなど)、
  • 会議への参加、
  • 個人的な動機、
  • 言語の癖や暗い面を説明する際のスピーチのしやすさ、
  • 他の言語と比較した言語の落とし穴と欠点の認識、
  • 言語またはエコシステムに関連するツール(デバッグツール、テスト、継続的インテグレーション、継続的デリバリーなど)に関する知識。
  • 等.
3