Gibt es konkrete Gründe, Bibliotheken und Code-Schnipsel nicht häufig zu verwenden? [geschlossen]

42

Insgesamt bin ich nun seit ungefähr 8 Jahren in der Programmierung und es scheint mir, dass ich mich immer mehr auf Open-Source-Bibliotheken und -Schnipsel verlasse (verdammt noch mal, GitHub!), Um "die Arbeit zu erledigen". Ich weiß, dass ich mit der Zeit eine eigene Implementierung schreiben könnte, aber ich konzentriere mich gerne auf das Gesamtdesign.

Ist das normal (keine Unternehmensumgebung)? Was könnte schief gehen, wenn meine "Programmierung" nichts anderes ist, als verschiedene Bibliotheken zusammenzukleben?

Ich weiß über "erfinde das Rad nicht neu" Bescheid, aber was passiert, wenn du kein einziges Rad mehr erfindest?

Henrik P. Hessel
quelle
3
Meinten Sie "Nicht- Unternehmensumfeld " oder ein Umfeld, in dem Menschen nicht kooperieren ?
Bryan Oakley
Ich dachte, der Grund, warum wir in Interfaces und abstrakten Klassen schreiben, ist, dass unsere Bibliotheken universeller, weniger abhängig, flexibler sind ...
IAbstrakter
1
Tatsächlich ist es so schlimm, dass der Gürtel des Vaters abfällt.
Thomas Eding
Denken Sie daran, Hommage zu zahlen und Kredit zu geben, wo Kredit fällig ist. Wenn Sie diesen Code jemals für sich beansprucht haben, dann The Belt definitiv
hanzolo
3
Nein, es macht dich nicht zu einem schlechten Programmierer, aber es macht dich auch nicht zu einem besseren Programmierer.

Antworten:

85

Bibliotheken nutzen, anstatt das Rad neu zu erfinden: Großartig! So sollte es jeder machen. Sie werden nicht dafür bezahlt, das zu tun, was Sie bereits getan haben.

Verwenden von Snippets: Solange Sie verstehen, was Sie kopieren und einfügen, und solange Sie die Zeit investieren, um alles konsistent zu machen (anstelle eines Patchworks aus verschiedenen Stilen und Ansätzen), ist daran nichts auszusetzen.

user281377
quelle
Das ist was ich dachte. Vielleicht sollte ich ein Open-Source-Projekt starten, um dieses Gefühl loszuwerden :)
Henrik P. Hessel
25
+1 von mir. Leute sollten niemals Code verwenden, den sie nicht verstehen. Das gilt für Snippets und Bibliotheken.
Tim Post
5
In Bezug auf Snippets schreibe ich den Code immer selbst um, damit ich sicher bin, dass ich weiß, wie es funktioniert. Bibliotheken schreibe ich nie um, es sei denn, es funktioniert aus irgendeinem Grund nicht für mich.
Rei Miyasaka
12
Tim: In Bezug auf Bibliotheken muss ich nicht verstehen, wie es etwas macht, solange ich weiß, was es tut. Beispielsweise verwenden viele von uns Crypto-Bibliotheken. Ich weiß nicht, wie AES funktioniert, aber ich weiß, was es tut und wann ich es verwenden soll.
user281377
@Rei Miyasaka Es scheint, dass Snippets oft von geringerer Qualität sind als eine eigenständige Bibliothek. Ich selbst musste einige Teile der von mir verwendeten Schnipsel umgestalten.
Henrik P. Hessel
24

gute Programmierer schreiben guten Code; Großartige Programmierer stehlen großartigen Code.

dan_waterworth
quelle
+1 für die Linie. Ist es originell?
apoorv020
Ich wünschte, nein, es ist ein seltsames Sprichwort.
Dan_waterworth
Ich bin auf meinem iPhone, aber ich denke, es ist ein Zitat von Pablo Picasso (Programmierer durch Künstler ersetzen)
Henrik P. Hessel
21
Sagte Picasso Good artists copy, Great artists steal.
dan_waterworth
3
Großartiges Zitat. Denke ich werde stehlen ^ H ^ H ^ H ^ H ^ H wiederverwenden.
Wonko the Sane
24

Codierung ist in der Tat die niedrigste Programmierebene. Je höher die Abstraktionsebene ist, desto besser sind Sie Programmierer. Die Auswahl der richtigen Bibliotheken (nicht notwendigerweise Open-Source-Bibliotheken), die ordnungsgemäße Verknüpfung der Bibliotheken und die Pflege des Konstrukts sind viel schwieriger, aber effizienter und zeit- und kosteneffizienter als das Schreiben aller Daten selbst.

Eugene Mayevski 'Allied Bits
quelle
13

Ich liebe es, meine eigenen Bibliotheken zu schreiben. Ich liebe es auch, meine Projekte pünktlich fertig zu stellen. Ich denke, im Laufe der Zeit bauen die meisten guten Programmierer eine Sammlung nützlicher und wiederverwendbarer Teile auf. Ich weiß nichts über dich, aber ich habe jedes Mal ein gutes Gefühl, wenn ich eine Bibliothek benutze, die ich vor fünf Jahren geschrieben habe.

Es ist absolut nichts falsch daran, Bibliothekscode zu verwenden, der im Laufe der Zeit getestet und geliebt wurde. Sie wissen, wie es funktioniert, können sich auf seine Komplexität verlassen und es schnell umsetzen.

Davon abgesehen gehe ich davon aus, dass Sie den Code in der Bibliothek verstehen. Ich gehe davon aus, dass Sie, wenn Sie genügend Zeit haben, etwas von ähnlicher Qualität implementieren könnten.

Ich kenne einige wirklich gute C-Programmierer, die die Standard-C-Bibliothek implementieren könnten , von denen einige nur eine Lern- / Schärfungsübung haben. Der größte Spaß, den ich in meiner Freizeit hatte, war die Arbeit an der C-Bibliothek in HelenOS.

Es ist also nichts Falsches an der Verwendung von Bibliothekscode, solange Sie weiterhin neugierig sind und lernen. Es versteht sich von selbst, dass Sie keinen Code verwenden sollten, den Sie nicht verstehen, es sei denn, Sie versuchen zu verstehen, wie er funktioniert.

Tim Post
quelle
Du hast meine Abneigung gegen jQuery ziemlich genau beschrieben, +1.
aaaaaaaaaaa
5

Ich werde in dieser Frage besser vorgehen als einige andere: Ich glaube nicht einmal, dass der "Client" -Entwickler einer Bibliothek den Code in dieser Bibliothek "verstehen" muss.

Ich bin ein (im Vergleich zu einigen) relativ neuer iPhone-Entwickler. Es gibt VIELE Bibliotheken, die ich jeden Tag benutze und die ich selbst niemals hätte erstellen können, und deren Code weit über meinem Kopf liegt. Es spielt keine Rolle im Geringsten BEREITGESTELLT:

1) Ich verstehe die Schnittstelle zu diesen Bibliotheken voll und ganz (ich bin ein ASIHTTPRequest-Ninja!)
2) Ich wähle Bibliotheken aus, die im Allgemeinen weit verbreitet sind, sodass ich sicher sein kann, dass sie gut durchgesehen und auf Probleme untersucht wurden (zB: ASIHTTP, Stig Brautaset JSON - Bibliothek, Facebook obj-c - Bibliothek, etc.)
3) Failing # 2, dann ist es einfach genug , dass ich konnte mich durch sie wählen und finden / fix / fertigen alles , dass Bedürfnisse zu finden / Fixier / Customizing .

Ich wette, dass # 2 der umstrittene Teil davon sein wird. Tatsache ist, ich verlasse mich auf die Open Source Community, eine Community von Entwicklern, die sicherlich erfahrener und mit größerer Wahrscheinlichkeit schlauer ist als ich. Aber genau darum geht es bei Open Source. Hier bitteschön.

Dan Ray
quelle
3

Ich möchte eine Warnung für die Verwendung von Bibliotheken einreichen. Als häufiger Benutzer von wissenschaftlichen Bibliotheken in Perl an R (und einigen in Java) musste ich mich oft in eine Bibliothek hacken, um hässliche Gemeinkosten zu vermeiden. Die Verwendung von Bibliotheken ist großartig, aber immer mehr Bibliotheken sind selbst von anderen Bibliotheken abhängig, was eine dritte Bibliothek aufruft, die die Standardbibliothek verwendet, um eine ziemlich häufige Aufgabe zu erledigen. Und jeder Schritt im Prozess erfordert einige Überprüfungen der Eingabe und Ausgabe. Viele dieser Überprüfungen sind völlig überflüssig, belasten jedoch die Anwendung. Und wenn es in einer Schleife verwendet wird, kann es anfangen, ziemlich schwer zu wiegen.

Darüber hinaus können Sie nicht sicher sein, dass Bibliotheken immer kompatibel zu früheren Versionen sind oder keine Fehler enthalten. Tatsächlich enthalten alle Bibliotheken einige Fehler, das ist die Natur des Codes. Je abhängiger Sie von Bibliotheken sind, desto mehr potenzielle Fehler geben Sie in Ihren Code ein. Und diese Fehler können Sie nicht so einfach selbst beheben, ohne sich erneut in die Bibliotheken zu hacken.

Die Verwendung von Bibliotheken ist eine sehr kluge Entscheidung, aber genau dann, wenn Sie die Bibliotheken und ihr Verhalten gut kennen.

Ich weiß, ich denke, Verletzungen und Computer sind billig, aber immer noch. Nicht zu denken kann mehr schaden.

Joris Meys
quelle
3

Normalerweise ist das Kopieren großer Mengen an Quellcode eine schlechte Praxis. Wenn der Code für eine andere Anwendung in Ihrem Unternehmen entwickelt wurde, sollten Sie ihn wiederverwenden, indem Sie ihn in eine Bibliothek extrahieren , die von beiden Anwendungen verwendet wird. Sie sollten den Code nicht kopieren. Durch Kopieren des Codes werden Sie gezwungen, zwei Kopien anstelle einer gemeinsamen Kopie zu führen.

Kevin Cline
quelle
3

Die Wiederverwendung von Code ist eine sehr gute Idee. Es reduziert die Redundanz und fördert die Wartbarkeit.

Der Titel weist darauf hin, dass Sie den Code als Bibliothek verwenden, der Text Ihrer Frage impliziert jedoch, dass Sie den Quellcode möglicherweise in ein neues Projekt kopieren. Ich würde so oft wie möglich den Code anderer Entwickler als Bibliothek verwenden.

Es liegt ein Problem vor, wenn der Code fehlerhaft oder irgendwie kaputt ist oder auf einem Modell basiert, das nicht sehr gut zu Ihrer Anwendung passt. In diesem Fall ist es möglicherweise einfacher, den Code ganz oder teilweise zu entfernen und von vorne zu beginnen, als zu versuchen, zu verstehen, warum er auf eine bestimmte Weise geschrieben wurde. Bewahren Sie den anderen Code als Referenz auf. Möglicherweise stoßen Sie auf ein Problem, dessen Lösung Sie nicht genau wissen. Wahrscheinlich ist der andere Entwickler auf dasselbe Problem gestoßen, und es lohnt sich zu sehen, wie sie es gelöst haben.

pswg
quelle
Da hast du mich aber erwischt. Ich beziehe mich auch auf das Kopieren vieler Codezeilen anderer (nicht Bibliotheken), da dies in meinem Fall legal ist. Was denkst du?
Arman
1
@ Arman Es ist immer noch eine gute Idee. Aus Wartungssicht ist es nicht so gut, denn wenn der ursprüngliche Entwickler einen Fehler in seinem Code behebt, ist er immer noch in Ihrem vorhanden. Es ist immer noch besser als gar nichts, da zumindest der Code in beiden Projekten ziemlich ähnlich ist und Sie die Fehlerbehebung separat anwenden können, ohne so viel tun zu müssen.
Pswg
: Eine letzte Frage: So wie Mason es gesagt hat, wenn ich zum Beispiel herausgefunden habe, dass Ihre 2500 Codezeilen (ich betone wieder nicht Bibliotheken) ein wenig nützlich sind, um meine Arbeit zu beginnen, und Sie lassen mich sie kopieren Denkst du, es ist gut für mich? Ist ethisch?
Arman
@Arman Wenn es legal ist, ist es wahrscheinlich auch ethisch. Wenn es von einem Entwickler unter derselben Organisation geschrieben wurde, besitzt die Organisation im Allgemeinen den Code und Sie haben das Recht, ihn zu verwenden (gemäß den Organisationsrichtlinien). Wenn dies unter einer anderen Organisation geschrieben wurde, müssen Sie die Genehmigung dieser Organisation einholen. Wenn der Code nicht durch eine Lizenz abgedeckt ist, ist es dem ursprünglichen Entwickler im Allgemeinen egal, wie Sie ihn verwenden, aber ich schreibe den ursprünglichen Entwickler immer in prominenten Codekommentaren (wenn möglich mit einem Link).
pswg
4
Idealerweise sollten Sie auch verstehen, wie der kopierte Code funktioniert.
Mike Partridge
1

Das ist im Allgemeinen eine gute Idee, solange keine rechtlichen Probleme bestehen.

Nehmen Sie sich jedoch die Zeit, um zu verstehen, was die Bibliothek tut und wie sie es tut. Die Verwendung einer "magischen" Bibliothek, um sich um Dinge zu kümmern, die Sie nicht verstehen, ist eine gute Möglichkeit, einen Teil davon in die Luft zu jagen, weil Sie es falsch angewendet haben, und dann haben Sie keine Ahnung, wie Sie es beheben können.

Mason Wheeler
quelle
1
Ich frage mich, ob das "Kopieren und Einfügen" von hundert Codezeilen, die von meinem großzügigen Programmierkollegen erstellt wurden, immer noch ethisch vertretbar ist.
Arman
2
@Arman: Frag ihn mal.
Mason Wheeler
1
Wenn die Lizenz es erlaubt, warum wäre es nicht ethisch? Wenn Sie versuchen, einen Job zu erledigen, und ein Rad bereits erfunden und kostenlos zur Verfügung gestellt wurde, wäre es falsch (dh unethisch), wenn Sie eine Minute Ihrer Zeit damit verschwenden, es neu zu erfinden. Wenn Sie lernen müssen, ein Rad neu zu erfinden, ist das etwas völlig anderes.
Darius X.
1

Die rechtliche Wiederverwendung von Code hat fast keine Nachteile und zwei große Vorteile:

  1. Es erledigt die Arbeit. Dies ist umso wichtiger für die berufliche Entwicklung. Letztendlich haben Sie einen gut bezahlten Job, weil Sie wissen, wie Sie Dinge bewirken können, die die meisten Nicht-Programmierer überraschen würden. Die Wiederverwendung ermöglicht es Ihnen, dieses Ziel schneller zu erreichen, sodass Sie in Ihrer Arbeit wertvoller werden.
  2. Du lernst Zeug. Dies ist der wichtigere Grund für die Selbstverbesserung. Es gibt keinen besseren Weg, um die Codierung zu verbessern, als guten Code zu lesen, der von anderen geschrieben wurde. Sogar schlechter Code, der von anderen geschrieben wurde, bringt Ihnen normalerweise etwas bei! Und es gibt keinen besseren Weg zu verstehen, wie eine Bibliothek, API, Sprache oder Domain funktioniert, als Lösungen zu lesen und zu verbessern, die bereits von anderen geschrieben wurden. Beiden Dinge in der Regel passieren , wenn Sie die Wiederverwendung von Code vorhanden, da keine bereits bestehende Lösung wird jemals tun recht , was Sie brauchen - und die darauf folgende mit der Quelle Bastelei ist , wo das Wissen Schub kommt.
Kilian Foth
quelle
Das ist wirklich mein Ziel, zu lernen. Im Moment ist es mehr wert, als mein Projekt zu beenden. Das ist der Grund, warum ich mich schlecht fühle, wenn ich versuche, jemanden mit nur wenig Aufwand zum Arbeiten zu bringen (nicht nur mit Bezug auf Bibliotheken).
Arman
1

Sind Sie ein schlechter Programmierer, wenn Sie viele Bibliotheken und Codefragmente verwenden?

Wenn Sie Bibliotheken und Codefragmente an geeigneten Stellen verwenden, bedeutet "Nein" nicht, dass Sie ein schlechter Programmierer sind. Es bedeutet, dass Sie ein kluger Programmierer sind, der die Weisheit anderer an geeigneten Stellen anwenden kann.

Jedoch...

Es braucht Zeit , zu finden Bibliotheken und Code - Snippets, also wenn Sie nicht schreiben können Code auf eigene Faust, und Sie müssen Stunden verbringen Bibliotheken und Code - Schnipsel finden triviale Aufgaben zu implementieren, dann ‚Ja‘ , sind Sie ein schlechter Programmierer.

Jim G.
quelle
0

Nein. Programmierer sollten Bibliotheken verwenden, die es bereits gibt. Das Rad nicht neu erfinden. Wenn Sie eine bessere Methode haben, können Sie sich dafür entscheiden, was Sie sonst wirklich tun, wenn Sie den gleichen Code schreiben. Das einzige, was Sie wissen sollten, ist, was der Code ist (und nur, wenn es darauf ankommt).


quelle
0

Zusätzlich zu den Gründen in den anderen Antworten kann die Nichtverwendung des Codes (sofern er für Ihr Problem gut geeignet ist) als unethisch angesehen werden, weil:

  1. Möglicherweise verschwenden Sie absichtlich Zeit Ihres Arbeitgebers ODER
  2. Möglicherweise liefern Sie absichtlich ein geringeres Produkt aus

Denken Sie daran, beide sind im Voraus schwer zu bestimmen.

Schauen Sie sich auch Not Invented Here an , das allgemein als Anit-Pattern bezeichnet wird.

Zachary Yates
quelle
0

Erlauben Sie zum Abschluss ein Gegenargument: http://web.archive.org/web/20150326134617/https://michaelochurch.wordpress.com/2015/03/25/never-invent-here-the-even-worse -geschwister-von-hier-nicht-erfunden /

eine Mentalität, die ich "Never Invent Here" (NeIH) nenne. Aufgrund dieser Mentalität werden externe Assets überbewertet und oft implizit als vertrauenswürdig eingestuft, sodass Ingenieure mehr Zeit für die Anpassung an die Macken von Standard-Assets und weniger Zeit für den Aufbau eigener Assets aufwenden müssen.

Es gibt immer ein Gleichgewicht.

Dimitrios Mistriotis
quelle
-2

Ich benutze keine Bibliotheken, es sei denn, dies ist absolut notwendig. Abhängigkeiten begrenzen die Portabilität und Lebensdauer. Ich habe 34 Jahre Erfahrung in der Softwareentwicklung und möchte, dass mindestens eines meiner Programme länger als 3 Jahre läuft, ohne durch Erosion (Veränderung) zerstört zu werden.

COM (Component Object Model), die Antwort vor 17 Jahren, theoretisch großartig, in der Praxis fragwürdig, wiederverwendbare Komponenten nicht wirklich, ich werde nur die sehr grundlegenden Komponenten verwenden und nur, wenn ich muss.

APIs und SDKs verwenden nicht viel. Wenn ich die Anzahl der Codezeilen, die ich tatsächlich aus einer Bibliothek verwende, aufspalte, die Zeit, die ich damit verbringe, sie zum Arbeiten zu bringen, im Gegensatz zum Schreiben, denke ich, dass es eine Wäsche ist. Ich habe die Verwendung von SDKs komplett eingestellt, der Overhead ist extrem.

Frameworks: Zend, Silverlight, WCF, .NET, die geschichteten Systeme, ja, sie können die anfängliche Entwicklung beschleunigen, aber wenn ich an ihre Grenzen stoße, lohnt sich die Zeit, die ich für die Behebung der Risse aufgewendet habe, einfach nicht. Wie alt sind sie und sind sie unempfindlich gegen Erosion?

Ich bin nur mit meinen Bibliotheken zu JavaScript und HTML gegangen. Ich habe JavaScript reduziert, indem ich nur die gebräuchlichsten Anweisungstypen verwendet habe. Ich hoffe, dass ich in 10 Jahren etwas schreiben kann, das Bestand hat.


quelle
Ein Teil dieses Problems sind nicht so sehr die Bibliotheken, sondern die fortwährende technologische Abwanderung von Sprachen und Programmierwerkzeugen, was bedeutet, dass Sie neue Bibliotheken in der neuen Technologie suchen müssen, um das gleiche alte zu tun.
gbjbaanb
-2

Es hängt alles ab. Wenn Sie ein Spiel programmieren, ist es unumgänglich, eine Bibliothek (z. B. Allegro) zu verwenden, aber Sie können nicht wirklich als Programmierer betrachtet werden, wenn Sie den Code anderer Leute kopieren, stehlen oder ausleihen. Ich sage, das Rad nicht neu zu erfinden, sondern zu einem vernünftigen Punkt. Machen Sie nicht Ihr gesamtes Programm aus Ausschnitten, die andere Leute geschrieben haben. Setzen Sie sich an Ihren Computer und machen Sie es selbst ... hören Sie auf, Code zu stehlen. Die Leute sind heutzutage zu faul geworden und kopieren und fügen sie einfach ein.

Jadzia
quelle