web-dev-qa-db-ja.com

なぜ「単純な」プロジェクトにそれほど多くのコードがあるのですか?

私は科学計算ソフトウェアを数年間C++で開発してきましたが、 CFDおよびDEM シミュレーションでかなりうまく機能します。ただし、依存関係のないコードは約12k行あります。別のプロジェクトをのぞくときはいつでも、かなり特定のタスクに関する「単純な」プロジェクトでさえ、どれだけ多くの行が記述されているかにいつも驚かされます。

例:

  • cryptopp、C++の100k行(?!)の暗号化器 (Git)

  • libxml2、Cの300k行のXMLパーサー (Git)

これらはよく書かれた便利なライブラリですが、XMLパーサーは数千行で記述できます。さらに、私は軽量の50行の暗号化装置を探していただけで、このモンスターを見つけました...

それにもかかわらず、これらは2つの例にすぎません。このトピックの概要のような、一般的な答えを入手したいと思います。私はソフトウェア開発者ではなく、調査エンジニアです。

7
BalazsToth

大規模で多様なユーザーグループに対応するために作成されたライブラリは、プロジェクト固有のコードとは異なる方法で設計する必要があります。それらをより堅牢にし、より幅広いEdgeケースを処理し、十分な機能と柔軟性を提供して、誰にとっても役立つようにする必要があります。

追加のコードの大部分がコストに見合うかどうかを判断する必要があります。よく管理されたライブラリであり、適切なドキュメントがあり、直感的である場合、コードの大部分は気にしないかもしれません。そして、はい、私はそれを認めることを嫌いますが、すでにライブラリを知っていて理解している人々の文化を見つけることができるという理由だけでさえ、人気は重要です。

真実は、私はおそらくそれさえ考えずに多くのライブラリを使用しますが(特に.NETフレームワークは、かなりのコードバルクと膨大な数の機能を備えています)、それらのライブラリをコードレベルで維持する必要はほとんどありません;他の人は私のためにそれをします。私は通常、組み込みデバイス(メモリとプロセッサに大きな制約がある)をプログラムしないので、コードの大きさについてはそれほど考えていません。

Newtonsoft.JSONを何年も使用しています。シンプルで直感的なAPIがあり、非常に堅牢で、機能します。どれくらいの大きさなのかはわかりませんが、そのサイズは重要です。そのサイズは私にとって決して問題ではなかったので、私はそれを要因と考えたことはありません。

とは言っても、すべての代替案を評価した後の多くのケースでは、ライブラリよりもカスタムコードを選択しています。コードやパフォーマンス特性などを制御できるようになりました。その単純さは、巨大なライブラリをマーシャリングするコストを上回ります。私は単純なシステムを強く支持しています。他のすべてが同じであれば、コードが少ないほど常に優れています。しかし、私はまた、すでに他の人々によって非常にうまく行われていることを再発明したくありません。一人で書くことができるコードは非常に多くあります。

一部のテクノロジーはライブラリーのエコシステムに基づいているため、これらのテクノロジーの1つを選択すると、ライブラリーの哲学を購入することになります。 Aurelia がさまざまなタイプの2つのhundredライブラリを使用しているとしても、まったく驚かないでしょう。金融の世界では、これをレバレッジと呼びます。あなたは文字通り巨人の肩の上に立っています。

反対に、構造の提供を除いてあまり機能しないコードの連なりが精巧な水晶大聖堂のように立っている「ハウスオブカード」プロジェクトはすべて目にしました。これは興味深いコードですが、その利点の多くがコストを上回っているという意味で、そのコードの多くが重要であるとは思いません。よく書かれたライブラリはそれを避けます。

JavaScriptライブラリなどの一部のエコシステムには、経済の文化があります。このようなスペースで作成されたライブラリは、ロジスティックな制約(つまり、ブラウザーの帯域幅)の影響を受けるため、小さい傾向があります。

一部のライブラリーは、ライブラリーを効果的に使用するためにライブラリー作成者の哲学に同意しなければならないという意味で、「意見」があります。 Caliburn Microはそのようなライブラリの例です。 AngularとKnockoutもそうです。他のライブラリは本質的により一般的です。一般性はより多くのコードを生み出す傾向があります。

マルチテラバイトのストレージデバイス、マルチギガバイトのメモリ、15Mビット以上のインターネットの時代では、信頼できるライブラリに必要な機能を搭載することは、おそらくコードサイズよりも重要です。

14
Robert Harvey