Optimieren Ja Oder Nein
 
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

Diese Frage taucht regelmäßig in verschiedensten Zusammenhängen auf und führt häufig zu langen Auseinandersetzungen. Siehe ReligionsKriege.

Es gibt Bereiche, wo die generelle Optimierung mit Recht als sinnvoll angesehen wird:

Es gibt Bereiche, wo die generelle Optimierung mit Recht als nicht sinnvoll angesehen wird:
Vielleicht ist die Fragestellung nach dem Bereich nicht so zentral. Ich würde die Frage gerne so formulieren:

Gibt es Wege, Optimierung sinnvoll durchzuführen ?

Mein Weg sieht so aus:

Bei nicht-skalierenden Algorithmen könnte eine Teststrategie immer darunter leiden, daß zu kleine Eingabedatensätze benutzt werden. Da gibt es sowohl hardwaremäßig als auch algorithmentechnisch einige Schranken, die erst bei größeren Datenmengen auftreten (zB: größe des Active-Sets oder Algorithmen mit exponentieller Laufzeit)

Etwas was mir in der Hinsicht bei meinem Computergame Probleme macht: Ich entwickle auf einem 1.5GHz Prozessor mit einer schwachen 3D-Karte (Matrox G400). Abgabe PC ist ein P-III 500MHz (deutlich schwächer als mein AMD) mit einer GeForce3? (deutlich schneller als meine G400). Dadurch kam es zu dem faszinierenden Paradoxon, daß das Spiel dort deutlich schlechter (niedrige fps) als auf meinem Rechner, da die CPU-Berechnungen pro Bild viel zu lange brauchten. Wenn ich mich jedoch stärker auf die Graphikkarte stütze - was mit der GeForce3? kein Problem ist - kann ich es zuhause nicht mehr so gut testen. -- DavidSchmitt

Ich mit dem Thema Optimierung folgende Erfahrungen gemacht:

-- MichaelJerger

Warum soll es keine Wege geben, Optimierung sinnvoll durchzuführen? Wichtig ist es, das Optimieren nicht als eine Form des Programmierens zu sehen, die im Prinzip jeder machen kann, dem die Aufgabe gestellt ist. Optimieren ist etwas, das einer gewissen Fertigkeit und einer systemnahen, emprischen Denkweise bedarf, die manchen Leuten mehr liegt und manchen weniger. Man kann das üben, in dem man hin und wieder ernsthaft versucht, das letzte aus einem Code herauszuholen und Bücher wie ProgrammingPearls liest. Optimieren ist eher wie Rätselfragen lösen, als wie Programmieren. Wenn man einmal so 6-12 Arbeitsmonate in Optimierungen hineingesteckt hat, bekommt man einen Instinkt dafür. Man kann dann ohne jeden Aufwand Systeme so anlegen, dass sie die gröbsten Performanceprobleme vermeiden und einer späteren Optimierung zugänglich sind. -- HelmutLeitner

Soll ich dann fragen: Was ist der Weg zur sinnvollen Optimierung ?
Ich bin der Meinung, daß Optimierung eher ein eigener, expliziter Arbeitsschritt als eine ständig nebenher lauffende Aufgabe ist. -- mj

Das Problem hat eigentlich zwei verschiedene Seiten: WallClockTime? und BenutzerEmpfinden?.
    • Eine Implementation, die tatsächliche Ausführungszeit durch BubbleSort? vergeudet statt zB QuickSort zu verwenden ist IMO fehlerhaft. Bei größeren Datenmengen, kommt es hier unweigerlich zu unnötigen Performanceeinbrüchen. Zugegeben, einige dieser "Bugs" sind schwerer zu finden als double-free Fehler, aber es gibt Profiler (kennt da wer was gescheites für das VisualStudio??) und Hausverstand.
    • Auf der Seite der Benutzerpsychologie ist es oft genug eine hinreichend genaue (feinauflösende/korrekte) Fortschrittsanzeige einzubauen um den Benutzer zufriedenzustellen.

"Es gibt Bereiche, wo die generelle Optimierung mit Recht als sinnvoll angesehen wird"

Tatsächlich? Macht es wirklich einen Unterschied, ob ein Button nach 1 oder 20 Millisekunden reagiert? [Das menschliche Auge reagiert schon auf geringste Verzögerungen. Wenn unter Windows jeder Button 20ms brauchen würde, bevor sich was tut würden wir wahrscheinlich alle auszucken] Oder sollte man vielleicht auch hier genauso gezielt die zeitkritischen Operationen behandeln? Oder anders herum gefragt: Wo liegt der Gewinn darin, eine Operation zu optimieren, die nicht zeitkritisch ist?

Wo liegt der Gewinn für den Enduser, daß neue Versionen einer Software eine neue PC-Generation brauchen?

Ich denke, der Unterschied liegt eher darin, dass in den oben genannten Bereichen besonders viele Operationen als zeitkritisch empfunden werden. -- IljaPreuß

Bei oberen Bereichen ist eben die Mehrheit des Codes zeitkritisch und die Performance ist ein ständiges Entwicklungsziel. Also gibt es bei den Personen und den Firmen eine hohe Wertschätzung für optimierendes Arbeiten, das ist quasi Teil der 'Entwicklungskultur'. Das gibt genauso viel Sinn, wie die gegenteilige Einstellung in den unteren Bereichen. -- hl

Es gibt meiner Meinung nach mindestens zwei Gründe, warum 'generelle Optimierung' in keinem Fall eine ökonomisch gute Wahl sein kann:

Das ist eben eine religiöse Frage.

Ich denke nicht, dass jede Diskussion die nicht innerhalb kürzester Zeit zu einem Konsens führt, in den Bereich der ReligionsKriege fällt. Ich weiß nicht, warum Du das Gefühl hast, dem wäre hier so; ich hoffe jedenfalls, aus dieser Diskussion noch einiges lernen zu können.

SoftwareEntwicklung findet statt, weil es einen Auftraggeber gibt, der die Entwicklung finanziert (das kann natürlich auch der Entwickler eines Shareware-Paketes selber sein, der seine Zeit einbringt). Es ist Sache des Aufttraggebers festzulegen, was entwickelt werden soll und mit welchen (Optimierungs-)Zielen die Entwicklung erfolgen soll. Grundsätzlich sehe ich keinen Unterschied, ob jemand "Time to Market", "Performance", "Entwicklungskosten", "Wartbarkeit" oder "Wiederverwendbarkeit" optimieren will. Der SoftwareEntwickler sollte meiner Meinung nach kein Missionar sein, sondern die Intentionen des Auftraggebers umsetzen. -- hl

Selbstverständlich ist es Aufgabe des Auftraggebers, die Prioritäten der Entwicklung festzulegen. Und natürlich gibt es Gründe für eine 'generelle Optimierung' (z.B. weil es Spaß macht, weil man etwas bei lernt etc.). Ich denke nur nicht, dass es ökonomische Gründe für eine solche Entscheidung geben kann.

Der übliche Auftraggeber will ja nicht 'Performance um jeden Preis' (denn sonst würden wir wohl alle grundsätzlich in Assembler programmmieren); er möchte eine Form von Kompromiss zwischen den von Dir genannten Eigenschaften (und, nicht zu vergessen, "Verwendbarkeit"). Unsere Aufgabe als SoftwareEntwickler ist es, die beste technische Möglichkeit zu finden, den Performance-Ansprüchen des Auftraggebers gerecht zu werden. Ich denke nicht, dass 'generelles Optimieren' diese Ansprüche erfüllt, lasse mich aber gerne vom Gegenteil überzeugen.

Ich kann mich auch an kein Betriebssystem oder Spiel erinnern, dessen Performance-Probleme im Beta-Test nicht (meist zurecht) eben auf den Beta-Status geschoben wurden. Häufig werden diese Optimierungen doch sogar erst in einem Patch, Service-Pack oder gar Versions-Update nachgereicht! -- ip

Es macht allerdings durchaus Sinn, in einigen Bereichen selbst in der Anwendungsentwicklung Optimierungen durchzuführen. Dies wird der Kunde, wie im obigen Fall erwähnt, zwar nicht bezahlen wollen, allerdings wird er es auch nicht akzeptieren unzulässig 'langsame' Programme abzunehmen. Als Beispiel sei hier der Button erwähnt. Wenn dieser sofort auf die Benutzereingabe reagiert und ein Programm erst danach 'zu arbeiten' anfängt, ist dies ein wesentlich besseres GUI. Insofern trägt der Button der innerhalb einer Millisekunde reagiert zur Akzeptanz eines Produktes bei. Dies ist auch der Grund, weshalb der Mauszeiger bei den neueren BS die höchste Prozessorzeit bekommt. -- cc


CompilerProgrammierung?!

Moment mal... wieso soll man ausgerechnet an einem Compiler blindwütig optimieren? Ein optimierender Compiler ist etwas anderes als ein optimierter Compiler. Ich möchte erstens einen korrekten Compiler, zweitens einen, der für mich optimiert und erst drittens einen, der selbst optimiert ist (auf Geschwindigkeit und Platzbedarf vermute ich mal). Gerade ein Compiler ist überhaupt kein zeitkritisches Stück Software. (Wobei ich anerkenne, das Teile(!) von Betriebssystemen und Actionspielen durchaus optimierungswürdig sind. Wie üblich nach dem Profilieren.)


Siehe auch: SoftwareOptimierung SoftwareOptimierungDiskussion WardsWiki:LazyOptimization
KategorieOptimierung
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 5. September 2005 18:14 (diff))
Suchbegriff: gesucht wird
im Titel
im Text