Wie heißt das Gegenmuster zu „das Rad neu erfinden“? [geschlossen]


101

Das Antimuster " Das Rad neu erfinden " ist weit verbreitet - anstatt eine fertige Lösung zu verwenden, schreiben Sie Ihre eigenen von Grund auf neu. Die Codebasis wächst unnötig, es gibt leicht unterschiedliche Schnittstellen, die das Gleiche tun, aber leicht unterschiedlich sind. Es wird Zeit verschwendet, um leicht verfügbare Funktionen zu schreiben (und zu debuggen!). Das wissen wir alle.

Aber es gibt etwas am anderen Ende des Spektrums. Wenn Sie keine eigene Funktion mit zwei Codezeilen schreiben, sondern ein Framework / API / eine Bibliothek importieren, instanziieren, konfigurieren, den Kontext in einen vom Framework als akzeptabel eingestuften Datentyp konvertieren und dann diese eine einzige Funktion aufrufen, die genau das tut, was Sie benötigen, zwei Zeilen Geschäftslogik unter einem Gigabyte Abstraktionsebenen. Und dann müssen Sie die Bibliothek auf dem neuesten Stand halten, Build-Abhängigkeiten verwalten, die Lizenzen synchron halten, und Ihr Code für die Instanziierung ist zehnmal länger und komplexer als wenn Sie nur das Rad neu erfunden hätten.

Die Gründe können vielfältig sein: Das Management ist strikt gegen eine "Neuerfindung des Rades", unabhängig von den Kosten, jemanden, der seine bevorzugte Technologie trotz geringfügiger Überschneidungen mit den Anforderungen vorantreibt, eine schwindende Rolle eines ehemals wichtigen Moduls des Systems oder die Erwartung einer Erweiterung und eines umfassenderen Angebots Verwendung des Frameworks, das einfach nie ankommt, oder Missverständnis des "Gewichts", das ein paar Anweisungen zum Importieren / Einschließen / Laden "hinter den Kulissen" mit sich bringen.

Gibt es einen gebräuchlichen Namen für diese Art von Antimuster?

(Ich versuche nicht, eine Diskussion zu beginnen, wenn dies richtig oder falsch ist oder wenn es sich um ein echtes Gegenmuster oder um eine auf Meinungen basierende Frage handelt. Dies ist eine einfache, unkomplizierte und objektive Nomenklaturfrage.)

Bearbeiten: Das vorgeschlagene "Duplikat" befasst sich mit der Überarbeitung des eigenen Codes, um ihn "für alles bereit" zu machen, ganz abgesehen von externen Systemen. Dies mag in bestimmten Fällen darauf zurückzuführen sein, ist aber im Allgemeinen auf "Abneigung gegen die Neuerfindung des Rads" zurückzuführen - die Wiederverwendung von Codes um jeden Preis; Wenn es eine "fertige" Lösung für unser Problem gibt, werden wir sie verwenden, egal wie schlecht sie passt und zu welchen Kosten sie anfällt. Die Erstellung neuer Abhängigkeiten wird dogmatisch gegenüber der Codeduplizierung favorisiert, wobei die Kosten für die Integration und Wartung dieser Abhängigkeiten im Vergleich zu den Kosten für die Erstellung und Wartung des neuen Codes völlig unberücksichtigt bleiben.


52
Abhängigkeitshölle . Das ist das Nächste, woran ich denken kann.
Machado

5
@Machado: Nett, obwohl ich sagen würde, dass die Abhängigkeitshölle das direkte Ergebnis der Fülle dieses Anti-Musters ist; Bei sehr komplexen Systemen kann dies auf einfache Weise auf die Komplexität zurückzuführen sein.
SF.

27
Ich würde es "Abhängigkeits-Creep" nennen, analog zu Feature_creep oder Scope_creep, wo immer mehr ursprünglich unerwünschte Features zum Produkt hinzugefügt werden.
k3b

21
Das Fiasko auf der linken Seite ist ein reales Beispiel für dieses Syndrom in Aktion.
SF.

13
Ich empfehle, dass wir anfangen, uns kollektiv als LeftPad zu bezeichnen.
RubberDuck

Antworten:


9

Nein. Es gibt keinen häufig verwendeten Anti-Pattern-Namen, der das beschreibt, was Sie beschreiben.


4
Es zeigt sich mit der Anzahl der Ideen, Anregungen und Diskussionen, die es geweckt hat, das ist eigentlich richtig.
SF.

3
Ich fühle mich schmutzig dabei.
SF.

Huh? "Es gibt kein XXX" ist eine sehr starke Aussage und sehr schwer zu beweisen, besonders wenn man bedenkt, dass in den Kommentaren mehrere Kandidaten erwähnt werden.
AnoE

1
@AnoE "Gibt es einen gebräuchlichen Namen für diese Art von Antimuster?" Die Beweise in diesen Kommentaren und Antworten deuten stark darauf hin, dass dies nicht der Fall ist. Es beantwortet zwar nicht den Titel, aber die Frage selbst.
Kroltan

@AnoE Du kannst kein Negativ beweisen, Schatz. Vielleicht versteckt sich der Begriff irgendwo in Borneo unter einem Felsen und wir sind einfach noch nicht darüber hinweggefallen? Dass es 10 Antworten statt 1 mit zig Millionen Upvotes gibt, ist für mich ein Beweis genug.

49

Goldener Hammer

Der goldene Hammer ist ein Werkzeug, das nur gewählt wird, weil es schick ist. Es ist weder wirtschaftlich noch effizient bei der Ausführung der beabsichtigten Aufgabe.

Quelle: xkcd 801

(Trotz der Abwärtsstimmen stehe ich zu dieser Antwort. Es ist vielleicht nicht genau das Gegenteil einer semantischen Neuerfindung des Rads, aber es passt zu jedem Beispiel, das in der Frage erwähnt wird.)


5
Upvoted, und Sie können es auch aus Wikipedia
beziehen

3
Ich würde dies ablehnen, wenn ich den Repräsentanten hätte. Es beantwortet die Frage nicht als Ganzes, sondern bietet einen (genauen) Begriff, der nur eines der vorgeschlagenen Szenarien beantwortet.
David

3
Das Gegenteil wurde verlangt. Das ist so, als würde man darauf bestehen, dass "Becquerel" (Strahlung, Einheit ist s ^ -1) statt Hertz (Einheit ist s ^ -1) für Musik verwendet werden kann, weil beide "pro Sekunde" bedeuten.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen Ich habe zu meiner Zeit ziemlich gefährliche Musik gehört.

34

Robert Martin verwendet den Begriff " Framework Bound ", um auf die offensichtlichste negative Konsequenz dieses Anti-Patterns hinzuweisen. Da es meines Erachtens keinen gebräuchlichen Namen für das Muster selbst gibt, könnte ein Hinweis auf diese Konsequenz für die meisten Zwecke ausreichen.


1
Es gibt Frameworks, um den Entwicklungsprozess zu beschleunigen. Sie sind wie eine Booster-Rakete: verbraucht, sobald sie benutzt werden. Die Lösung ist - Release-Version eins, wo waren wir jetzt? Richtig, Software entwickeln. Nächster! Wartung ist ein besonderes Anliegen, und ich denke, sollte in diesen Tagen unwichtig sein. Bringen Sie das nächste Framework zur nächsten Lösung, nach der Eile.

18

Diese Wikipedia-Seite über " Hier erfunden " beschreibt eine etwas andere Situation, aber mit sehr ähnlichen Endergebnissen. Beschreibt die Abneigung eines Teams, eigenen Code zu erstellen, wenn dort entsprechende Funktionen verfügbar sind.

Ich würde behaupten, dass der Name ein bisschen irreführend ist. Macht Sinn, wenn es mit dem Gegenteil in Zusammenhang gebracht wird. Nicht erfunden. Hier ist IMHO so ziemlich ein Synonym für das Erfinden des Rades.


13

Ich habe " Buy Versus Build " und " Invented Here " als Anti-Pattern-Namen gehört, um zu verhindern, dass Dinge intern entwickelt werden, auch wenn dies möglicherweise sinnvoll ist. (Und obwohl der Ausdruck "Kaufen gegen Bauen" eine Wahl zwischen realisierbaren Alternativen anzeigen soll, finde ich, dass er normalerweise erwähnt wird, wenn jemand glaubt, dass "Kaufen" die richtige Wahl ist.)



8

Aufblähen ist ein weit gefasster Begriff, der jedoch das umfassen kann, was Sie beschreiben. Unsere Software wird aufgrund all der zusätzlichen Transformationen und Abstraktionen übermäßig komplex (aufgebläht), und sowohl die Komplexität als auch die Abhängigkeiten selbst tragen zu einer geringeren Leistung / geringeren Effizienz und einem höheren Ressourcenverbrauch (Festplatte, Bandbreite) bei.

Wenn wir möchten, könnten wir mit einem Begriff wie aufgeblähte Abhängigkeiten klarstellen .


5

Ich denke, einen Vorschlaghammer zu benutzen, um eine Nuss zu knacken, ist ziemlich nah. Es ist möglich, aber es erfordert eine übermäßige Menge an Arbeit, um eine Nuss auf diese Weise zu knacken, ohne dass irgendwelche der zahlreichen möglichen unerwünschten Nebenwirkungen auftreten. (Und es gibt eine ganze Tüte Nüsse zu knacken ...)

Der Ausdruck hat auch den Vorteil, dass es sich nicht um Fachsprache handelt. Daher kann er sehr hilfreich sein, um jemandem, der keine hat, einen Hinweis zu geben.

Übrigens gibt es eine Unterscheidung mit Abhängigkeitshölle zu ziehen . Wenn jemand bereits alle Komplexitäten in eine Kapselung eingebunden hat, die einfache, übersichtliche und benutzerfreundliche Schnittstellen erstellt, und vorausgesetzt, der Aufwand für CPU-Zyklen oder die Speichernutzung ist nicht übermäßig hoch, und vorausgesetzt, eine zukünftige Änderung des gekapselten Codes ist unwahrscheinlich benötigt wird, dann ist ein verbleibendes Argument gegen dessen Verwendung die Abhängigkeitshölle, die es verursachen könnte.


5

Ich glaube nicht, dass es ein genaues Analogon gibt, aber ich würde sagen, dass Überdesign oder Überentwicklung am nächsten kommen.

Zumindest würde ich behaupten, dass dies wirklich geschah, als ich auf etwas Ähnliches gestoßen bin, wie Sie es beschreiben.

Eine Bibliothek zu verwenden, anstatt eigenen Code zu schreiben, um dieselbe Funktionalität zu implementieren, ist so gut wie nie schädlich.

Selbst in Ihrem hypothetischen Beispiel ist es möglicherweise nicht erforderlich, eine Bibliothek zum Ersetzen von "zwei Codezeilen" zu verwenden, aber es ist unwahrscheinlich, dass Sie viel Kummer bekommen - wenn es sich wirklich um eine Bibliothek handelt, die dasselbe wie Ihre beiden Codezeilen tun soll .

Eine Bibliothek, um eine einfache Sache zu tun, wird auch einfach sein. Es ist unwahrscheinlich, dass Sie die Kopfschmerzen bekommen, die Ihre Frage mit sich bringt.

Wenn Sie eine komplizierte Bibliothek verwenden, um etwas Einfaches zu tun, müssen Sie wahrscheinlich mehr tun, als die erforderliche Funktionalität zu implementieren.

B. Funktionen einbauen, die nicht benötigt werden, sich auf eine Zukunft vorbereiten, die niemals kommen wird usw.

Das Problem hier ist nicht wirklich Versagen , das Rad neu zu erfinden , per se .


4

Wenn Sie das Rad nicht neu erfunden haben, wird höchstwahrscheinlich ein vorhandener Radsatz eines Herstellers oder eines Drittanbieters verwendet.

Wenn es sich um ein Anti-Pattern handelt, wird es normalerweise als Vendor Lock-In bezeichnet.


6
Ich glaube nicht, dass es dasselbe ist. Die Lieferantenbindung ist ein besonders negatives Ergebnis, da es von der Lösung eines Lieferanten abhängt, ob die Verwendung des Lieferanten bei der Auswahl kostengünstig war oder nicht. Das OP fragt mehr nach einem Begriff für die Auswahl einer Drittanbieterlösung, wenn die Integrationskosten höher sind als die Kosten für die einfache Entwicklung einer neuen Lösung von Grund auf (und in den Fällen, in denen dies der Fall wäre, tritt wahrscheinlich noch keine Lieferantenbindung auf) kostengünstig sein, um eine neue Lösung zu entwickeln, anstatt sich auf den Anbieter zu verlassen).
Ben

@Ben - Ok, ich mag Framework gebunden im Gegensatz zum Anbieter besser einbinden. Diese Frage basiert auf meiner Meinung und das war das erste, was mir in den Sinn kam.
Jon Raynor

0

Berufssicherheit?
Sie erwähnen die ganze Anstrengung, die Dinge synchron zu halten usw. Einige Leute würden lieber den Code anderer Leute verwalten, als ihren eigenen Code zu schreiben. Vor allem Manager.

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.