Ich stoße ständig auf diesen Ausdruck "erfinde das Rad nicht neu" oder "erfinde das Rad nie neu", wenn ich Fragen zu SO stelle. Sie weisen Sie an, einige Frameworks oder vorhandene Pakete zu verwenden. Ich weiß, woher diese Einstellung kommt, da es unklug ist, Zeit mit etwas zu verschwenden, das andere bereits gelöst haben. Oder ist es das so?
Als Student stelle ich fest, dass ich durch die Verwendung von Code, den andere zur Lösung meines Problems geschrieben haben, nicht so viel lernen kann, wie ich möchte, und dass ich weniger Einsicht erhalte. Und manchmal denke ich, dass diese Formulierung hauptsächlich für Programmierer gedacht ist, die mit Terminen konfrontiert sind, und nicht für Studenten wie mich.
Ist es so schlimm, das Rad neu zu erfinden? Vielleicht denke ich es falsch? Vielleicht kann ich es vermeiden, das Rad neu zu erfinden und gleichzeitig viel zu lernen?
quelle
Antworten:
Ich denke, Sie machen einen guten Punkt. Die meisten Programmierer auf dieser Website arbeiten wahrscheinlich als Profis, deren Ziel es ist, qualitativ hochwertige Software so schnell wie möglich zu erstellen. Die Neuerfindung des Rades scheitert an diesem Ziel in zweierlei Hinsicht.
Das heißt, in einem akademischen Umfeld ist das Ziel zu lernen , keine Software mit kleinem Budget zu liefern. Ein Rad neu zu erfinden, um zu verstehen, wie die Speichen oder die Achse funktionieren, ist ein guter Weg, um dieses Ziel zu erreichen. Aus diesem Grund enthalten viele Programmierlehrpläne eine Klasse zum Erstellen von Compilern, wenn nur sehr wenige arbeitende Programmierer Grund dazu haben, dies zu tun.
quelle
Die Antwort hängt stark vom Kontext ab. Wenn Sie mehr über Datenstrukturen erfahren möchten, indem Sie versuchen, eine Hash-Tabelle zu implementieren, ist "das Rad neu zu erfinden" das Beste, was Sie tun können. Wenn Sie lernen, wie man Compiler schreibt und eine Symboltabelle benötigt, ist es reine Zeitverschwendung, eine eigene Hash-Map zu implementieren, anstatt eine aus der Standardbibliothek wiederzuverwenden.
quelle
Als Student, würde ich erwarten , dass Sie Ihre Programmierung Ausbildung beginnen , indem zunächst ein Kopieren Rad oder zwei mit zu beginnen, dann zu modifizieren Lernrad zu sehen , wie sie funktionieren, und alle Einschränkungen zu verstehen. Später können Sie sogar ein brandneues Rad erstellen, um zu sehen, ob Sie das Design verbessern können, oder um Ihrem Kursleiter zu zeigen, wie Sie die Konzepte verstehen.
Als berufstätiger Fachmann würde ich jedoch erwarten, dass Sie gelernt haben, welches Rad zur Lösung eines bestimmten Problems zu verwenden ist und wann es möglicherweise angebracht ist, ein vorhandenes Rad zu modifizieren , wenn es Ihr Problem nur teilweise löst. Wenn Sie nirgendwo ein Rad finden können, haben Sie vielleicht eine Marktlücke identifiziert oder sind nicht weit genug gekommen, und Sie müssten genug Erfahrung haben, um zu wissen, wann es angebracht wäre, ein brandneues Rad für Sie zu entwickeln besitzen.
Die Frage, wann es angebracht ist, eine Lösung neu zu erfinden, ist komplex, und es erfordert Zeit und Erfahrung, um zu lernen, wann es besser sein könnte, eine brandneue Version von etwas zu erstellen, das bereits zuvor getan wurde. Wenn Sie nur für kurze Zeit entwickelt haben, ist es besser, einfach eine vorhandene Lösung zu verwenden und Ihre Mentoren zu bitten, Optionen vorzuschlagen. Wenn Sie enge Termine und große Unsicherheiten in einem Projekt haben, kann die Verwendung vorhandener Daten eine enorme Zeitersparnis bedeuten und ist immer Ihre erste Wahl. Sie können später jederzeit andere Lösungen verwenden, wenn dies angemessen ist, auch wenn dies bedeutet, dass Sie irgendwann zurückkehren, um Ihr Rad neu zu erfinden .
quelle
Als Lehrer oder Programmierer kämpfe ich ständig mit der anderen Seite des Problems: Wann fordere ich die Schüler auf, das Rad neu zu erfinden?
Nehmen Sie die folgenden einfachen Situationen: Wir untersuchen den Sortieralgorithmus, und ich setze Aufgaben, um ein Programm zu schreiben, das einige Daten sortiert. oder arbeiten an Datumsfunktionen, und ich bitte um einen Kalender.
Für beide stehen unzählige vorgefertigte Bibliotheken und Funktionen zur Verfügung. Aber ich möchte, dass die Schüler sie meiden und eine eigene Version eines Sortieralgorithmus oder eines Kalenders entwickeln.
Nehmen wir nun die andere: Ich habe eine Aufgabe festgelegt, um eine einfache Anwendung zum Beispiel zum Planen von Terminen zu schreiben. Dies erfordert wahrscheinlich eine Sortierung, einen Kalender und vieles mehr. Dieses Mal gilt "erfinde das Rad nicht neu": Ich möchte nicht, dass Schüler mit gelösten Problemen kämpfen, sondern stattdessen vorhandene Funktionen zusammenstellen, um ein Ergebnis zu erzielen.
Meine Schwierigkeit besteht darin, Sie zu bitten, das Vorhandene neu zu erschaffen, was Sie zum Lernen bringt, und den Vorteil von ausgetretenen Problemen mit bekannten Schwierigkeiten zu haben, die ich verwenden kann, um Sie zum Üben des Handwerks zu bewegen, und wie viel ich setzen sollte Sie in einer realen Umgebung, in der Räder nicht neu erfunden werden?
Um Ihre Frage direkter zu beantworten, zwei Vorschläge:
quelle
Übung Ich bezweifle, dass die ersten 1000 Codezeilen, die jemand schreibt, sehr einzigartig sind.
Erweitern Sie Ihr Toolset Die Verwendung eines Frameworks hat mehr Vorteile, wenn Sie verstehen, was es tut (fast bis zu dem Punkt, an dem Sie es selbst tun können.), Sodass Sie wissen, wie Sie es anwenden.
Die "Räder" verstehen Die Verwendung eines schlecht gebauten und abgenutzten Rades oder eines Rades, das nicht passt, ist keine Entschuldigung dafür, blind an dieser Faustregel festzuhalten. Möglicherweise fehlt Ihnen die Zeit, die Finanzierung und das Fachwissen, und Sie können die Reise beenden.
Es gibt nur wenige Absolute .
quelle
Studenten haben kein Geldbudget, um Aufträge abzuschließen, aber es gibt Termine, die berücksichtigt werden müssen.
Als jemand, der bis vor kurzem Student war, denke ich, dass das Ausmaß der Neuerfindung der Räder davon abhängt, für welche Klasse Sie den Auftrag ausführen. Sie möchten keine eigene Socket-Bibliothek für eine Webentwicklungs- und Design-Klasse schreiben (wenn Sie dies tun und die Aufgabe rechtzeitig erledigen können , was tun Sie, um eine Klasse so einfach zu gestalten?), Aber Sie werden vermisst Sehr viel, wenn es eine Aufgabe für eine Netzwerkklasse war. Natürlich berücksichtigen Professoren diese Dinge normalerweise, wenn sie Aufgaben erstellen, sodass Sie meistens Arbeiten ausführen, die mit der Klasse zusammenhängen. Manchmal ist es jedoch auch wichtig zu wissen, was Sie nicht selbst schreiben sollten .
Das heißt, wenn Sie die Schule verlassen, ist es schwierig, die Zeit zu finden, um Dinge zu bauen, die bereits existieren. Ergreifen Sie jede Gelegenheit, wenn Sie können, während Sie noch in der Schule sind.
Wenn Sie das Brush-Off "Bibliothek X / Framework Y verwenden" für SO erhalten, stellen Sie Ihrer Frage das Präfix "Ich schreibe X selbst, um mehr darüber zu erfahren".
quelle
Wenn Sie keine festgelegte Frist für Ihr Projekt haben, ist es besser, das Rad neu zu erfinden. Wenn Sie keinen Job haben oder nur Programmieren lernen und kein Geld verdienen möchten, was bringt es, wenn Sie Verknüpfungen verwenden, die Sie nicht zu einem besseren Programmierer machen und die Ihr Projekt lediglich beschleunigen? Obwohl dies zutrifft, ist es auf jeden Fall eine gute Fähigkeit, mit Bibliotheken, Frameworks und dem Code anderer Leute umzugehen.
quelle
Im wirklichen Leben wird das Rad immer wieder neu erfunden. Wenn wir nach den Gründen suchen, finden wir möglicherweise Erkenntnisse darüber, wann wir das Rad in der Programmierung neu erfinden müssen.
Seit der sumerischen Zeit hat sich vieles geändert:
Wie überträgt sich das auf die Software-Welt? Gut,
quelle
Ich bin ein frisch gebildeter Student. In der Schule "lernten" wir asp.net und C #, während der zweijährigen Ausbildung haben wir nie versucht, ein eigenes E-Mail-System, Anmeldesystem oder CMS zu erstellen. Alles wurde einfach per Drag & Drop in die Entwurfsansicht verschoben .
Wir haben 102 Studenten gestartet, 23 haben abgeschlossen. 4 Leute haben eine Arbeit. Der Grund ?: Diese 4 Leute (einschließlich ich) wussten, wie man programmiert, bevor wir mit der Ausbildung begannen.
Der Rest der Leute ist verloren. Weil wir das Rad nie neu erfunden haben. Wir haben nie erfahren, wie der Code tatsächlich funktioniert. Es ist ziemlich einfach, ein vollständiges Anmeldesystem mit Benutzerverwaltung zu erstellen - aber die Studenten aus meiner Ausbildung wissen nicht, wie sie das machen sollen. Weil sie nicht wissen, wie ein Anmeldesystem tatsächlich funktioniert.
Ich bin traurig, dass irgendwann tatsächlich 2 Jahre vergeudet wurden, ohne etwas zu lernen. - Ich wünsche mir, dass Lehrer auf der ganzen Welt sagen: Ja, wir wissen, dass es Frameworks gibt, in denen der Code existiert. Sie können sie im wirklichen Leben verwenden. Aber in dieser Ausbildung lernen Sie, wie man programmiert.
Viele Programmierausbildungen sind sehr kurz, daher müssen die Ausbildungen in dieser Zeit viele Dinge abdecken. Ich denke, es wäre besser, die Liste der Dinge zu halbieren und mehr Zeit für das Programmieren aufzuwenden. Menschen können eine neue Art von Rad erfinden, wenn sie wissen, wie man ein normales Rad baut. Die Leute sind nicht dumm, wenn sie ein wenig wissen, aber man kann einen Mann, der nichts über Autos weiß, nicht bitten, ein Auto zu bauen. Aber einen Mann zu fragen, der weiß, wie man ein Fahrrad baut, wäre viel einfacher mit dem Auto tatsächlich bauen.
quelle
Es hängt wirklich davon ab, was Sie tun. Wenn Sie versuchen, Räder zu verstehen, ist es eine gute Idee, sie selbst neu zu erfinden. Wenn Sie jedoch versuchen, Autos zu verstehen, ist es im Allgemeinen verschwenderisch und ablenkend, das Rad oder die Verbrennungsmotoren neu zu erfinden.
Wenn Sie beispielsweise wissen möchten, wie ein Volltextsuchindex funktioniert, sollten Sie versuchen, einen eigenen Index zu erstellen. Wenn Sie versuchen, eine Anwendung für die Dokumentenverwaltung zu erstellen, ist es besser, eine vorhandene Bibliothek wiederzuverwenden, da der größte Teil Ihrer Arbeit darin besteht, die Anwendungsarchitektur und die Benutzererfahrung gleichzeitig zu verbessern.
quelle
Ja, es ist angebracht, den Schülern zu sagen, dass sie das Rad nicht neu erfinden sollen. Es muss jedoch klar sein, was es für einen Schüler bedeutet: Schreiben Sie, was für die Aufgabe von Belang ist. Es bedeutet nicht, dass eine Bubblesort-Anweisung erstellt, aus Wikipedia kopiert oder array.sort oder Äquivalente verwendet werden sollen, sofern Ihr Framework oder Ihre Sprache dies vorsieht. Aber nachdem Sie sich mit den verschiedenen Sortieralgorithmen befasst haben, Ihre eigene Bubblesort- und Quicksort-Funktion geschrieben haben, müssen Sie sie nicht für jede neue Aufgabe neu schreiben. Verwenden Sie entweder die eingebaute Sortierung oder das, was Sie geschrieben haben, und wiederholen Sie nicht die alte Aufgabe .
Das Rad neu zu erfinden bedeutet, keine Zeit zu verschwenden, was für Studenten genauso gilt wie für Profis - der Unterschied liegt in den Zielen. Die Schüler sollten lernen, also ist etwas, das ihr Verständnis nicht fördert, eine Zeitverschwendung. Nachdem Sie ein Bubblesort geschrieben haben, wissen Sie, was es tut, und warum Sie es nicht auf einem großen Set anwenden möchten. und es immer wieder neu zu schreiben, ist Zeitverschwendung. Sie werden beim 25. Umschreiben nichts Neues lernen.
Für Studenten bedeutet dies nicht, dass Sie nicht schreiben, was andere geschrieben haben. Es bedeutet, dass Sie nicht wiederholen, was Sie bereits beherrschen. Diese Zeit könnte besser für das verwendet werden, was Sie nicht beherrschen.
quelle
Es wurden viele Gedanken und Anstrengungen unternommen, um ein Rad zu schaffen. Der Rat ist, "das Rad nicht neu zu erfinden", aber Sie können fortfahren und das Rad rückentwickeln und verstehen, warum bestimmte Dinge so gemacht werden, wie sie gemacht werden. Danach können Sie versuchen, das Rad auf Ihre eigene Weise zu implementieren, was zu einem der drei logischen Enden führen kann.
Für mich sollte der Schüler das Rad nicht neu erfinden, sondern versuchen, es rückgängig zu machen und die Auswirkungen zu verstehen.
quelle
Ich würde sagen, dass es davon abhängt, ob Sie das Rad neu erfinden, um zu sehen, wie es funktioniert, oder ob Sie das Rad neu erfinden, um eine andere Aufgabe zu erfüllen. Natürlich gibt es Räder, die jeder Schüler mindestens einmal selbst umsetzen muss. Sie müssen wissen, wie einige elementare Datenstrukturen und Algorithmen funktionieren, um zu verstehen, wie sie sich auf die Leistung Ihres Codes auswirken oder welche unter verschiedenen Umständen verwendet werden sollen.
Stapel, Haufen, verknüpfte Listen, Bäume usw. sind auf jeden Fall die Investition in die Zeit wert, die für die einmalige Implementierung erforderlich ist. dann immer nach Gebrauch diejenigen, die durch das Framework zur Verfügung gestellt werden. Jeder, der ein jQuery-Plugin verwendet, sollte mindestens eines schreiben, aber Sie müssen nicht jeden anderen Typ eines Plugins schreiben, den Sie jemals verwenden werden. Ich würde sagen, es ist hilfreich, aber nicht notwendig, einen kleinen Prozess-Scheduler oder ein Mini-OS zu schreiben, damit Sie verstehen, was unter der Haube eines Computers vor sich geht. Sie müssen jedoch verstehen, wie Prozesse, Threads usw. funktionieren.
Sobald Sie über gute Kenntnisse verfügen, kann es auch wichtig (und unterhaltsam) sein, neue Strukturen / Algorithmen zu implementieren, um ein Gefühl für sie zu bekommen. Sofern es nicht Ihre Aufgabe ist oder Sie wirklich gut darin sind, würde ich weiterhin die vorhandenen in Ihrem Code verwenden.
quelle
Die Antwort hängt davon ab, ob Sie lernen oder erstellen möchten .
Wenn Lernen das Ziel ist, kann "das Rad neu erfinden" Ihnen einen besseren Einblick und ein besseres Verständnis geben als die Verwendung der vorhandenen Räder (Bibliotheksfunktionen).
Wenn es jedoch darum geht, ein kompliziertes Produkt zu erstellen, kann die Neuerfindung des Rads eine zeitaufwändige Übung sein, die bei der Erstellung des Produkts nur wenig hilft.
Wenn das Seelenziel jedoch Lernen ist, das mit genügend Zeit und Ausdauer ausgestattet ist, ist "das Rad neu erfinden" die beste Option, da es dabei hilft, jedes einzelne Merkmal anzupassen.
quelle
Nun, das hat zwei Aspekte.
Erstens, wenn Sie versuchen zu lernen, kann es nützlich sein, einige Dinge von Grund auf neu zu machen oder Schnittstellen niedrigerer Ebenen als nötig zu verwenden. Es muss jedoch noch ermittelt werden, was Sie gerade lernen: Wenn Sie das HTTP-Protokoll kennenlernen möchten, müssen Sie die Socket-Programmierung nicht selbst durchführen. Erfinden Sie nur die Dinge neu, von denen Sie lernen , und tun Sie dies nur, um sie wirklich zu erforschen und zu verstehen.
Aber - eine der wichtigsten Fähigkeiten eines professionellen Programmierers ist die Auswahl, das Erlernen und die Verwendung bereits vorhandener Software. Dies ist etwas, das Sie auch lernen müssen. Ein großer Teil der Fragen zu SO scheint von Personen zu kommen, die keine Dokumentation lesen können.
Schließlich beruht die Programmierung auf einer wesentlichen theoretischen Grundlage. Sie müssen beide praktischen Übungen zusammen mit dem Lesen anwenden, um die Theorie zu lernen.
quelle
Ich habe die gleiche Situation konfrontiert. Das liegt an der unterschiedlichen Wahrnehmung in Industrie und Wissenschaft.
Wenn Sie das Rad nicht "neu erfinden", können Sie in der Schule absolut nichts lernen oder verstehen, wie etwas funktioniert.
Während in einer Branche das Ziel ist, ein Produkt in kürzester Zeit und mit geringem Aufwand herauszubringen.
Persönlich gehe ich gerne in den Kaninchenbau und verabscheue die Industriephilosophie, aber so werden Geschäfte gemacht und man kann sich nicht beschweren.
quelle
Das Hacker Jargon Lexikon hat einen sehr guten Kommentar zur Neuerfindung des Rades :
Es kann also sinnvoll sein, das Rad neu zu erfinden, aber achten Sie darauf, dass Sie sich vorher oder nachher die Lösungen anderer ansehen.
quelle
Antwort A: Das Rad neu erfinden. Es vertieft Ihr Verständnis von Datenstrukturen und Algorithmen und erhöht die Wahrscheinlichkeit, dass Sie gute Sachen schreiben. Ich bin sicher, als Guido van Rossum mit Python anfing, wurde ihm gesagt, er solle das Rad nicht neu erfinden. Es gab bereits viele Sprachen. Warum Google schreiben, wenn es schon Yahoo! Wie wäre es mit Klirren? Lerne alles. Sei ein Riese. Lassen Sie sich nicht von den kleinen Leuten einschränken. Antwort B: Wenn ein Lehrer Ihnen sagt, was zu tun ist, geben Sie ihm, was er will, oder nur ein bisschen mehr, auch wenn es albern erscheint. Wenn du AUCH verrückt werden willst, mache eine erstaunliche Lösung und gib ihm einen Link dazu. Erfüllen Sie jedoch zunächst die gestellten Anforderungen, damit er zufrieden ist.
quelle
Wenn Sie Student sind und daher keine festgelegte Frist für Ihr Projekt haben, ist es besser, "das Rad neu zu erfinden". Wenn Sie jetzt nur programmieren, um zu lernen, wie man programmiert, und nicht, um Geld zu verdienen, warum sollten Sie Verknüpfungen verwenden, die Ihnen beim Lernen nicht helfen? Warum nicht auf die harte Tour? Aber wenn Sie ein arbeitender Programmierer werden, werden die Leute skeptisch sein, wenn Sie nicht wissen, wie man Frameworks oder Bibliotheken verwendet ...
quelle
Mach, was die Aufgabe / Frage / Prüfung von dir verlangt.
Vor Jahren war ich TA für einen C-Programmierkurs. Eine Prüfungsfrage lautete: 'Programm zum Kopieren einer Datei schreiben'. Mehrere Schüler stellten dieselbe Art von Frage: Können sie einen Prozess erzeugen und den OS-Befehl cp ausführen?
Wir fragten sie zurück: "Kopiert Ihr Programm die Datei?"
Die Prüfungsfrage forderte sie auf, Code zu schreiben, um eine Datei zu kopieren. Wenn die Antwort keinen C-Code hatte, der die Datei kopierte (z. B. Eingabe öffnen, Ausgabe öffnen, eine Schleife zum Lesen / Schreiben von Bytes, Eingabe schließen, Ausgabe schließen), wurde die Datei nicht kopiert.
Wenn der Lehrer sagt, dass Sie ein Framework oder eine Bibliothek verwenden sollen (z. B. eine Grafikklasse fordert Sie möglicherweise auf, eine 3D-Bibliothek zu verwenden), verwenden Sie das, was Sie verwenden sollen. Erfinden Sie nicht Ihre eigenen oder verwenden Sie eine andere. Alles andere erschwert es dem Lehrer, Ihre Arbeit zu benoten.
In einem Vorstellungsgespräch helfen Ihnen Kenntnisse über gängige Frameworks bei der Beantwortung von Fragen. Erstellen Sie Ihre eigenen Projekte, um zu lernen. Viel Glück beim Lernen.
quelle
cp
ihr Programm erzeugen würden, würden sie die Datei tatsächlich kopieren.