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?)
code-quality
libraries
Billal Begueradj
quelle
quelle
Antworten:
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.
quelle
Bill Gates hat einmal gesagt:
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:
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!
quelle
(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.
quelle
Die Verwendung der richtigen Bibliotheken spart zwar viel Arbeit, birgt aber auch viele versteckte Kosten:
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.
quelle
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.
quelle
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.
quelle
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....
quelle