Was zählt als Neuerfindung des Rades?


8

Zählen die folgenden Szenarien in Ihrem Buch als "das Rad neu erfinden"?

  • Es gibt eine Lösung, jedoch nicht in der Sprache, die Sie verwenden möchten, und vorhandene Lösungen können nicht auf saubere, idiomatische Weise mit der Sprache verbunden werden, die Sie verwenden möchten.

  • Im Prinzip könnten Sie eine vorhandene Bibliothek dazu bringen, mit umfangreichen Änderungen das zu tun, was Sie wollten, aber Sie denken, es wäre wahrscheinlich einfacher, einfach von vorne zu beginnen.

  • Was Sie schreiben, hat dieselbe einzeilige Beschreibung wie bereits erledigtes Material, aber Sie zielen auf eine andere Nische ab. Zum Beispiel wurde Ihr Problem vielleicht schon zig Mal gelöst, aber auf eine Weise, die für große Datenmengen ineffizient ist und Ihr Code für große Datenmengen gut funktioniert.


4
"wahrscheinlich einfacher von vorne anfangen" - es ist selten ...

Außerdem ist "starke Modifikation" möglicherweise nicht für jeden geeignet. In jedem Fall ist es am besten, den vorhandenen Code sorgfältig zu studieren, bevor Sie "von vorne anfangen".
Rwong

Wenn Leute "Beispiel" schreiben, schreiben Sie ein Beispiel, keine andere Abstraktion für dieselbe Idee.
Anzeigename

1
Ich denke, wir sollten an dieser Stelle aufhören, über das Rad nachzudenken, und feststellen, dass wir die Achse für selbstverständlich gehalten haben.
Tim Post

Antworten:


12

Wenn es eine Lösung gibt, die in Ihren Augen eine praktische Lösung wäre, dann würde es das Rad neu erfinden, wenn Sie diese nicht verwenden, sondern Ihre eigene Lösung erstellen. Davon abgesehen ist es sehr subjektiv.

Über Ihre spezifischen Szenarien:

  1. Sie möchten immer sauberen, leicht zu wartenden und leicht verständlichen Code. Das geht über die Neuerfindung des Rades hinaus, IMHO. Zeitbeschränkungen könnten Sie jedoch dazu bringen, dies zu brechen.
  2. Wenn es einfacher ist, von vorne zu beginnen, tun Sie es. Sie werden wahrscheinlich auch ein besseres Ergebnis erzielen, wenn der Code auf die spezifischen Anforderungen zugeschnitten wurde.
  3. Wenn eine Lösung eine schlechte Lösung für Ihr Problem ist, erfindet sie das Rad nicht neu, um ein neues zu erstellen, das ein besseres Rad ergibt .

1
Ich würde hinzufügen, wenn Sie eine Lösung haben, die Müll ist, es von Grund auf neu zu schreiben, ist manchmal gut.
Erin

2
@Erin - wenn du besser dran bist, umzuschreiben, war es keine wirkliche Lösung.
JeffO

@ Jeff O, das Management hätte vielleicht gedacht, dass es eine Lösung ist. Ich habe mit viel schlechtem VB6-Code gearbeitet, der wirklich neu geschrieben werden musste.
Stephen Furlani

1
Ich sage den Leuten gerne: "Ich kann alles bauen, aber ich kann niemanden zwingen, neue Funktionen in seine Bibliothek zu integrieren oder ihre Fehler zu beheben!"
Kevin

@ Kevin Laity: Andererseits, solange die Bibliothek Open Source ist, könnten Sie es teilen
Anto

8

Das Rad neu zu erfinden, ist das, was andere Ihnen vorwerfen, wenn Ihre Analyse zeigt, dass Sie selbst etwas schreiben sollten und das ihre nicht.


2

Ich denke, die Neuerfindung des Rades kann ganz einfach definiert werden: Wenn Sie auf lange Sicht mehr selbst schreiben, als die Bibliothek zu nutzen. Beachten Sie, dass nicht immer klar ist, wie viel Arbeit etwas auf lange Sicht bedeuten kann . Möglicherweise können Sie einen Prototyp selbst schneller hacken, als Sie Ihren vorhandenen Code so umgestalten können, dass er die Bibliothek enthält. Auf lange Sicht funktioniert die Bibliothek jedoch besser, wenn Sie mehr Funktionen hinzufügen oder den Code unterstützen müssen.

Unter dem Strich müssen Sie sorgfältig über Ihre Situation nachdenken, wenn Sie entscheiden, ob Sie eine Bibliothek verwenden möchten oder nicht. Sie müssen entscheiden, ob die Bibliothek für das, was Sie jetzt tun möchten, und für das, was Sie in Zukunft tun werden, einfacher ist . Zu wissen, was Sie in Zukunft tun werden, ist nicht immer einfach, aber wenn Sie einen guten Plan haben, sollten Sie eine grobe Idee haben. Trotzdem sind Prognosen manchmal ungenau - Sie merken im Allgemeinen erst, dass Sie das Rad neu erfunden haben, nachdem Sie es getan haben.


1
In einigen Fällen kann die Verwendung einer vorhandenen Bibliothek Wartungskosten einsparen (z. B. wenn Sie die Bibliothek einer anderen Person für den Zugriff auf die Registrierung verwenden und Microsoft die Art und Weise ändert, wie 32-Bit-Anwendungen auf die Registrierung zugreifen, können Sie dies möglicherweise einfach tun Sie erhalten eine aktualisierte Version dieser Bibliothek, ohne den Bibliothekszugriffscode selbst ändern zu müssen. In anderen Fällen kann dies die Wartungskosten erhöhen (z. B. weil die Bibliothek darauf angewiesen ist, einige Einstellungen aus der Registrierung lesen zu können, obwohl Sie selbst Code geschrieben haben würde nicht, und der Autor des Codes nie ...
Supercat

1
... veröffentlicht eine Version, die die Neuzuordnung der Registrierung durch Microsoft toleriert, sodass Sie sie am Ende selbst ändern müssen. Manchmal kann es schwierig sein, vorherzusagen, welche Auswirkungen die Verwendung externer Bibliotheken auf die Wartungskosten haben wird, da dies von Dingen abhängt, die nicht bekannt sind (z. B. welche Änderungen Microsoft an seinem Betriebssystem vornehmen wird, um vorhandenen Code zu beschädigen).
Supercat

1

Es ist zu weit gefasst und subjektiv, um mit irgendeiner Genauigkeit antworten zu können, einfach weil jeder Fall anders ist.

Es ist durchaus akzeptabel, das Rad bei Bedarf neu zu erfinden. Der Schlüssel liegt in Ihrem Urteilsvermögen, zu entscheiden, wann das vorherige Rad eine akzeptable Lösung ist und wann es nicht rund genug ist, um eine reibungslose Fahrt zu gewährleisten.

Diese Frage muss manchmal fast rhetorisch gestellt werden, um sicherzustellen, dass der beste Ansatz verwendet wird. In einem Buch finden Sie oft einen besseren Algorithmus, als die meisten Programmierer in der Zeit schreiben können, die erforderlich ist, um ihn zu finden.


1

Je größer und komplexer das Problem ist, desto weniger wahrscheinlich ist ein Rad, das genau Ihren Anforderungen entspricht, und desto legitimer ist es, es wieder aufzubauen.

Ich denke, wir sollten "das Rad nicht neu erfinden" nur auf grundlegende Elemente anwenden (Funktionen, die bereits in der Plattform integriert sind, bekannte Entwurfsmuster ...) oder wenn die genaue Lösung für Ihr Problem verfügbar ist - aber das ist selten der Fall.

Ihre 3 Punkte zählen für mich nicht als Neuerfindung des Rades.


0

Es kommt darauf an ...

Für die ersten beiden:

  • Es gibt eine Lösung, jedoch nicht in der Sprache, die Sie verwenden möchten ...
  • Im Prinzip könnten Sie eine vorhandene Bibliothek dazu bringen, mit umfangreichen Änderungen das zu tun, was Sie wollten ...

In beiden Fällen ist es sinnvoll, eigenen Code zu schreiben. Beachten Sie jedoch Folgendes: Enthält die vorhandene Lösung Techniken, Algorithmen oder Routinen, aus denen Sie lernen können? Das Ignorieren würde das Rad neu erfinden.

  • Was Sie schreiben, hat dieselbe einzeilige Beschreibung wie Dinge, die bereits erledigt wurden ... Vielleicht wurde Ihr Problem bereits zig Mal gelöst, aber auf eine Weise, die für große Datenmengen ineffizient ist ...

Drei Fragen:

  1. Eine Million ist viel. Haben Sie sich wirklich alle vorhandenen Implementierungen angesehen?
  2. Ist Effizienz Ihr Hauptproblem?
  3. Müssen Sie jetzt die optimale Lösung codieren (und später neu schreiben)?

Wenn die Antwort auf eine dieser Fragen "Nein" lautet, erfinden Sie das Rad neu.


Trotzdem bin ich nicht davon überzeugt, dass es immer schlecht ist , das Rad neu zu erfinden :

  1. Es ist eine großartige Möglichkeit zu lernen und die einzige Möglichkeit, vorhandene Lösungen wirklich zu verstehen .
  2. Die Räder anderer Leute sind möglicherweise nicht gut . Nur so können bessere Räder hergestellt werden.
  3. Selbst wenn das Rad anderer Leute großartig ist, kann man manchmal gute Geschäfte machen, wenn man noch bessere Räder herstellt .

0

Ihr erstes Szenario gilt für die Neuerfindung des Rades, das sich selbst erklärt.

Das zweite Szenario gilt NICHT, wenn der vorhandene Code nur geringfügig geändert werden muss. Wenn dies jedoch der Fall ist, sollten Sie versuchen, ähnliche Eigenschaften, Methoden und Verwendungszwecke wie bei einem vorhandenen Code zu verwenden, damit andere Entwickler keine Probleme mit der Verwendung Ihres Codes haben "Rad".

Seien Sie vorsichtig mit dem Ansatz "Es ist immer besser, von vorne zu beginnen". Es kann länger dauern, als Sie erwarten.

Das dritte Szenario, das Sie erwähnen, ist der "praktische" Ansatz. Das "gegebene Rad" kann die Arbeit erledigen, verbraucht aber in Wirklichkeit zu viel Ressourcen, Speicher, Geschwindigkeit usw.

Ich habe einmal in einer Anwendung gearbeitet, in der hierarchische Daten in einem Treeview-Steuerelement aus einer einzelnen Tabelle angezeigt werden müssen. Wir haben bereits ein Steuerelement, das dies tun könnte, aber mehrere Tabellen pro Element unterstützt.

Um es zu benutzen, musste ich zu viele Dinge lernen, zu viele Eigenschaften zuweisen, zu viele Methoden ausführen und es war langsam. Ein Mitarbeiter bestand darauf, es zu benutzen, um "das Rad nicht neu zu erfinden".

Ich habe ein neues Steuerelement von Grund auf neu erstellt, eine einzelne Tabelle gelesen und nur einige leicht zu erlernende Eigenschaften programmiert. Und bevor ich es wusste, gab es einen anderen Mitarbeiter, der es aus dem gemeinsam genutzten Code-Repository nahm und das vorherige Steuerelement ersetzte.

Bonus:

Wenn das Rad, das Sie bereits haben, "quadratisch" ist. Mit "quadratisch" meine ich, dass es an der Oberfläche so aussieht, als ob es eine Lösung für Ihr Problem darstellt, aber nach einem guten Blick kommen Sie zu dem Schluss, dass dies nicht der Fall ist.

Es hängt davon ab, ob Sie über die Fähigkeiten und die Zeit (und Ihre Unternehmensberechtigung) verfügen, um das Rad neu zu erfinden.


0

Lesen Sie zuerst diesen ausgezeichneten Artikel von Joel Spolsky: Zur Verteidigung des Not-Invented-Here-Syndroms

Dann werden alle technischen Gründe zu wirklich kleinen Nuancen. Wenn Sie der Meinung sind, dass diese Software für Ihren Job von entscheidender Bedeutung ist, schreiben Sie sie neu. Ja, es ist "das Rad neu erfinden", aber es lohnt sich wahrscheinlich, Zeit mit Schreiben und Wartung zu verbringen. Wenn es nicht kritisch ist, verwenden Sie einfach das, was verfügbar ist.

... wenn Sie jemals eine wichtige Geschäftsfunktion auslagern mussten, erkennen Sie, dass Outsourcing die Hölle ist. Ohne direkte Kontrolle über den Kundenservice erhalten Sie einen albtraumhaft schlechten Kundenservice - die Art, über die die Leute in ihren Weblogs schreiben, als sie versuchten, jemanden, irgendjemanden , von einer Telefongesellschaft dazu zu bringen, selbst das Grundlegendste zu tun. Wenn Sie Fulfillment auslagern und Ihr Fulfillment-Partner eine andere Vorstellung davon hat, was eine schnelle Lieferung ausmacht, werden Ihre Kunden nicht glücklich sein, und Sie können nichts dagegen tun, da es 3 Monate gedauert hat, bis Sie einen Fulfillment-Partner gefunden haben Ort, und in der Tat werden Sie nicht einmal wissendass Ihre Kunden unglücklich sind, weil sie nicht mit Ihnen sprechen können, weil Sie ein ausgelagertes Kundendienstzentrum eingerichtet haben, mit dem ausdrücklichen Ziel , Ihren eigenen Kunden nicht zuzuhören. Die E-Commerce-Engine, die Sie gekauft haben? Es wird auf keinen Fall so flexibel sein wie das, was Amazon mit Obidos macht, die sie selbst geschrieben haben. (Und wenn ja, dann hat Amazon keinen Vorteil gegenüber seinen Konkurrenten, die dasselbe gekauft haben). Und kein Standard-Webserver wird so schnell sein wie das, was Google mit seinem handcodierten, handoptimierten Server macht.

Dieses Prinzip scheint leider in direktem Widerspruch zum Ideal der "Wiederverwendung von Code gut - Rad schlecht neu erfinden" zu stehen.

Der beste Rat, den ich anbieten kann:

    Wenn es sich um eine Kerngeschäftsfunktion handelt, tun Sie es selbst, egal was passiert.

Wählen Sie Ihre Kerngeschäftskompetenzen und -ziele aus und erledigen Sie diese im eigenen Haus ...

Wenn Sie ein Computerspiel entwickeln, bei dem die Handlung Ihr Wettbewerbsvorteil ist, können Sie eine 3D-Bibliothek eines Drittanbieters verwenden. Aber wenn coole 3D-Effekte Ihr Unterscheidungsmerkmal sein sollen, sollten Sie Ihre eigenen ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.