it-swarm-eu.dev

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

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 verwenden, musste ich viele Dinge 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 erreichen kann, kann ich mich selbst erstellen, ohne ändern zu müssen, was ich bisher getan habe.

Sollten Sie sich in dieser Situation trotzdem für eine Bibliothek entscheiden (z. B. um einen besseren Code zu erhalten?)

33

Als Ingenieur ist es vielleicht angebracht, dies als Optimierungsproblem zu betrachten. Natürlich müssen wir ein Optimierungsziel haben . Eine häufige Situation in solchen Situationen wäre die Minimierung von Gesamtbetriebskosten .

Wenn Sie glauben, dass das Hinzufügen der Komponente eines Drittanbieters auf lange Sicht Kosten spart, sollten Sie sie verwenden. Wenn Sie dies nicht tun, sollten Sie es nicht tun. Stellen Sie sicher, dass Sie die Kosten für die laufende 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 mäßig komplexen Problemen, die außerhalb der Kernkompetenz Ihres Unternehmens liegen, ist es häufig sinnvoll, sich an Dritte zu wenden.

Es sind auch andere Ziele zu berücksichtigen (z. B. Risiko), aber die Gesamtbetriebskosten sind die großen.

54
John Wu

Bill Gates sagte einmal:

"Das Messen des Programmierfortschritts anhand von Codezeilen ist wie das Messen des Fortschritts beim Flugzeugbau nach Gewicht."

Dieses Zitat fällt mir ein, weil dies letztendlich auch für die Anzahl der Bibliotheken gilt. In der Regel verwende ich keine Bibliotheken, es sei denn:

  1. Es gibt keine andere Möglichkeit, dies zu erreichen. Ein Verzicht wäre nicht mehr wirtschaftlich, um das Produkt pünktlich und im Rahmen des Budgets 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 mögliche Probleme, die ich haben könnte, sind gut dokumentiert.

Im Idealfall sind alle drei Bedingungen erfüllt, aber ich würde mich mit zwei zufrieden geben. Unter dem Strich sollten Sie Ihrem Programm keine Bibliothek hinzufügen, es sei denn, sie dient einem Zweck. Wenn Sie fragen müssen, was dieser Zweck ist, sollten Sie ihn wahrscheinlich nicht zu Ihrem Programm hinzufügen. Der Code Qualität Ihres Programms profitiert daher davon, dass er jede Bibliothek elegant aufruft, ohne von der Notwendigkeit belastet zu werden, Bibliotheken in Ihrem Programm notwendigerweise neu zu schreiben.

Viel Glück!

36
Neil

(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 verwendbarer ist als das, was Sie sich selbst einfallen lassen würden, einfach weil die Autoren viel mehr Zeit aufgewendet haben auf einen bestimmten Funktionsbereich, den Sie sich (mit Ihrer Frist für das gesamte Projekt) leisten können.

Aber das ist nur ein Trend, kein Gesetz. Sicherlich kann es Bibliotheken geben, deren Verwendung nicht so nützlich ist wie die von Roll-Your-Own. 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.

14
Kilian Foth

Die Verwendung der richtigen Bibliotheken kann Ihnen viel Arbeit ersparen, 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 (was möglicherweise sicherheitsrelevant ist!), Und diese anwenden. Jedes Bibliotheksupdate kann möglicherweise etwas in Ihrer Anwendung beschädigen. Das bedeutet, dass Sie anschließend einen vollständigen Integrationstest durchführen müssen. Jede Bibliothek, von der Ihr Projekt abhängt, erhöht den langfristigen Wartungsaufwand.
  • Einige Javascript-Bibliotheken sind so leistungsfähig und verwenden so einzigartige Muster, dass die Leute sie als separate technische Fachgebiete wahrnehmen. Jede zusätzliche Bibliothek, die Sie hinzufügen, kann Entwickler abschrecken, die sich nicht sicher fühlen, Code zu bearbeiten, der auf einem Framework basiert, mit dem sie nicht vertraut sind. Die Einstellung neuer Wartungsprogrammierer, die mit allen von Ihnen verwendeten Bibliotheken vertraut sind, kann schwierig werden.
  • Das Hinzufügen einer Bibliothek zu Ihrer Website erhöht die Ladezeiten, da der Benutzer die gesamte Bibliothek laden muss, auch wenn Sie nur einen kleinen Teil davon verwenden. In einigen gängigen Bibliotheken können Sie benutzerdefinierte Builds nur mit der von Ihnen benötigten Funktionalität herunterladen, aber selbst dann enthalten Sie normalerweise noch viel Code, der niemals ausgeführt wird (oder noch schlimmer: Code, der tut ausgeführt wird, aber macht nichts Nützliches, weil es nur Datenstrukturen für Funktionen vorbereitet, die Sie nicht verwenden).

Bevor Sie Ihrem Projekt eine weitere Abhängigkeit hinzufügen, um etwas aufzunehmen, das Sie genauso gut selbst schreiben können, führen Sie eine Kosten-Nutzen-Analyse durch.

4
Philipp

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 Möglichkeit kann darin bestehen, Teile der Bibliothek wiederzuverwenden, sofern die Lizenz dies zulässt.

In meinem Fachgebiet (numerische Software) kann eine Bibliothek beispielsweise feine Kernmodule und einige Spezialmodule 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 entwickle meine eigenen Spezialmodule unter Verwendung des Designs und des Codes der OSS-Module. Die schwierigsten algorithmischen Bits werden normalerweise von diesen wiederverwendet, wobei nur der Gerüstcode geändert wird. Ich kann auch einen Teil des Originalcodes bereinigen. Dies hat sich im Vergleich zur Entwicklung von Grund auf als gute Lernerfahrung und Zeitersparnis erwiesen.

1
esc_2_space

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 (veraltete Versionen natürlich), um die Sprachfunktionen hinzuzufügen sie wollen verwenden und dann haben die Arbeit für Sie erledigt.

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

0
Ewan

Bibliotheken und wann sie verwendet werden sollen, ist eine komplizierte Entscheidung.

Auf der einen Seite haben Sie gut getestete, fast standardmäßige Dinge (in meinem Bereich fällt beispielsweise FFTW in diese Kategorie oder so etwas wie libsndfile), die allgemein als nur funktionierend anerkannt sind und seit 20 Jahren Standard sind Jeder benutzt.

Auf der anderen Seite haben Sie zufällige Sachen von Github, ohne Testsuite und nur etwa 1 Betreuer. Warum sollten Sie sich im Allgemeinen die Mühe machen?

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 diese um), und denke ich, dass ich das Debuggen eines anderen Bibliothekscodes beenden werde ? Ein guter Proxy für die zweite Frage ist "Gibt es eine automatisierte Testsuite und wie sieht die Dokumentation aus?".

Ein wenig Debugging ist kein großes Problem, aber zu diesem Zeitpunkt beginnt der Bibliothekscode aus Wartungssicht mit meiner eigenen Codegröße zu zählen (mehr noch, 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, dass Frameworks in meiner (kleiner Kern, DSP-schwer) Welt eher nerven, besonders wenn Sie versuchen, mehr zusammenzuführen Wenn Sie etwas oder etwas außerhalb der Grenzen tun, sind Bibliotheken manchmal nützlich. Mir ist bewusst, dass dies in der Webentwicklerszene sehr unterschiedlich gesehen wird.

Am Ende des Tages ist es eine Entscheidung, die auf Geschmack und Erfahrung ankommt, und selbst die erfahrenen wählen manchmal schlecht aus, zumindest mit einer Bibliothek. Sie können sie jederzeit herausreißen und Ihre eigene Implementierung schreiben, wenn sie zu nervig wird.

Entscheidungen Entscheidungen....

0
Dan Mills