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.
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle