Soll ich als Anfängerprogrammierer lieber meine eigenen Bibliotheken als Bibliotheken von Drittanbietern erstellen?

12

Ist es für Anfänger in der Python-Programmierung eine gute Idee, eigene Bibliotheken zu erstellen und zu verstehen, bevor sie zu erweiterten Bibliotheken von Drittanbietern wechseln, die die von mir benötigten Funktionen enthalten?

Einige Projekte (zB Web-Frameworks wie Django) sind wahrscheinlich zu groß für diesen Ansatz. Andere Projekte (z. B. Web Crawler, Grafikbibliotheken, HTML-Parser) scheinen jedoch machbar zu sein.

Ich mache mir Sorgen, dass frühzeitiges Vertrauen in Bibliotheken von Drittanbietern mein Wachstum bremsen würde.

Hinweis: Diese Frage und diese Frage scheinen sich mehr auf erfahrene Programmierer zu konzentrieren, die sich wahrscheinlich mehr auf die Effizienz der Wiederverwendung konzentrieren als auf den Lernnutzen. Ich denke, meine Frage richtet sich an Anfänger.

MikeRand
quelle
5
"Nicht mehr als ein Bibliotheksintegrator, sondern ein Programmierer": Kunden möchten, dass Sie produktiv sind. Die Fähigkeit, vorhandene Bibliotheken zu evaluieren und zu integrieren, ist eine wichtige Fähigkeit, die Sie benötigen, um produktiv zu sein. Wenn es keine Bibliothek gibt, die Ihren Anforderungen entspricht, konzentrieren Sie sich auf die Lösung des von Ihrer Anwendung angesprochenen Geschäftsproblems
Hamish Smith,
2
Welche Unterscheidung treffen Sie zwischen "Bibliotheksintegrator" und "Programmierer"? In 30 Jahren - sogar bei der Herstellung von Embedded-Chip-Level-Device-Controllern - habe ich nie ohne Bibliotheken gearbeitet. Können Sie diesen Unterschied erklären?
S.Lott
Schlecht formuliert Bearbeitet haben.
MikeRand
Ich würde lieber einen Bibliotheksintegrator beauftragen. Warum sollten Sie sich auf das Wie konzentrieren, während Sie sich auf Funktionen konzentrieren könnten? Nachdem ich ein paar Dutzend neu erfundene Fahrräder gesehen habe, schaudere ich bei dem Gedanken, ein anderes zu sehen. Bibliotheksdesign ist harte Arbeit und ein Balanceakt. Ein typischer Software-Shop, der sich nicht auf Bibliotheksdesign spezialisiert hat, verfügt nicht über die richtigen Fähigkeiten, Ressourcen und die Geduld, um es richtig zu machen. Vorsicht vor Umschreibungen. Es ist besser, Code zu verwenden, der von anderen getestet wurde, als von vorne zu beginnen. Nur wenn es ein Vakuum gibt, sollte man erfinden, IMO.
Job

Antworten:

12

Dies ist immer ein Kompromiss.

Als Anfänger sollten Sie sich zwei Fragen stellen, wenn Sie überlegen, Code wiederzuverwenden oder das Vierkantrad neu zu erfinden:

  1. Werde ich mehr über das Problem erfahren, das ich lösen möchte, indem ich alles von Grund auf neu schreibe oder mich auf die Problemdomäne konzentriere und die Komplexität beiseite lege, die für das Problem, das mich interessiert, nicht kritisch ist?
  2. Ist es mir wichtiger, das vorliegende Problem zu lösen, oder ist es mir wichtiger, einige grundlegende Konzepte zu verstehen?

Wenn Sie Ihr Projekt nicht beenden müssen, können Sie bei komplexen Problemen, die andere bereits gelöst haben, die Räder drehen, weil Sie etwas lernen. Aber Sie werden wahrscheinlich zu etwas anderem übergehen, bevor Sie "fertig" sind, was für Sie von Bedeutung sein kann oder auch nicht. Andere Projekte werden schnell glänzend aussehen, wenn Sie sich auf eine komplexe Domäne stürzen, die einfach aussieht, bis Sie versuchen, sie selbst zu lösen.

Seien Sie nicht besessen davon, die Kontrolle aufzugeben, weil Sie sich der Denkweise eines anderen widersetzen. Konzentrieren Sie sich mehr auf das, was Sie erreichen wollen.

Wenn Sie einen HTML-Parser schreiben möchten, um die Funktionsweise von Parsern zu verstehen, sollten Sie diesen verwenden. Wenn Sie einen HTML-Parser schreiben möchten, um Benutzereingaben zu bereinigen oder zufällige HTML-Elemente zu transformieren, konzentrieren Sie sich wahrscheinlich auf das Falsche, da Sie wahrscheinlich mehr an der Anwendung des Parsings als an dem Parsing selbst interessiert sind . Wenn Sie Lust haben, einen HTML-Parser zu schreiben, weil Sie sich nicht die Zeit nehmen möchten, die Bibliothek eines anderen zu verstehen, verschwenden Sie wahrscheinlich Ihre Zeit, da zumindest in diesem Fall garantiert jemand anderes mehr Zeit darauf verwendet hat, herauszufinden, wie um dieses Problem effektiv zu lösen, als Sie haben. In wirklich trivialen Fällen können Sie Zeit sparen, indem Sie Code nicht wiederverwenden, sondern in komplexen Fällen, es sei denn, die Bibliothek, die Sie verwenden, ist zum Kotzen oder Ihre Fähigkeit, Dokumentation und Codebeispiele zu lesen, ist zum Kotzen.

Andererseits würde ich sagen, dass es sich lohnt, eine eigene Grafikbibliothek zu schreiben, da Sie sich mehr auf übertragbare, grundlegende Algorithmen und Datenstrukturen konzentrieren, die Sie auf andere Domänen anwenden können, selbst wenn Sie diese letztendlich verwenden jemand anderes Bibliothek, wenn Sie an diesen Problemen arbeiten.

JasonTrue
quelle
Fantastischer Rahmen zum Nachdenken über das Problem. Sehr geschätzt.
MikeRand
8

Die meisten Programmieranfänger unterschätzen die Komplexität eines Problems bei weitem. Dies führt zu vielen unangenehmen Situationen, aber ich werde mich auf eine konzentrieren: Sie entlassen viele Bibliotheken von Drittanbietern, weil sie "aufgebläht" oder "zu kompliziert" sind. Dann versuchen sie, ihren eigenen Code zu schreiben, um den gleichen Job zu erledigen, und machen ein komplettes Durcheinander, weil sie nicht mit allen Dingen gerechnet haben, mit denen sie fertig werden mussten.

Nehmen Sie das Webcrawlen und Parsen von HTML. Sie scheinen diesen Aufgaben ziemlich beiläufig gegenüberzustehen - was mich zu der Annahme veranlasst, dass Sie nie versucht haben, sie in einem sehr kleinen Maßstab zu erledigen. Hier ist nur eine kurze, nicht umfassende Liste der potenziellen Probleme, mit denen ein echter Webcrawler fertig werden muss:

  • Fehlerhaftes HTML.
  • Kodierungen mit mehreren Zeichen (die ganze Welt läuft nicht mit ASCII).
  • Links, die von JavaScript generiert oder geändert werden.
  • Links zu Multi-Gigabyte-Binärdateien.
  • Falsche Mime-Typen.
  • Absturz mitten in einer Crawl-Sitzung.
  • Teergruben.
  • SEO-Berater.
  • Microsoft.
Mike Baranczak
quelle
6

Ich mache mir Sorgen, dass frühzeitiges Vertrauen in Bibliotheken von Drittanbietern mein Wachstum bremsen und mich eher zu einem Bibliotheksintegrator machen als zu einem Programmierer.

Das ist falsch

Frühzeitiges Vertrauen in Bibliotheken von Drittanbietern zeigt, wie gute Bibliotheken funktionieren.

Vorzeitige Entwicklung ist immer Zeitverschwendung. Wenn Sie Ihre eigenen Bibliotheken schreiben, ohne die vorhandenen Bibliotheken sorgfältig zu studieren (dh zu nutzen), müssen Sie das Rad für den Rest Ihrer Karriere - schlimmerweise - neu erfinden.

Ich habe viele Stunden damit verbracht, diese Unordnung zu beseitigen.

S.Lott
quelle
Ich bin nicht sicher, ob ich dem vollkommen zustimme. Manchmal sind Bibliotheken von Drittanbietern schlecht geschrieben und können tatsächlich schlechte Gewohnheiten lehren. Wenn die zugrundeliegenden Algorithmen gut verstanden sind, ist es möglicherweise eine gute Idee, das Rad neu zu erfinden und es dann mit anderen Bibliotheken zu vergleichen, um festzustellen, wie gut oder schlecht Sie mit den anderen Bibliotheken mithalten. In beiden Fällen ist offensichtlich eine Form der Mentoring von großem Nutzen :)
Demian Brecht
Das heißt, es ist von Vorteil, vorhandene API zu studieren :)
Demian Brecht
2
@Demian Brecht: "Manchmal sind Bibliotheken von Drittanbietern schlecht geschrieben und können tatsächlich schlechte Gewohnheiten vermitteln." Auch wenn dies zutreffen könnte, werden die meisten Open-Source-Projekte von einer Benutzergemeinschaft stark überprüft, und schlechte Ideen widerstehen nicht der Weisheit der Masse. Ferner ist "schlecht geschrieben" ein Urteil, das kein n00b effektiv fällen kann.
S.Lott
@S.Lott: Gut gesagt (bezüglich: n00b) :) Und ich denke, Sie müssen nur vorsichtig sein, welche Bibliotheken von Drittanbietern Sie sich ansehen, da einige sehr kleine (wenn überhaupt) Communities haben. Das Stöbern in zufälligen Projekten auf Github kann beispielsweise dazu führen, dass Sie den falschen Weg einschlagen.
Demian Brecht
2
@Demian Brecht: Sie können kein Urteil entwickeln, bis Sie eine Vielzahl von Bibliotheken gesehen haben. Es gibt keine Möglichkeit, die Bibliotheken vorzufiltern, damit ein n00b verwendet werden kann. Es sind alles Bibliotheken oder keine Bibliotheken.
S.Lott
4

Dieser erste Satz ist für mich logischerweise sehr problematisch:

Ist es für Anfänger in der Python-Programmierung eine gute Idee, eigene Bibliotheken zu erstellen und zu verstehen, bevor sie zu erweiterten Bibliotheken von Drittanbietern wechseln, die die von mir benötigten Funktionen enthalten?

Wie kann man glauben , dass Sie effektiv schreiben erweitern (Ihr Wort) Funktionalität Bibliotheken als Anfänger , die als richtig, Funktion komplett und getestet , wie vorhandene Bibliotheken sein?

Hier wird nicht einmal die enorme Zeit erwähnt, die Sie für die Neuerfindung eines Rads aufwenden würden, das Sie als Anfänger nicht verstehen. Sie werden es irgendwann aufgeben, wenn Sie das Glück haben, zu bemerken, dass Sie über Ihrem Kopf sind und das lernen müssen Bibliothek trotzdem verlassen.

Nehmen Sie zum Beispiel das HTML-Parsen, Sie erwähnen dies als machbar. Es gibt keine Möglichkeit, einen besseren Job zu machen als Beautiful Soup als Anfänger. Schlicht und einfach, Sie werden scheitern. Die Dinge, die Sie für machbar halten, haben große Komplexitätsprobleme, die Sie nicht berücksichtigen. Sie kennen die Problemdomäne nicht detailliert genug, um die Komplexität zu verstehen. Sie sind zum Scheitern verurteilt.

Meine Meinung ist, dass Sie erfahren, was andere Menschen für Sie getan und bereits gelöst haben, bis Sie nichts finden, was Ihr Problem angeht.


quelle
1

Dies ist nur meine Meinung, aber ich würde vorschlagen, eigene Bibliotheken für ziemlich einfachen, wiederverwendbaren Code zu erstellen. Für komplexere Aufgaben können Sie Bibliotheken von Drittanbietern verwenden, die (hoffentlich!) Sorgfältig erstellt und getestet wurden. Das Erstellen einer robusten Bibliothek kann sehr zeitaufwändig sein, je nachdem, um was es sich handelt. Ich bin mir sicher, dass Sie schon durch das Erstellen Ihrer Anwendung viel Programmierpraxis erhalten!

Jon Onstott
quelle