Beim Stackoverflow scheint es oft so zu sein, dass Leute (insbesondere Programmierer) dazu neigen, eine Lösung für ein Problem zu komplizieren, bei der die Lösung weitaus komplizierter ist als das ursprüngliche Problem? Ich bin in keiner Weise ein Experte, aber oft versuche ich, die einfachste Lösung zu wählen, die funktioniert (und offensichtlich funktioniert dies ÜBERALL nicht), aber ich hatte ziemlich guten Erfolg damit, einfache Lösungen für den Job vorzuschlagen, den die Leute scheinen für VIEL kompliziertere Lösungen zu übersehen?
Ist das wie eine normale Sache für Programmierer ..... oder denke ich einfach nicht in der richtigen Perspektive.
programming-practices
code-quality
user6791
quelle
quelle
Antworten:
Offensichtlich wollen einige Programmierer zeigen, wie schlau sie sind, indem sie einen unglaublich komplizierten Code erstellen, den niemand verstehen kann. Andere Programmierer feuern auf so hohem Niveau, dass Komplikationen bei Lösungen eine natürliche Entwicklung sind.
Der schlechteste Code, den ich je gesehen habe, war eine Methode mit über 2000 Codezeilen. Zweifellos war dieser Code komplex, aber auch sehr schlecht.
Ich denke, dass ein guter Programmierer übermäßig komplizierten Code vermeidet. Dazu gehört, die Versuchung zu vermeiden, ein Entwurfsmuster dazu zu zwingen, in eine Lösung zu passen, die es nicht wirklich benötigt. Es beinhaltet auch das Vermeiden von Gott-Objekten, magischen Knöpfen, vorzeitiger Optimierung, vorzeitiger Verallgemeinerung und anderen Anti-Mustern.
Ich überarbeite ständig und suche nach Möglichkeiten, meine Lösungen zu vereinfachen, da Komplexitätswachstum eine organische Sache ist. Wie viele andere organische Dinge muss es beschnitten und zurückgeschnitten werden, damit es weiterhin verwendet werden kann. Ich hasse es, mit übermäßig komplizierten Lösungen interagieren zu müssen, denn mit zunehmender Komplexität steigt die Wahrscheinlichkeit, dass der Code beschädigt wird.
Ich denke, dass die Lesbarkeit das wichtigste Element der Codewartung ist, und übermäßig komplizierte Lösungen verringern fast immer die Lesbarkeit und erhöhen die Wartungskosten.
quelle
Ich habe viel Code gesehen, der komplexer war als nötig und fast immer aus diesen drei Gründen:
1) Überentwickelt aufgrund verfrühter Verallgemeinerung oder des Versuchs, zukünftige Bedürfnisse zu antizipieren, die niemals entstanden sind
2) Entwickler wollten lernen / experimentieren mit einem neuen Designmuster oder einer neuen Technologie, die sie zuvor noch nicht verwendet hatten, und haben es selbst dann eingeschliffen, wenn es übertrieben war. Sie tun es, weil es ihre Arbeit interessanter macht und sie etwas Neues lernen können.
3) Funktionen und Fehlerbehebungen wurden hinzugefügt, aber der vorhandene Code wurde zu diesem Zeitpunkt nicht korrekt überarbeitet. Es ist vielleicht nur eine kleine Verdoppelung oder das Anheften eines anderen Flag-Arguments an eine Methode, aber es summiert sich alles. Tatsächlich werden Hacks hinzugefügt und es dauert nicht lange, bis alles aufgrund der Code-Gerüche überkompliziert ist. Dies ist die häufigste und in der Regel nur aufgrund von Unkenntnis oder Zeitdruck.
quelle
Das ist absolut üblich. Wie die meisten Bücher sagen, weiß ein guter Entwickler, wie man es einfach hält. Es ist einfach zu einfach, etwas mit einer neuen Technologie oder einem "coolen" Framework, das Sie gerade gefunden haben, zu komplizieren, sodass Sie nach Möglichkeiten suchen, es zu verwenden, anstatt aus der Perspektive des Problems zu denken.
Wie Martin Fowler sagte, haben diejenigen, die eine neue Technologie erlernen, ein kurzfristiges Problem, bei dem es um "technologiegetriebene" Lösungen geht.
quelle
Ich denke nicht, dass es für alle Programmierer normal ist, aber ich habe definitiv so manchen Programmierer gesehen, der dies tut.
Ich denke, einige Leute glauben, dass manche Leute es als zu einfach empfinden, etwas wirklich Einfaches zu machen, und dass es kein gutes Beispiel für ihre Fähigkeiten ist. Daher müssen sie eine große, komplexe Lösung finden, in der man sagen kann, was ich tun kann, auch wenn dies möglicherweise nicht die beste Lösung für das jeweilige Problem ist.
quelle
Ich habe gesehen, dass Programmierer oft mehrere Codezeilen schreiben, um eine Aufgabe zu erfüllen, von der sie nicht wussten, dass sie bereits in die Sprache integriert ist. Dies ist nicht beabsichtigt, kann aber sicher verhindert werden.
quelle
Es kommt darauf an, was Sie "einfach" nennen. Einige Leute betrachten hoch überarbeiteten Code als "komplexer", weil es mehr Code und Diagramme mit mehreren Aufrufen gibt. Dieser Code ist jedoch "einfacher", da es viel einfacher ist, Änderungen vorzunehmen.
Ich finde oft, dass eine große Funktion "einfach" aussieht, bis Sie Änderungen vornehmen müssen, dann wird sie schnell komplex.
Einfach liegt also in vielen Fällen im Auge des Betrachters.
quelle
Das Problem ist, wenn Sie entweder die einfachen Lösungen nicht klar erkennen können (hier kommen Diskussionen mit Kollegen ins Spiel) oder wenn Sie zu früh über generalisieren.
Mit anderen Worten, Sie machen einfache Schleifen zu erweiterten Bibliotheksfunktionen, weil Sie denken, dass Sie sie für Ihr nächstes Projekt sowieso brauchen werden (außer dass Sie nicht genau in dieser Form arbeiten). Tun Sie dies zu lange und Sie haben eine immens komplexe Anwendung mit einem sehr einfachen Kern.
Möglicherweise benötigen Sie auch sehr robusten Code, und die Robustheit macht ihn standardmäßig komplex. Ich denke aber nicht, dass dies Ihr Problem ist.
quelle
In einigen Fällen liegt es möglicherweise nur an der Komplexität, eine saubere / einfache Lösung zu finden.
Es gibt ein Zitat, an das ich mich nicht erinnern kann oder das etwas alleine sagt. Die Zeilen von "Code ist nicht vollständig, wenn Sie alles geschrieben haben, was Sie schreiben müssen, sondern erst, wenn Sie nichts mehr zu entfernen haben."
Der Mangel an Klarheit behindert die Fähigkeit der Menschen, den gesamten Überschuss zu entfernen.
quelle
Die besten Ingenieure sind diejenigen, die wirklich komplizierte Probleme in einfach zu implementierende und leicht zu verstehende Lösungen umwandeln können. Es klingt einfach, aber es gibt nicht viele solche Ingenieure / Entwickler. In der Tat gibt es nicht viele solche Menschen, die existieren. In Wirklichkeit macht die Mehrheit der Leute da draußen genau das Gegenteil. Sie nehmen einfache Probleme auf und erschweren sie bis zur Unkenntlichkeit. Schauen Sie sich unsere Politiker an, um ein Beispiel für Menschen zu finden, die es schaffen, einfache Probleme zu lösen und sie in ein totales Chaos zu verwandeln. Programmierer sind in dieser Hinsicht nicht anders.
quelle
Persönlich habe ich nie absichtlich versucht, ein Stück Software komplizierter zu machen. Ich habe jedoch etwas fertiggestellt und dachte "Wow, das ist zu kompliziert" und bin darauf zurückgekommen und habe es überarbeitet. Einige Leute sehen das vielleicht und denken einfach, es funktioniert und es ist gut genug und es nicht umgestalten.
quelle
Ein Weiser soll gesagt haben, man solle die Dinge so einfach wie möglich halten, aber nicht einfacher. Gleiches kann für Code gelten. Manchmal muss man eine Technik anwenden, die man als komplex ansieht (Rekursion könnte ein gutes Beispiel sein, sie erschreckt oft junge Programmierer).
Generell denke ich jedoch, dass komplexer Code häufig organisch entsteht. Ein einfaches Problem wird mit einfachem Code gelöst, der Gültigkeitsbereich wird erweitert und der Code wird ohne allzu große Überlegungen geändert. Mit der Zeit wird Code angezeigt, der versucht, das neue Problem zu behandeln, der jedoch tatsächlich zur Lösung eines anderen Problems entwickelt wurde. Es wird zu einem Patchwork-Quilt aus verschiedenen Logikelementen. Ein solcher Code kann dann oft als wesentlich komplexer erscheinen, als es das Problem erfordert, aber es ist auch so gekommen, weil jede kleine Änderung zu der Zeit die einfachste Möglichkeit zu sein schien, den Code zum Laufen zu bringen.
Ich denke nicht, dass die meisten Entwickler absichtlich darauf aus sind, Code komplexer zu machen (obwohl Sie gelegentlich zeigen, wer eine Technik einsetzt, um ihre eigenen Fähigkeiten zu beweisen) .
quelle
volatile
usw.), aber ...short
es so groß ist oder nichtint
. Eineunsigned short
zu einer Werbung hinzugefügte Werbungint
würde eine ergebenint
. Das Hinzufügen von signierten und nicht signierten Dingen derselben Größe oder das Hinzufügen von nicht zu bewerbenden Dingen unterschiedlicher Größe wäre ein Fehler. Fügen Sie ein kleines Stück Komplexität hinzu, und die seltsamen nachgelagerten Eckfälle verschwinden.Ein weiterer Grund, der noch nicht angesprochen wurde, besteht darin, dass die gelieferten Lösungen möglicherweise zu kompliziert sind, um sicherzustellen, dass Sie ihre Dienste später zur Unterstützung dieser Lösungen benötigen. Mit anderen Worten: für die Arbeitsplatzsicherheit.
quelle
Vielleicht ein Problem eines klassischen Fehlers?
quelle
Ja, manchmal überkomplizieren wir den Code, um uns selbst zu unterhalten. Meistens kommt die Wahrnehmung, dass Code zu kompliziert ist, von einem Unwissenden oder Junior-Teilnehmer des Projekts.
quelle
JA ... und ich habe den Preis zu oft bezahlt.
Auf meinem Whiteboard befindet sich jetzt ganz oben ein Sternchen mit der Aufschrift
... und jedes Mal, wenn ich einen Prototyp auf dem Whiteboard entwerfe, fällt mir das auf.
Es funktioniert wirklich für mich, weil meine komplexen Designs viel einfacher werden, was sich in saubererem Code niederschlägt.
quelle