Warum keine vorzeitige Optimierung?
Ich kann den hate dagegen garnicht nachvollziehen. Geachwindigkeit ist doch wichtig. Und wenn man schon direkt die passende Struktur hat muss man nachher nicht alles umschreiben.
Ich nehme mal an es geht wieder nur ums Geld. Aber deswegen ist es ja noch lange nicht "dumm" oder "schlecht"?
Wo ist der Kontext ? Welche Frage quält Dich ? Optimieren lässt sich nur im Nachhinein (während Prototypphase), oder siehst Du das anders ?
Warum Kontext? Es geht um "Premature Optimization"
Ich denke man kann jederzeit optimieren
2 Antworten
Optimierung und eine performante Architektur bauen sind zwei verschiedene Sachen. Optimierung setzt eine Struktur voraus, die Optimierungspotential bietet. Eine Software von Anfang an hoch performant zu gestalten ist keine Optimierung.
Optimierung ist aber nicht immer die Erhöhung von Geschwindigkeit. Der Begriff "Premature Optimization" bedeutet auch eher, dass jemand anfängt "Türklinken zu vergolden bevor der Rohbau des Hauses überhaupt fertig ist". Da geht es nicht um Performance, sondern um Übereifrigkeit.
Erst mal frage ich mich, ob du dich damit überhaupt beschäftigt hast, wenn ja, welchen Aspekt verstehst du daran nicht?
Außerdem in welchem Kontext? Wenn du dich auf ein konkretes Beispiel beziehen würdest, könnte man dir auch sagen wo dein Fehler liegt.
Generell auf Software Entwicklung bezogen gibt es ein paar Gründe:
- Du weist nicht, ob der Aspekt später überhaupt so genutzt wird. Es kann ja sein, dass sich die Anforderungen ändern und die Optimierung oder die Funktion generell dann eh ersetzt und gestrichen werden muss. -> durch zu frühe Optimierung verschwendet man Zeit
- Es kann sein, dass man die falsche Stelle optimiert, wenn die Software weiter entwickelt kann man besser sagen wo Optimierungen wirklich nötig sind und den größten Effekt haben. -> durch zu frühe Optimierung hat man nicht den besten Effekt
- Höhere Komplexität, der Code ist durch Optimierungen schwerer zu verstehen und teils dadurch auch schwerer zu verstehen, schwerer anzupassen und bietet mehr Fläche für Bugs. -> durch zu frühe Optimierung sinkt die Code Qualität
Das sind drei Punkte die auch bei einem sehr guten Entwickler für schlechtere Software und Produktivität sorgen.
Außerdem wirkt es ein bisschen so als würdest du vorzeitige Optimierung mit vernünftiger Planung, guten Code schreiben oder Optimierung generell verwechseln. Wenn man ein mal weiß, dass eine Optimierung nötig ist, dann sollte man diese auch überlegen. Wenn man eine Software aufbaut, dann kann man sich Optimierungen durch eine flexible Architektur zumindest ein Stück weit offen halten, da wo es sinnvoll ist und nicht stört - aber man muss sie nicht direkt implementieren. Und wenn man effizienten Code schreiben kann und das eben nicht zeitintensiver als nötig, komplexer als nötig ist, dann ist das keine vorzeitige Optimierung sondern einfach guter Code.
Warum gehst du direkt davon aus das es mein Fehler ist?
Weil du selber sagst du verstehst das Konzept nicht und warum es schlecht ist :D
Richtig, Ich sehe das ständig überall das Leute angegriffen werden dafür. Es scheint jemanden zu stören.
Wo denn, was ist der Kontext? Ich kann deine Auffassung halt nicht bewerten wenn du keine Beispiele nennst.
Es kann ja auch sein, dass es sinnvolle Optimierungen sind die andere falsch bewerten, aber die Frage war ja warum zu frühe Optimierung schlecht ist, und nicht ob das da zutrifft. Und am Ende kann das natürlich auch jeder anders sehen.
Würdest du ein Codebeispiel machen sodass man über was konkretes sprechen kann?
Das ist schwer, weil man so was ja nicht absichtlich macht und ich kann ja auch nicht unbedingt jeden Code teilen. Ein häufigeres Beispiel ist ein Programm multithreaded zu machen bevor man weiß ob so etwas überhaupt nötig ist. Vielleicht stellte man später z.B. fest, dass so viel Abhängigkeiten zwischen Threads bestehen, dass man gar keinen richtigen Vorteil hat.
Ich meine Multithreading führt auch zu einer Leistungseinbuße.
Wo denn, was ist der Kontext? Ich kann deine Auffassung halt nicht bewerten wenn du keine Beispiele nennst.
Puh da müsste ich suchen. Aber es scheint so das sobald die Performance "gut genug" ist ist alles weiter vorzeitige optimierung. Einige sagen auch man müsse erst beweisen das es denn ein problem sei. Aber wie soll das gehen wenn die meisten mit einem Highend pc rumlaufen?
Ich meine Multithreading führt auch zu einer Leistungseinbuße.
Naja sinnvoll eingesetzt nicht. Das kann einen sehr großen positiven Effekt haben, wenn sinnvoll und richtig umgesetzt.
Einige sagen auch man müsse erst beweisen das es denn ein problem sei.
Ja, das ist auf jeden Fall sinnvoll. Zumindest ein mögliches bzw. realistisches Problem. Die Kosten / Nutzen gegenüberstellen und bewerten was der worst case ist, und was die Auswirkungen wären. Z.B. lädt mal 5 Sekunden länger ist nicht so schlimm wie auf ein mal hat man mehr Daten als erwartet und alles steht still. Aber so muss man Probleme allgemein bewerten.
Aber wie soll das gehen wenn die meisten mit einem Highend pc rumlaufen?
Indem man auch auf schlechter Hardware testet, Highend PC klingt nach Gaming, da testet man halt auch auf dem schlechtesten PC den man offiziell supported/empfiehlt. Im Web kann man z.B. über Debugging Tools eine schlechte Netzwerk Verbindung simulieren. Über Profiler kann man ja auch generell Performance analysieren.
Wie oben erwähnt geht es ja auch um Code Quality, oft wird tatsächlich Performance in der Wichtigkeit überschätzt. Gerade wenn man eben durch unnötige Komplexität, die ja durch Optimierung entstehen kann, zusätzliche Bugs hat.
Naja sinnvoll eingesetzt nicht. Das kann einen sehr großen positiven Effekt haben, wenn sinnvoll und richtig umgesetzt.
Was wäre sinnvoll und was nicht?
Also ich hoffe die Vorteile von Multithreading muss ich jetzt ja nicht erklären…
Sinnvoll ist es da, wo man weiß dass es einen Nutzen bringt der den Aufwand rechtfertigt. Der Hintergrund hier ist, dass man aber erst mal den Nutzen richtig einschätzen können muss. Z.B. durch Performance Testing, und Analyse des Kosten/Nutzen Verhältnis.
Ein häufiger Fehler ist, davon auszugehen, dass eine Version die naheliegend wäre und einfacher simpler Code ein Problem hätte welches man optimieren muss, ohne die These überhaupt zu testen und zu schauen ob so eine Optimierung notwendig oder die konkrete Idee effektiv ist.
Manche schreiben z.B. eine Version und statt es dabei zu belassen und zu schauen ob das so funktioniert oder an anderer Stelle sinnvollen Fortschritt zu erzielen wird die Stelle direkt umgebaut und erweitert aka. optimiert. Das muss tatsächlich nicht mal immer Performance sein. Es könnte auch irgendeine "elegantere" Version sein, zusätzliche Features die nie benötigt werden und ähnliches.
Warum gehst du direkt davon aus das es mein Fehler ist?
Richtig, Ich sehe das ständig überall das Leute angegriffen werden dafür. Es scheint jemanden zu stören.
Würdest du ein Codebeispiel machen sodass man über was konkretes sprechen kann?