Wie einfach ist eine echte KISS-Lösung? [geschlossen]

12

Ich gebe zu : Ich habe ein Problem damit, es die meiste Zeit einfach und kurz zu halten, weil der Versuch, es gemäß den Büchern, die ich gelesen habe, den Designmustern, die ich gehört habe usw. zu machen, mir eine solche Begeisterung gibt - eine Begeisterung, von der ich komme In diesem Sinne bin ich auf dem richtigen Weg zu einer wahrscheinlichen Vollkommenheit.

Auf der anderen Seite, ja, es stellt eine zusätzliche Belastung für mich dar, wenn ich manchmal die Fristen einhalten muss ...

Aber wenn ich zu mir selbst sage: "Mach es das nächste Mal einfach, du Dummkopf!" Ich finde es ziemlich schwierig, es "einfach" zu machen, wenn das nächste Mal kommt, weil es sich nach einem Punkt komisch anfühlt ... und unangenehm.

Dann beginne ich mein Verständnis von 'einfach' zu beurteilen ...

Bedeutet SIMPLE zu kurz, dass es funktioniert, aber schwer zu warten und zu erweitern?

Bedeutet SIMPLE, viele der OOP-Prinzipien zu brechen?

Bedeutet SIMPLE Schummeln?

Bedeutet SIMPLE, nur die Fristen einzuhalten, ohne taub zu sein? etc.

Was ist das eigentlich?

Die Frage ist : Können Sie die EXAKTE Definition von SIMPLE im Sinne des KISS-Prinzips schreiben? -Wenn da ist.

Vielen Dank!

pencilCake
quelle
4
Es ist "Mach es einfach, dumm!", Nicht kurz. und nachdem ich das geschrieben habe, habe ich gesehen, dass du es tatsächlich weißt, aber es gibt keinen Link zum Löschen von Kommentaren auf dem Handy p.se ...
yannis
4
Ich habe noch nie etwas so Kurzes gefunden, dass es schwer zu verlängern war. Ich habe VIELE Dinge gefunden, die massive Monstrositäten waren, die fast nicht mehr zu halten waren, weil das Ändern einer Sache alles andere kaputt machte.
Ben Brocka
1
Ich denke, der Fehler, den die meisten Leute beim Versuch machen, KISS zu verstehen, ist, dass sie denken, die Lösung sollte so einfach sein, dass es offensichtlich ist . Die Wahrheit ist, dass es alles andere als einfach ist, eine einfache Lösung zu finden. Es ist wirklich schwer !!! Sobald Sie es gefunden haben, denkt jeder: "Oh, es ist so offensichtlich , warum habe ich es vorher nicht gesehen?"
Treb
2
Gutes KÜSSEN ist schwer zu erklären oder genau zu definieren, aber sobald Sie es richtig verstanden haben, werden Sie es wissen. Übe einfach weiter!
Cascabel
1
Es tut mir leid, dass dies hier migriert wurde, anstatt einfach komplett geschlossen zu werden, aber dies ist hier auf komische Weise nicht zum Thema geworden.

Antworten:

35

Lass uns einen französischen KUSS lernen:

La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer. - Antoine de Saint-Exupéry

Welches ist übersetzt zu:

Perfektion wird erreicht, nicht wenn nichts mehr hinzuzufügen ist, sondern wenn nichts mehr wegzunehmen ist. - Antoine de Saint-Exupéry

mouviciel
quelle
2
Sollte lauten "Perfektion ist, wenn nichts zu entfernen ist"
normanthesquid
2
Dies ist ein großartiges Zitat, dem jedoch praktische Ratschläge fehlen.
c_maker
2
Sie könnten diese Antwort einfacher (auch perfekter) machen, wenn Sie den französischen Teil entfernen. :)
Phil
1
@ Phil: Au contraire, mein Freund.
Gilbert Le Blanc
14

Szenario

Sie müssen schneiden und kneifen.

Lösung A: Nicht KISS

Bildbeschreibung hier eingeben

Lösung B: KISS

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben


Zur genauen Definition: Es ist schwierig, eine absolute Skala für die Messung der Einfachheit zu definieren. Meistens, weil wahre Einfachheit ein echtes Verständnis des vorliegenden Problems ausschließt, und das ist selten erreichbar. Angenommen, Lösung A und B veranschaulichen den Unterschied zwischen Lösungen, die zu Überkomplizierung bzw. Einfachheit neigen.

back2dos
quelle
Das brachte mich zum Lächeln.
c_maker
Sehr gewalttätig, nicht wahr?
NoChance
2
Es ist nicht. Mein Kätzchen schläft damit. Daher ist es gewaltfrei.
Thomas Eding
11

"Mach die Dinge so einfach wie möglich, aber nicht einfacher" -Einstein

Code so einfach wie möglich zu halten, aber nicht einfacher, hängt vom zu lösenden Problem ab. So lange sich das zu lösende Problem ändert, ändert sich auch KISS.

Es gibt ein Gleichgewicht zwischen Über-Engineering (oh man, das scheint ein großartiger Ort zu sein, um meine Design-Pattern-Fähigkeiten zu demonstrieren!) Und Unter-Engineering (wenn ich nur eine Fabrik hätte, hätte ich diese Kupplung nicht, die mich dazu brachte, 20 zu machen) Codeänderungen ...). Das Ziel ist Wartbarkeit.

P. Brian Mackey
quelle
1
"Behalten Sie Ihre zyklomatische Komplexität bei dem Wert, den sie sein sollte, und bei keinem anderen Wert". "Kaufen Sie ein Haus mit einem so niedrigen Verhältnis von Kredit zu Wert, wie Sie vernünftigerweise können, aber nicht niedriger". "Iss so gut wie möglich ein Frühstück, aber nicht besser". "Kaufen Sie so niedrig und verkaufen Sie so hoch wie möglich, aber nicht niedriger / höher". "Wachsen Sie so groß wie möglich, aber nicht größer". Msgstr "Variablennamen so aussagekräftig wie möglich machen, aber keine aussagekräftigeren". Msgstr "Geben Sie so viel Mühe wie möglich, aber nicht mehr". "Es gibt kein" Ich "im" Team ", aber eines im" Höheren "." "Hör auf und riech an den Rosen, aber nur, wenn es Rosen gibt". „Write commen
bA
11

Einfach heißt nicht, gute Programmierprinzipien zu brechen. In der Tat bedeutet es eher das Gegenteil.

Bedeutet SIMPLE zu kurz, dass es funktioniert, aber schwer zu warten und zu erweitern?

Schwierig zu warten und zu erweitern sind ein großes Symptom für Komplexität. Tatsächlich finde ich, dass das Erweitern von Code zu einfacherem Code führt, da Sie nicht mit jedem einzelnen Fall anfangen, können Sie den Basiscode einfacher halten.

Bedeutet SIMPLE, viele der OOP-Prinzipien zu brechen?

Nein. Die meisten OOP-Prinzipien zielen darauf ab, den Code sauberer und organisierter zu halten, was letztendlich einfacher ist.

Bedeutet SIMPLE Schummeln?

Nein, schwer zu pflegender Code und Hacks unter dem Deckmantel der Einhaltung von Fristen sind.

Bedeutet SIMPLE, nur die Fristen einzuhalten, ohne taub zu sein? etc.

Nein. Fristen und die Einfachheit Ihres Codes sind zwei getrennte Punkte. Das Schreiben von einfachem Code dauert nicht länger (obwohl es ein weit verbreitetes Missverständnis ist).

GSto
quelle
Vielleicht denken Sie , dass ich von diesem Missverständnis zu leiden, aber ich denke , dass die idealen einfache Lösung für uns nicht immer das erste , was zu kommen ist, so dass es länger manchmal zunächst dauert einfachen Code zu schreiben - dann später , dass die Zeit bilden Sie und mehr durch sich nicht mit der Komplexität auseinandersetzen zu müssen.
Cascabel
6

Dies zu erklären ist sehr schwierig, da Einfachheit nicht für alle dasselbe bedeutet.

Beispiel. Einige Entwickler halten das ?:für einfach, andere für ifbesser. Wenn es so weit ist, kann man nicht allen gefallen.

Im Allgemeinen bedeutet einfach ohne Komplexität . Um die Einfachheit zu verstehen, müssen wir die Komplexität verstehen.

Es gibt zwei Arten von Komplexität:

Wesentliche Komplexität bezieht sich auf eine Situation, in der alle vernünftigen Lösungen für ein Problem kompliziert (und möglicherweise verwirrend) sein müssen, da die "einfachen" Lösungen das Problem nicht angemessen lösen würden. - Wikipedia

Zufällige Komplexität ist Komplexität, die in Computerprogrammen oder deren Entwicklungsprozessen (Computerprogrammierung) auftritt und für das zu lösende Problem nicht wesentlich ist. - Wikipedia

Sie können die wesentliche Komplexität mit den folgenden Fragen überprüfen:

Ist diese Lösung einfach? Kann ich es meinem Kollegen in ein paar Minuten erklären und sie bekommen es? Gibt es eine einfachere Lösung für das Problem? Wenn ja, gibt es Kompromisse zwischen der komplizierten und der einfachen Lösung? Können wir mit diesen Kompromissen leben? Beispielsweise machen viele Programmierer einen Fehler bei der Mikrooptimierung, und ihre Lösung (und auch der Code) wird zu kompliziert.

Überprüfen Sie Ihre zufällige Komplexität:

Ist der Code einfach? Wenn ich in drei Monaten darauf zurückkomme, wie lange werde ich brauchen, um den Kontext in meinem Gehirn aufzubauen, damit ich die notwendigen Änderungen vornehmen kann? Hat alles in meinem Quellcode einen klaren Zweck und vermittelt er mir und anderen Entwicklern diesen Zweck effektiv ? Wie schwer ist es, meinen Code zu testen? Je komplizierter Ihr Code ist, desto schwieriger ist es normalerweise, einen Komponententest durchzuführen. Daher verwende ich diesen Code normalerweise als Maß für die Komplexität. Normalerweise möchten Sie kleine, gut benannte und fokussierte Klassen und Methoden. Entwurfsmuster helfen Ihnen in der Regel auch dabei.

Wenn Sie ein Entwurfsmuster verwenden möchten, nur weil Sie es gerade gelesen haben, führt dies wahrscheinlich zu einer ungewollten Komplexität. Wenn Sie etwas einbauen möchten, weil Sie denken, dass es „intelligent“ ist, führt dies wahrscheinlich zu einer zufälligen Komplexität.

Ich hoffe das hilft und vergiss nicht: Einfach heißt nicht EINFACH .

c_maker
quelle
1
+1 für die Definition von Einfachheit in Bezug auf wesentliche und zufällige Komplexität.
Zach
2

Ich hatte immer das Gefühl, dass die Prinzipien hinter X11 ( http://en.wikipedia.org/wiki/X_Window_System#Principles ) es wert waren, beachtet zu werden. Dieses Ziel gelingt mir nicht immer.

Insbesondere muss ich mich immer wieder daran erinnern ... "Fügen Sie keine neuen Funktionen hinzu, es sei denn, Sie kennen eine echte Anwendung, die dies erfordert." Und "Wenn Sie 90 Prozent des gewünschten Effekts für 10 Prozent der Arbeit erzielen können, benutze die einfachere Lösung. "

nwahmaet
quelle
1

Die Frage ist: Können Sie die EXAKTE Definition von SIMPLE im Sinne des KISS-Prinzips schreiben? -Wenn da ist.

Nein.

Jeremy
quelle
3
Ich bin mir nicht sicher, ob dies eine Antwort sein sollte. Wenn Sie eine solche Definition nicht angeben können, sollten Sie IMHO nicht antworten. Wenn Sie der Meinung sind, dass eine genaue Definition im Allgemeinen nicht möglich ist, sollten Sie die Gründe erläutern.
back2dos
Was ich an dieser Antwort liebe, ist, dass sie dem KISS-Prinzip bis ins Mark folgt! +1
Treb
Einfach kann manchmal sehr kompliziert sein.
GSto
@ back2dos es ist der stärkere Anspruch; Ich gehe nicht herum und poste "Ich weiß nicht" Antworten.
Jeremy
0

Einfach - in diesem speziellen Kontext ist das genaue Gegenteil zu komplex. Einfach muss nicht heißen: Jeder Dummkopf muss es verstehen - aber man muss sicherstellen, dass man es verstehen kann, auch wenn man es nicht selbst geschrieben hat.

Komplexität könnte erreicht werden, wenn man die Referenzen nur schwer versteht - werdet sie los! Viele Dateien / Klassen miteinander verknüpft - auf keinen Fall! Und komplizierter Code (das heißt: verkettete Schleifen, mehrere ITE-Ebenen usw.) - das will niemand lesen.

Meiner Meinung nach ist es sehr einfach, eine weitere Funktion hinzuzufügen. In Klassen können Sie auch private Funktionen hinzufügen, damit Sie sich nicht mit der Schnittstelle anlegen. Nutzen Sie diesen Vorteil und beschränken Sie Ihre Funktionen / Prozeduren auf 50 Zeilen. Vielleicht noch weniger. Holen Sie sich einige aussagekräftige Namen. Auf diese Weise machen Sie die meisten Kommentare überflüssig. Auf diese Weise sind Ihre Funktionen leicht zu lesen, leicht zu ändern / zu erweitern.

Natürlich ... die letzten paar Sätze hätten so gewirkt: In Klassen gibt es die Möglichkeit, private Funktionen zu definieren. Nutzen Sie einfach diese Möglichkeit, um Funktionen in 50 Zeilen aufzuteilen, damit sie besser lesbar sind (vergessen Sie keine guten Namen, Sie brauchen also nicht so viel zu kommentieren).

ABER: Es ist viel einfacher (!), Alles zu lesen, wenn es einen Punkt gibt, der zeigt: Ich habe einen Gedanken beendet, lass uns mit dem nächsten fortfahren.

Das würde ich als einfach bezeichnen.

Philipp Wendt
quelle