Atkatla schrieb:
Dieses ursprüngliche Zitat von Knuth bezog sich auf "worrying about efficiency in the wrong places and at the wrong times". Wenn man also Software auf Szenarien optimiert, die niemals eintreten (z.B. ein Blender auf 1 Million Kernen)
Unter dieses Zitat fällt nicht, die Software durch fehlende Optimierung unbenötigte oder unsinnige Dinge berechnen zu lassen, weil es ja angeblich egal sei, weil ja ohnehin viel Ressourcen zur Verfügung stünden, wie von
@JoeDoe2018 angenommen.
Klar ist, dass Optimierung Geld kostet, durch die Arbeitszeit der Programmierer und deswegen mitunter nicht den Stellenwert bekommt, den sie haben sollte.
Ich interpretiere das Zitat anders.
Für mich fällt jede Optimierung, die nicht notwendig ist unter diese Definition.
Und notwendig ist es nur, wenn die Performance unter der geforderten bleibt, was eigentlich immer an der HW liegt. Ein Beispiel dafür wäre Raytracing, alles was kein Raytracing ist, ist eine Optimierung Aufgrund dafür fehlender Leistung.
Finde die folgende Erläuterung überraschend knapp und gut
(...) If there is any doubt whether an optimization is premature, then it is premature!
Zu der Zeit als das ursprüngliche Zitat entstanden ist gab es den Fall praktisch nicht, dass 'zu viel Leistung' vorhanden war. Heute ist es der Standardfall.
Vor allem auf die Software-Entwicklung bezogen halte ich es für den einzig richtigen Ansatz nicht zu optimieren bis es einem auf die Füße fällt.
Alles andere führt dazu, dass im Namen einer vermeintlichen "Optimierung" Code geschrieben wird, der schwieriger zu lesen, verstehen und ändern ist, was ein viel höheres Risiko birgt als ein Programm das halb so schnell läuft wie es potenziell könnte. Hab ich selbst schon gesehen und gemacht
Optimierung ist böse, es ist ein notwendiges übel, dass wir in einer Welt von limitierten Ressourcen brauchen.
Die Menge der Ressourcen hat sich seit 1974 aber vervielfacht, und selbst damals meinte Knuth, dass Optimierung in etwa 3% der Fälle sinnvoll ist. Damals war gerade ein Intel 8080 erschienen, (für einen besseren Vergleich) ein paar Jahre später lieferte ein 8086 mit einem Coprozessor ca. 1 MFlops, heute leistet ein 10900K lt. Intel 592 GFlops. Für mich haben sich damit die 3% entsprechend der Leistung um Faktor 592000 reduziert