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?)
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.
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:
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!
(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.
Die Verwendung der richtigen Bibliotheken kann Ihnen viel Arbeit ersparen, birgt aber auch viele versteckte Kosten:
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.
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.
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.
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....