Ich bin ja im Wesentlichen der Meinung von ARadauer. (Und jetzt schlagt mich. )
Leider hat ARadauer euigentlich nur gesagt, dass er gegen Optimierungen ist, zumindest bis jetzt
Aber da du ja deine Meinung kund tust..
Die Kunst besteht mE darin, gar nicht erst Software zu schreiben, von der man weiß, dass sie langsam ist. Oder anders herum: Wenn ich sehe, dass ich etwas schneller/performanter schreiben könnte, dann schreibe ich das gleich mal so und warte eben nicht darauf, dass das zu einem Performanceproblem ausartet.
das ist der Knackpunkt, du kannst von vornherein gar nicht wissen was langsam bzw. schneller ist, höchstens in Ausnahmefällen weiss man was wirklich relevant ist.
Dabei meine ich jetzt nicht, dass man möglichst unverständlichen da "optimierten" Code schreiben soll. Aber wenn ich bereits beim Entwurf(!) sehe, dass ich die Wahl zwischen O(n²) und O(n log n) habe, dann versuche ich doch, mir die O(n log n)-Option wenigstens offenzuhalten, indem ich entsprechend abstrahiere bzw. entwerfe. Auf keinen Fall würde ich Software so entwerfen, dass sie bewusst langsam ist; im Sinne von: Beim Entwurf wäre mir bewusst, dass es auch um Größenordnungen schneller hätte gehen können.
Um dein Beispiel aufzugreifen:
O(n²) vs. O(n log n)
Hört sich super an, sagt aber gar nix über die Performance aus, da fehlt nämlich das wichtigste... der Kontext.
Wenn während dem ganzen Programm dieser Algorythmus nur ein einziges mal auf 2 Elemente angewendet wird, ist es irrelevant ob O(n²) oder O(n log n), die "Optimierungen" würden wohl im Microsekundenbereich liegen -> nicht relevant
Deswegen erst messen was relevant ist, danach optimiert man die relevanten Teile, und diese Optimierungen müssen auch wieder überprüft werden, ob sie denn das gewünschte Ergebniss gebracht haben.
Die 80/20 regel zu ingorieren fürt immer dazu, dass der Code sehr schlecht wird, aber cniht unbedingt schneller, nur darum geht es beim optimieren: Messbare Optimierungen, die anderen sind keine.
Die Lehrmeinung ist wohl auch, dass man Code nach Möglichkeit wiederverwenden soll. Wenn ich mich aber bewusst für die schlechtere O(n²)-Option entscheide, dann sage ich damit auch, dass ich gar nicht will, dass mein Code oft wiederverwendet wird.
Das ist nicht die Lehrmeinung, dass kommt aus der Realität, Perfomace ist selten wichtiger als Wartbarkeit, ltzteres kostet nämlich richtig Geld, dafür könnte man oft auch schnellere Hardware kaufen.
Ich denke, dass es einen Zusammenhang zwischen der Wiederverwendbarkeit und der Performance eines Codes gibt: Je performanter ein Code ist, desto öfter möchte er eingesetzt bzw. wiederverwendet werden. Einweg-Code ist per definitionem nicht auf Wiederverwendbarkeit ausgelegt; und dazu gehören auch gewisse Qualitäten in Sachen Performance.
In der Realität geht es darum, dass der Code das macht was er soll, dass er verständlich ist und Doku hat, wenn er dann noch Performant ist ist das gut.