Sollten Sie eine Bibliothek verwenden, wenn Sie die Aufgabe ohne sie ausführen können? [geschlossen]


33

Ich bin in einer Situation, in der ich ein Open-Source-JavaScript-Plugin verwenden kann, um eine Aufgabe zu erfüllen. Aber als ich versuchte, es zu benutzen, musste ich vieles von dem, was ich bereits getan habe, neu gestalten, und es fügt meiner bescheidenen Meinung nach dem Projekt eine gewisse Komplexität hinzu. Während ich die gleiche Aufgabe mit einem sauberen Code erledigen kann, den ich selbst erstellen kann, und ohne das ändern zu müssen, was ich bisher getan habe.

Sollten Sie sich in dieser Situation trotzdem für eine Bibliothek entscheiden (etwa aus Gründen einer besseren Codequalität?)


3
Wie messen Sie "Qualität"? Durch die Anzahl der Codezeilen? Klassen? Komplexität? Wartbarkeit? Elastizität?
Laiv

3
Die Antwort ist NEIN, egal was Sie für Qualität halten oder nicht. Wenn Sie uns jedoch Ihre Vorstellung von Qualität mitteilen, werden die Antworten auf deren Begründung eingehen, um zu erklären, warum die Anzahl der Bibliotheken die Qualität Ihrer Meinung nach nicht verbessert. Es ist nur eine Frage der Präzession. So wie es jetzt ist, wird ein einfaches NEIN die Frage ohne Erklärungsbedarf beantworten.
Laiv

4
Keine direkte Antwort auf Ihre Frage, aber die Vorstellung, dass "diese Zahl" zwangsläufig "bessere Qualität" garantiert, steht im Widerspruch zu den Schwierigkeiten, die Codequalität zu erhöhen. Es gibt keine schnelle Lösung für die Qualitätssicherung. Wenn es das gäbe, würde das Problem nicht existieren. Wer behauptet, dass ein bestimmter einfacher Ansatz das A und O ist, übertreibt (bestenfalls) die Verallgemeinerung oder treibt (schlimmstenfalls) seine fehlerhafte Idee zur Wahrheit.
Flater

3
Was lässt Sie glauben, dass die Verwendung der Bibliothek die Codequalität erhöhen würde?
Hör auf, Monica

1
Zum Schließen gewählt, da die Frage offenbar erheblich umformuliert wurde und die oberen Antworten die alte Version beantworten ... Senden Sie die Frage besser so, wie sie jetzt für sich steht, und fügen Sie die Details hinzu, um das "zu große Brett" zu vermeiden "Stimmen) ...
AnoE

Antworten:


54

Als Ingenieur ist es vielleicht angebracht, sich dies als Optimierungsproblem vorzustellen. Natürlich müssen wir eine Optimierung haben Ziel . In solchen Situationen ist es häufig üblich, die Gesamtbetriebskosten zu minimieren .

Wenn Sie glauben, dass das Hinzufügen der Komponente eines Drittanbieters auf lange Sicht Kosten spart, sollten Sie diese verwenden. Wenn Sie dies nicht tun, sollten Sie dies nicht tun. Stellen Sie sicher, dass Sie die Kosten für die fortlaufende Wartung berücksichtigen (z. B. wenn eine neue Version von O / S veröffentlicht wird, eine Sicherheitslücke gefunden wird oder eine neue W3C-Spezifikation veröffentlicht wird).

Bei vielen trivialen Problemen ist es kostengünstiger, eigene Probleme zu entwickeln. Bei moderat komplexen Problemen außerhalb der Kernkompetenz Ihres Unternehmens ist es jedoch oft sinnvoll, sich an Dritte zu wenden.

Es gibt auch andere Ziele zu berücksichtigen (z. B. Risiko), aber die Gesamtbetriebskosten sind hoch.


1
Ich denke, diese Antwort braucht mehr Gegenstimmen. - Die langfristige Zuverlässigkeit von Bibliotheken kann ein großes Problem sein. Und selbst wenn eine Bibliothek vorhanden ist, wer weiß, ob sich die APIs ändern werden? Bibliotheken sind kurzfristig einfach, können aber langfristig Probleme verursachen. (Randnotiz: Bibliotheken als Quellcode mindern einige der Probleme.)
DetlevCM

6
@DetlevCM Die Antwort lautet auch, dass es sehr leicht andersherum gehen kann. Nicht-triviale Bibliotheken haben Wartungskosten, die Sie als Benutzer der Bibliothek nicht bezahlen müssen und die Sie möglicherweise nicht bezahlen könnten, wenn Sie müssten (dh wenn Sie der Eigentümer der Bibliothek wären).
Cubic

Ich stimme zu, aber vergessen Sie nicht, auch die Kosten der Bibliothek zu berücksichtigen - Fehler, Designänderungen, die außerhalb Ihrer Kontrolle liegen, und Codebündel, die Sie nicht nur verwenden, um eine einzelne Funktion einzubringen. Auch die Bibliothek ist oft nicht so aussagekräftig wie Ihre Lösung für Ihr gegebenes Problem sein könnte. AUCH Sie können eine externe Bibliothek nicht so einfach debuggen und müssen sich später mit mehr Zusammenführungsproblemen befassen. Gehen Sie nicht einfach davon aus, dass eine Bibliothekslösung leichter ist, sondern berücksichtigen Sie alle Faktoren und haben Sie keine Angst, Ihre eigene Lösung zu codieren, wenn die Bibliothek nicht ganz passt!
Bill K

36

Bill Gates hat einmal gesagt:

"Das Messen des Programmierfortschritts durch Codezeilen gleicht dem Messen des Flugzeugbaufortschritts nach Gewicht."

Dieses Zitat kommt in den Sinn, weil das gleiche letztendlich für die Anzahl der Bibliotheken gesagt werden könnte. In der Regel verwende ich keine Bibliotheken, es sei denn:

  1. Es gibt keine andere Möglichkeit, dies zu erreichen. Verzichten wäre nicht mehr wirtschaftlich, um das Produkt pünktlich und im Budget zu produzieren.
  2. Dies würde mir viel Zeit sparen, da ich viele der Funktionen dieser Bibliothek benötigen würde
  3. Die Bibliothek wird gut genutzt und alle potenziellen Probleme, die ich hätte, wären gut dokumentiert.

Idealerweise sind alle drei Bedingungen erfüllt, aber ich würde mich mit zwei zufrieden geben. Unterm Strich sollten Sie Ihrem Programm keine Bibliothek hinzufügen, es sei denn, dies dient einem bestimmten Zweck. Wenn Sie fragen müssen, was dieser Zweck ist, sollten Sie ihn wahrscheinlich nicht zu Ihrem Programm hinzufügen. Die Codequalität Ihres Programms profitiert daher davon, dass es jede Bibliothek elegant aufruft, ohne dass die Notwendigkeit besteht, Bibliotheken in Ihrem Programm neu zu schreiben.

Viel Glück!


4
@ BillalBegueradj Sinnvolles Zitat, ja. Angemessen, nein. Wir sprechen nicht über Fortschritt, wir sprechen über Softwarequalität, und Codezeilen korrelieren sehr stark mit der Anzahl der gefundenen Fehler. Weitere Informationen finden Sie in der Veröffentlichung Der Einfluss der Klassengröße auf die Gültigkeit objektorientierter Metriken, in der angegeben ist, dass alle anderen Metriken nach der Anpassung durch LOC keine Vorhersagekraft für festgestellte Fehler haben. 2001). Übrigens schlägt das wissenschaftliche Papier das berühmte Zitat.
Theraot

5
@ Theraot Sie schlagen vor, dass, da die Anzahl der Zeilen die Anzahl der Fehler bestimmt, größere Programme eine schlechtere Codequalität haben als kleinere Programme? Ich stimme Ihrer Metrik nicht zu, sorry. Wenn Sie das Zitat wirklich stört, können Sie es ignorieren.
Neil

3
@Neil klar zu sein, bestimmt die Anzahl der Linien nicht die Anzahl der Fehler, es hat eine starke Korrelation mit der Anzahl der gefundenen Fehler. Dies ist leicht zu verstehen: Je größer der Code, desto mehr Möglichkeiten für die Einführung von Fehlern. Natürlich würde die Anzahl der Fehler sinken, nachdem sie gefunden und behoben wurden. Dies ist schließlich nur eine Korrelation. Nachtrag: LOC übertrifft viele gängige Metriken. Weitere Informationen finden Sie auf dem Papier.
Theraot

5
@ Theraot Mein Argument war nicht mit der Korrelation von Defekten zur Zeilenzahl. Mein Argument war die schiere Anzahl von Fehlern, die einer schlechten Codequalität gleichkommen. Chrome hatte im Laufe der Jahre einige Mängel, aber ich würde die Rechtmäßigkeit von Behauptungen argumentieren, die darauf hindeuten, dass es schlechter geschrieben ist als ein schlecht geschriebenes 10-zeiliges jQuery-Plugin auf Github.
Neil

3
@ Theraot "wissenschaftliches Papier schlägt berühmtes Zitat." - Es hört sich so an, als ob Ihr Papier das Zitat tatsächlich unterstützt, anstatt es zu
übertreffen

14

(Hinweis: Die ursprüngliche Frage lautete: Verbessert die Anzahl der Bibliotheken die Codequalität?)

Sie können diese Frage wahrscheinlich selbst beantworten: Nein, natürlich verbessert die bloße Verwendung von Bibliotheken Ihren Code nicht. Wenn dies der Fall wäre, wäre es einfach, ohne großen Aufwand großartigen Code für alles zu schreiben.

Was die Leute meinen, wenn sie die Wiederverwendung über Roll-Your-Own empfehlen, ist, dass Code in einer bekannten Bibliothek wahrscheinlich korrekter, effizienter und / oder benutzerfreundlicher ist als das, was Sie sich selbst ausgedacht haben, einfach weil die Autoren viel mehr Zeit aufgewendet haben auf einen bestimmten Funktionsbereich als Sie (mit Ihrer Frist für das gesamte Projekt) leisten können.

Aber das ist nur ein Trend, kein Gesetz. Natürlich kann es Bibliotheken geben, die nicht so nützlich sind, wie es Roll-Your-Own wäre. Oft geschieht dies, wenn die Bibliothek tatsächlich viel mehr als das tut, was Sie benötigen, und dies auf eine Weise, die Sie dazu zwingt, Ihre eigene Codebasis viel mehr als vernünftig an ihre Konventionen anzupassen. Es sieht so aus, als ob dies genau das ist, was Sie in dieser Instanz gefunden haben.


4

Die Verwendung der richtigen Bibliotheken spart zwar viel Arbeit, birgt aber auch viele versteckte Kosten:

  • Bibliotheken müssen auf dem neuesten Stand gehalten werden. Sie müssen regelmäßig überprüfen, ob sie Updates erhalten haben (die möglicherweise sicherheitsrelevant sind!) Und diese anwenden. Jedes Bibliotheksupdate kann möglicherweise zu Problemen in Ihrer Anwendung führen. Das bedeutet, dass Sie anschließend einen vollständigen Integrationstest durchführen müssen. Daher erhöht jede Bibliothek, auf die Ihr Projekt angewiesen ist, den langfristigen Wartungsaufwand.
  • Einige Javascript-Bibliotheken sind so leistungsfähig und verwenden so einzigartige Muster, dass die Leute sie als separate technische Fachgebiete wahrnehmen. Daher kann jede zusätzliche Bibliothek, die Sie hinzufügen, Entwickler abschrecken, die sich nicht sicher fühlen, Code zu bearbeiten, der auf einem Framework basiert, mit dem sie nicht vertraut sind. Es kann schwierig werden, neue Wartungsprogrammierer einzustellen, die mit allen von Ihnen verwendeten Bibliotheken vertraut sind.
  • Das Hinzufügen einer Bibliothek zu Ihrer Website verlängert die Ladezeiten, da der Benutzer die gesamte Bibliothek laden muss, auch wenn Sie nur einen kleinen Teil davon verwenden. Einige populäre Bibliotheken können Sie herunterladen eigene Builds nur mit der Funktionalität , die Sie benötigen, aber selbst dann werden Sie in der Regel sind noch eine Menge Code, der nie ausgeführt wird (oder noch schlimmer: Code, der nicht laufen, aber tut nichts nützlich, weil es nur Datenstrukturen für Funktionen vorbereitet, die Sie nicht verwenden).

Bevor Sie also eine weitere Abhängigkeit zu Ihrem Projekt hinzufügen, um etwas einzubeziehen, das Sie genauso gut selbst schreiben können, sollten Sie eine Kosten-Nutzen-Analyse durchführen.


Und wiederholen Sie diese Analyse, wenn Sie über echte Daten verfügen. Möglicherweise haben Sie die Kosten unterschätzt / den Nutzen überschätzt, oder die Situation hat sich geändert.
Deduplizierer

1

Dies muss keine binäre Entscheidung sein: Verwenden Sie entweder nur eine OSS-Bibliothek oder programmieren Sie eine neue Lösung von Grund auf neu. Eine andere Option kann sein, Teile der Bibliothek wiederzuverwenden, wenn die Lizenz dies zulässt.

In meinem Bereich (numerische Software) kann eine Bibliothek beispielsweise feine Kernmodule und einige spezielle Module enthalten, mit denen ich nur zu 80% zufrieden bin. Also würde ich die Kernmodule verwenden und einen Wrapper für die Spezialmodule schreiben. Oder ich kann meine eigenen Spezialmodule entwickeln, indem ich das Design und den Code der OSS-Module verwende. Die schwierigsten algorithmischen Bits werden normalerweise von diesen wiederverwendet, wobei nur der Gerüstcode geändert wird. Ich kann auch einen Teil des ursprünglichen Codes bereinigen. Dies hat sich als gute Lernerfahrung und Zeitersparnis im Vergleich zur Neuentwicklung erwiesen.


0

Wenn jemand die Arbeit bereits für Sie erledigt hat, sollten Sie sie natürlich verwenden.

Die Ausnahme von der Regel ist Javascript. Wo sie ein Dutzend anderer Bibliotheken importiert haben (natürlich veraltete Versionen), um die Sprachfunktionen hinzuzufügen, die sie verwenden möchten, und dann die Arbeit für Sie erledigt haben.

Wählen Sie Ihren Rahmen und bleiben Sie dabei. Wenn die Bibliothek mit Ihrem Framework oder einfachen js funktioniert, ist das in Ordnung. Wenn jedoch ein anderes Framework erforderlich ist, suchen Sie nach einer anderen Option.


4
Viele Javascript-Fans hier
FCin

0

Bibliotheken und wann man sie benutzt, ist eine komplizierte Entscheidung.

Einerseits haben Sie gut getestete, fast standardmäßige Dinge (in meinem Bereich fällt FFTW beispielsweise in diese Kategorie oder so etwas wie libsndfile), von denen allgemein anerkannt wird, dass sie nur funktionieren, und die in den letzten 20 Jahren Standard waren jeder nutzt.

Auf der anderen Seite hast du zufällige Sachen von Github, mit keiner Testsuite und nur etwa 1 Betreuer. Warum eigentlich?

Der Härtetest für mich ist zunächst, dass die Bibliothek in meine Architektur passt (manchmal, wenn Sie wissen, dass Sie eine bestimmte Bibliothek verwenden möchten, entwerfen Sie darum herum), und ich denke, ich werde das Debuggen eines anderen Bibliothekscodes beenden ? Ein guter Proxy für die zweite Frage ist "Gibt es eine automatisierte Testsuite und wie ist die Dokumentation?".

Ein kleines Debugging ist kein großes Problem, aber zu diesem Zeitpunkt wird der Bibliothekscode aus Wartungsgründen mit meiner eigenen Codegröße verglichen (insbesondere, wenn meine Fixes aus irgendeinem Grund nicht in den Upstream verschoben werden können).

Ich würde auch zwischen Bibliotheken und Frameworks unterscheiden, obwohl die Unterscheidung manchmal nicht so eindeutig ist. Frameworks in meiner (kleinen Kern-, DSP-schweren) Welt sind in der Regel ein Ärgernis, besonders wenn Sie dann versuchen, mehr zusammenzuführen Wenn Sie etwas außerhalb der Zeilen tun oder tun, sind Bibliotheken manchmal nützlich. Mir ist bewusst, dass dies in der Web-Entwickler-Szene sehr unterschiedlich gesehen wird.

Am Ende des Tages ist es eine Entscheidung, die auf Geschmack und Erfahrung ankommt, und selbst wenn die erfahrene Person manchmal schlecht aussucht, zumindest bei einer Bibliothek, können Sie sie immer herausreißen und Ihre eigene Implementierung schreiben, wenn es zu ärgerlich wird.

Entscheidungen Entscheidungen....

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.