Gibt es einen Begriff für die Überkomplikation von OOP?

18

Vor ein oder zwei Jahren habe ich einen ausgezeichneten Artikel über OOP (Java) gesehen, der den Fortschritt eines einfachen konkreten Loggers mit zwei oder drei Codezeilen und einen theoretischen übermäßigen Denkprozess des unerfahrenen Entwicklers zeigte, der im Grunde gesagt hat: Oh, ich sollte Fügen Sie dies hinzu, falls wir das jemals wollen! Am Ende des Artikels war dieser einfache Logger ein Riesenmüll, den der ursprüngliche Entwickler selbst kaum verstehen konnte ...

Gibt es einen gemeinsamen Begriff für diese Art von Überkomplikation? Dieser Artikel (von dem ich mir von Herzen wünsche, dass ich ihn wieder finde) zeigt das Konzept wunderbar für einen Einzelfall, aber ich bin auf ganze Projekte gestoßen, in denen sich die Entwickler im Wesentlichen durch übermäßige Verwendung von Mustern, Frameworks, Bibliotheken und andere Probleme. Auf seine eigene Weise ist dies genauso schlecht (oder sogar noch schlimmer) als die alten VB6-Spaghetti-Apps, die wir als Ersatz übernehmen.

Was ich wirklich suche, ist, dies beim Vorstellungsgespräch zur Sprache zu bringen. Ich möchte wissen, ob sich jemand bewusst und bewusst ist, wie einfach es ist, bei mangelnder Architektur / Vorplanung in dieses Problem zu geraten (und zu wissen, ob er das richtige Gleichgewicht zu haben scheint), aber es ist nicht wirklich etwas Ich kann eine Menge Informationen über finden.

JLeach
quelle
25
Ja, es heißt OOP.
Gardenhead

Antworten:

28

Der häufigste Begriff, den ich gehört habe, um solche Entwürfe zu beschreiben, ist Überentwicklung . Die ursprüngliche Bedeutung dieses Wortes hängt jedoch nicht mit der Softwareentwicklung zusammen, und außerhalb der Softwareentwicklung hat es wahrscheinlich keinen so schlechten Ton.

Auf einer allgemeineren Ebene gab Joel Spolsky Designern, die architektonische Entwürfe überkomplizieren, den Namen " Architekturastronauten ".

Vor allem für ein Interview halte ich es jedoch für wichtiger zu wissen, wie das Gegenteil heißt, nur die Dinge in ein Design einfließen zu lassen, die tatsächlich benötigt werden, und den ungesunden "nur für den Fall" -Ansatz zu vergessen - das nennt man das YAGNI- Prinzip.

Doc Brown
quelle
Vielen Dank. Ich bin ein großer Befürworter von YAGNI und war mir nicht sicher, ob es ein gemeinsames Gegenteil gibt.
Jleach
Ich möchte betonen, dass es bei Yagni um "das geht, was gerade gebraucht wird". Sie sollten die Dinge immer noch weglassen, auch wenn bekannt ist, dass sie später benötigt werden, solange sie momentan nicht benötigt werden.
Bent
7
@Bent Ich möchte auch betonen, dass es nicht heißt , Dinge / Änderungen, von denen Sie sicher sind, dass sie in naher Zukunft passieren werden , vollständig zu ignorieren. Wenn Sie wissen, wie die Software danach erweitert wird, können Sie mehr Code schreiben leicht entlang dieser Achse des Wandels refactorable.
Bakuriu
Ich habe den Begriff "schlechtes Engineering" im Gegensatz zu "Über-Engineering" verwendet. Ich habe mit Leuten zusammengearbeitet, die es lieben, alle Arten von Funktionen und "Nur für den Fall" -Erweiterungen hinzuzufügen, für die es keine eindeutigen Anwendungsfälle gibt. Wenn Sie das Problem, das Sie zu lösen versuchen, nicht verstehen, ist es nur eine schlechte Technik.
Josh Johnson
4

Ja, Überentwicklung ist der einfachste Begriff, um dies zu beschreiben. Ich habe mehrmals überarbeitete, unnötig komplizierte Designs gesehen, als ich im Laufe der Jahre in Erinnerung behalten kann. Vor vielen Jahren, als er einen Microsoft GWBasic-Kurs belegte, hämmerte der Kursleiter wiederholt die KISS-Methode (Keep it Simple Stupid). Dies ist heute so wahr wie damals.

Deshalb erinnere ich mich immer an KISS und gestalte immer unter Berücksichtigung der SOLID Principles . Trotzdem ist es immer noch möglich, einen Entwurf zu überdenken, bei dem die SOLID-Prinzipien vollständig berücksichtigt werden. Sie müssen einen vernünftigen, pragmatischen Ansatz mit dem Wunsch vereinbaren, rein zu sein und die allgemein akzeptablen OOP-Richtlinien einzuhalten. Wenn Sie genug Zeit haben und gerne komplexe Lösungen entwickeln, können Sie den Weg zum Design eines Motors für ein Skateboard beschreiten, weil Sie dachten, er würde schließlich in ein Auto verwandelt. Glücklicherweise war ich diszipliniert genug, um dies im Laufe der Jahre nicht zu tun, aber ich habe es oft gesehen.

Um zusammenzufassen, um eine Überkomplizierung des Codes zu verhindern:

1) KISS (halte es einfach dumm)

2) Befolgen Sie die SOLID-Grundsätze unter Berücksichtigung der praktischen Aspekte.

3) Versuchen Sie nicht, für alle Fälle zu entwerfen. Und manchmal sind kleine, undichte Abstraktionen keine schrecklichen Dinge, wenn sie isoliert und beabsichtigt sind und wenn die Bemühungen, sie zu verhindern, die Auswirkungen ihrer Beibehaltung bei weitem überwiegen.

4) Berücksichtigen Sie beim Entwerfen die Implementierung von Lösungen. Sie können nicht einfach "Oh, das ist ein Implementierungsdetail" sagen und davon ausgehen, dass Ihr Design praktisch ist. Früher habe ich mit einem Architekten zusammengearbeitet, der dies häufig tat, und leider haben seine Entwürfe nie funktioniert, weshalb ich dort nicht mehr arbeite.

5) Code, als ob Sie derjenige sind, der ihn pflegen wird.

David Spenard
quelle
-3

Sie werden also dieses Interview führen und den Kandidaten dazu verleiten, seine Kenntnisse über Softwareentwicklung zu demonstrieren. Dann werden Sie sagen: "Nein, Sie möchten wahrscheinlich alles, was Sie wissen, in Ihrem ersten Auftrag anwenden. Fahren Sie jetzt fort , du vergoldeter, überentwickelter, nicht geschäftlich wertvoller Schöpfer!

Ich denke, es wäre sicherer, ein konkretes Beispiel zu präsentieren und die Vor- und Nachteile der Anwendung bestimmter Muster zu diskutieren. Dann würden Sie nach Antworten wie "Es kommt darauf an, ob Sie es schnell wollen. Wird das alles sein? Wie kompliziert ist das Problem? Welche Muster sind bereits vorhanden?" und vielleicht lernst du selbst etwas. Dies würde es dem Kandidaten auch ermöglichen, seinen Sinn für den Kontext zu beweisen, während dies eine offenere Frage wäre. Wenn Sie auf eine bestimmte Antwort warten und diese erhalten möchten, erhalten Sie bestenfalls jemanden, der die gleiche Sorge hat wie Sie. Wenn Sie Ihre Antwort nicht erhalten, kann es sein, dass der Kandidat dies für ein Kinderspiel hält.

Martin Maat
quelle
4
Es tut mir leid, aber ich habe mich wirklich nur gefragt, ob es einen Begriff dafür gibt. Ich suchte keinen Rat, wie ich ein Interview führen sollte (oder ob meine Frage in irgendeiner Weise wahrgenommen werden sollte, wie ich ein Interview führen würde). Vielen Dank für Ihre Besorgnis ...
Jleach
1
Nun, Sie haben den letzten Absatz Ihrer Frage geschrieben, der schwer zu ignorieren ist und eine ziemliche Aussage enthält. Wenn Sie Feedback zu bestimmten Teilen Ihres Textes nicht schätzen, möchten Sie möglicherweise restriktiver vorgehen.
Martin Maat