ライブラリを使用せずにタスクを実行できる場合、ライブラリを使用する必要がありますか?[閉まっている]


33

私は、オープンソースのJavaScriptプラグインを使用してタスクを遂行できる状況にあります。しかし、それを使用しようとしたとき、私はすでにやったことの多くを再設計する必要があることに気づきました。きれいなコードで同じタスクを達成できるのに対し、自分で作成でき、これまでに行ったことを変更する必要はありません。

とにかく、このような状況ではライブラリを選択する必要がありますか(コードの品質を向上させるためなど)。


3
「品質」をどのように測定していますか。コードの行数で?クラス?複雑?保守性?弾力性?
ライヴ

3
答えは、あなたが品質をどう考えているかに関係なく、NOです。しかし、品質に関するアイデアを提供してくれた場合、回答はその理由に対処して、なぜライブラリの数が品質と考えるものを改善しないのかを説明します。それは歳差運動の単なる問題です。現在のように、単純なNOは説明を必要とせずに質問に答えます。
ライヴ

4
あなたの質問への直接的な答えではありませんが、「この数」が「より良い品質」を保証するという考えは、コード品質の向上の難しさを認識して浮上します。品質を確保するためのクイックフィックスはありません。あった場合、問題は存在しません。特定の単純なアプローチが万能ソリューションであると主張する人は誰でも、(せいぜい)過度に一般化するか、(せいぜい)欠陥のある考えを真実として推し進めています。
18年

3
ライブラリを使用するとコードの品質が向上すると思いますか?
モニカの害を

1
質問が大幅に再構成されたように思われ、上位の回答が古いバージョンに回答しているため、クローズするよう投票しました。 「票」...
AnoE

回答:


54

エンジニアとして、おそらくこれを最適化の問題と考えるのが適切でしょう。当然、最適化の目標が必要です。この種の状況の一般的なものは総所有コストを最小にすることでしょう。

サードパーティのコンポーネントを追加すると、長期的にコストを節約できると思われる場合は、それを使用する必要があります。そうでない場合は、すべきではありません。継続的なメンテナンスのコストを考慮してください(たとえば、O / Sの新しいバージョンがリリースされたとき、セキュリティの欠陥が見つかったとき、または新しいW3C仕様がリリースされたとき)。

多くの些細な問題については、独自に成長させる方がコストは低くなりますが、組織のコアコンピテンシー以外のやや複雑な問題については、サードパーティに行くのが理にかなっています。

考慮すべき他の目標(リスクなど)もありますが、TCOが大きな目標です。


1
この答えにはさらに賛成票が必要だと思います。-ライブラリの長期的な信頼性は大きな問題になる可能性があります。また、ライブラリが存在する場合でも、APIが変更されるかどうかは誰にわかりますか?ライブラリは短期的には簡単ですが、長期的には問題を引き起こす可能性があります。(サイドノート:ソースコードとしてのライブラリはいくつかの問題を軽減します。)
DetlevCM

6
@DetlevCM答えは、非常に簡単に逆方向に進むことができるということです。自明ではないライブラリには、ライブラリのユーザーであるあなたが支払う必要のないメンテナンス費用が付随します。そして、もしあなたがしなければならないなら(つまり、あなたがライブラリの所有者だったら)支払えないでしょう。
キュービック

同意しますが、ライブラリのコストも考慮することを忘れないでください。バグ、制御外の設計変更、単一の関数を取り込むためだけに使用しないコードの束。また、ライブラリは多くの場合、特定の問題に対する解決策ほど表現力がありません。また、外部ライブラリを簡単にデバッグすることはできません。デバッグすると、後でさらにマージの問題に対処する必要があります。ライブラリソリューションがより軽量であると仮定するだけでなく、すべての要因を考慮し、ライブラリが完全に適合しない場合は独自のソリューションをコーディングすることを恐れないでください!
ビルK

36

ビルゲイツはかつて有名に言った:

「コードの行でプログラミングの進捗を測定することは、航空機の建物の進捗を重量で測定するようなものです。」

最終的にライブラリの数についても同じことが言えるため、この引用が思い浮かびます。原則として、次の場合を除き、ライブラリは使用しません。

  1. それを成し遂げる他の方法はありません。期限なしに予算内で製品を生産することは、経済的に実行不可能になります。
  2. このライブラリの多くの機能が必要になるため、時間を大幅に節約できます
  3. ライブラリはよく使用されており、潜在的な問題は文書化されています。

理想的には3つの条件すべてが満たされていますが、私は任意の2つで解決します。一番下の行は、目的に役立つ場合を除き、プログラムにライブラリを追加しないでください。その目的を尋ねる必要がある場合、おそらくプログラムに追加するべきではありません。したがって、プログラムのコード品質は、プログラム内のライブラリを必ずしも書き換える必要性に圧倒されることなく、各ライブラリをエレガントに呼び出すため、メリットがあります。

がんばろう!


4
@BillalBegueradj意味のある引用、はい。十分です 私たちは進歩について話しているのではなく、ソフトウェアの品質について話しているのです。コードの行は、発見された欠陥の数と非常に強い相関関係があります。LOCによる調整後、他のすべてのメトリックが検出された欠陥に対して予測力を持たないことを示す、オブジェクト指向メトリックの有効性に対するクラスサイズの交絡効果を参照してください。 2001)。そして、ところで、科学論文は有名な引用をしのぐ。
-Theraot

5
@Theraotあなたは、行数が欠陥の数を決定するので、大きなプログラムは小さなプログラムよりもコード品質が悪いことを示唆していますか?メトリックに同意しません、申し訳ありません。また、引用文が本当にあなたを悩ますなら、無視してください。
ニール

3
@Neilは明確にするために、行数は欠陥の数を決定せず、検出された欠陥の数と強い相関関係があります。これは簡単に理解できます。コードが大きいほど、欠陥が発生する可能性が高くなります。もちろん、欠陥が見つかって修正された後、欠陥の数は減少します。これは結局相関関係です。補遺:LOCは多くの一般的な指標に勝っています。詳細については論文をご覧ください。
-Theraot

5
@Theraot私の主張は、欠陥と行数の相関関係ではありませんでした。私の主張は、コード品質の低下に相当する膨大な数の欠陥でした。Chromeには長年にわたって欠陥がありましたが、GitHubで10行のjQueryプラグインが不適切に記述されていることよりも悪いことを示唆する主張の正当性を主張します。
ニール

3
@Theraot「科学論文は有名な引用をしのぐ。」-あなたの論文は、引用よりも実際に引用を支持しているように聞こえます
...-npostavs

14

(注:元の質問は次のとおりでした:ライブラリの数はコード品質を改善しますか?)

たぶん、あなたはそれを自分で答えることができるでしょう:いいえ、もちろん、ライブラリを使うという単なる事実はあなたのコードを改善しません。もしそうなら、努力なしですべてのための素晴らしいコードを書くことは簡単でしょう。

自分でロールオーバーするよりも再利用することを推奨するとき、人々が意味するのは、有名なライブラリのコードは、著者がより多くの時間を費やしているという理由だけで、おそらくあなたが思いつくものよりも正確で、効率的かつ/または使いやすいということです(プロジェクト全体の締め切りが)あなたが余裕があるよりも、機能の特定の領域について。

しかし、それはただの傾向であり、法律ではありません。もちろん、自分でロールするほど便利ではないライブラリもあります。多くの場合、これは、ライブラリが実際に必要なものよりもはるかに多くのことを行い、独自のコードベースを合理的なものよりもはるかに慣習に合わせるように強制するときに起こります。これはまさにこのインスタンスで見つけたもののように見えます。


4

適切なライブラリを使用すると多くの作業を節約できますが、多くの隠れたコストもあります。

  • 図書館は最新の状態に保つ必要があります。定期的に更新プログラム(セキュリティ関連の可能性があります!)があるかどうかを確認し、適用する必要があります。ライブラリを更新するたびに、アプリケーションの何かが壊れる可能性があります。つまり、後で完全な統合テストを実行する必要があります。したがって、プロジェクトが依存するすべてのライブラリは、長期的なメンテナンスのオーバーヘッドを増加させます。
  • 一部のJavascriptライブラリは非常に強力で、独自のパターンを使用しているため、人々はそれらを別個の専門技術分野として認識し始めています。したがって、追加する各ライブラリは、馴染みのないフレームワークに依存するコードの編集に自信がないと感じる開発者を怖がらせるかもしれません。使用するすべてのライブラリに精通している新しいメンテナンスプログラマを採用するのは困難な場合があります。
  • ライブラリをWebサイトに追加すると、ライブラリの一部しか使用しなくてもユーザーがライブラリ全体をロードする必要があるため、ロード時間が長くなります。ダウンロードカスタムは、あなたが必要とする機能だけで構築するためにいくつかの人気のあるライブラリがあなたを許す、それでもあなたはまだ(実行されません多くのコードが含まれ、通常ますかさらに悪い:コード実行されますが、何も有効ではありません、使用しない機能のためにデータ構造を準備するだけですから)。

したがって、プロジェクトに別の依存関係を追加して、自分で作成できるものを含める前に、コスト/利益分析を実行します。


そして、実際のデータがある場合は、その分析を繰り返します。コストを過小評価しているか、利益を過大評価しているか、状況が変わっている可能性があります。
デュプリケータ

1

これは、バイナリの決定である必要はありません。OSSライブラリのみを使用するか、新しいソリューションをゼロからプログラミングします。ライセンスで許可されている場合は、ライブラリの一部を再利用することもできます。

たとえば、私の分野(数値ソフトウェア)では、ライブラリにすばらしいコアモジュールと、80%しか満足していない特殊なモジュールを含めることができます。したがって、コアモジュールを使用し、特殊なモジュールのラッパーを作成します。または、OSSモジュールの設計とコードを使用して、独自の特殊なモジュールを開発することもできます。最も困難なアルゴリズムビットは通常、それらから再利用され、足場コードのみが変更されます。元のコードの一部をクリーンアップすることもできます。これは、ゼロからの開発と比較して、優れた学習体験と時​​間の節約を証明しています。


0

誰かがすでにあなたのために仕事をしているなら、もちろんあなたはそれを使うべきです。

ルールの例外はjavascriptです。彼らは言語を追加するためにダース他のライブラリ(当然の時代遅れのバージョン)をインポートしているだろうどこに備えて、彼らが使用したいと、その後、あなたのために仕事をして。

フレームワークを選択して、その中にとどまります。ライブラリがフレームワークまたはプレーンjsで動作する場合は、問題ありません。ただし、別のフレームワークが必要な場合は、別のオプションを探してください。


4
多くのJavaScriptファンがここにいます
FCin

0

ライブラリとそれらをいつ使用するかは複雑な決定です。

一方で、あなたはよくテストされた、ほぼ標準的なもの(私の分野では、例えばFFTWはこのカテゴリーに分類されます、またはlibsndfileのようなもの)。誰もが使用します。

一方、githubからはランダムなものがありますが、テストスイートはなく、メンテナーは1人しかいません。

私にとっての酸のテストは、最初にライブラリが私のアーキテクチャに適合するかどうかです(時には、特定のライブラリを使用することを知っている場合は、その周りに設計することになります)。 ?2番目の質問に対する適切なプロキシは、「自動化されたテストスイートがあり、ドキュメントはどのようなものですか?」です。

少しのデバッグは大きな問題ではありませんが、その時点で、ライブラリコードはメンテナンスの観点から自分のコードサイズにカウントされ始めます(何らかの理由で修正をアップストリームにプッシュできない場合)。

また、ライブラリとフレームワークを区別しますが、その違いは時には明確ではないため、私の(小さなコア、DSPヘビー)世界のフレームワークは、特にあなたがより多くをマージしようとしている場合、行の少し外側で何かをしたり、ライブラリを使用すると便利な場合があります。これは、Web開発シーンで非常に異なって見られることを知っています。

結局のところ、それは好みと経験に帰着する決定であり、経験のある人でさえ、少なくともライブラリーを使って、時々貧弱な選択をします。

決定、決定...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.