Das größte Hindernis bei der SoftwareOptimierung ist das eigene Ego: Man glaubt zu wissen, wie man optimale Software schreibt. Aber: niemand ist perfekt, keine Situation gleicht der anderen, Optimierung ist ein "moving target", nach dem man sich ständig neu ausrichten muss.
Deshalb gibt es nur eine sichere Optimierungsstrategie:
Kritik |
AlleAlternativenPrüfen ist meistens sehr aufwendig, manchmal gar unmöglich. In den allermeisten Fällen brauche ich auch nicht die beste Lösung, sondern nur eine ausreichende. AlleAlternativenPrüfen ist dann sehr unökonomisch.
Nun es ist nicht möglich in einem halbwegs "normalen" Projekt alle Alternativen auszuprobieren. Es ist sicherlich aber auch keine gute Idee alles auf eine Karte zu setzen. Frei nach Weinberg: "Nicht ist gefährlicher als eine Idee, wenn es die einzige ist".
Alternative |
TueDasEinfachsteDasFunktionierenKönnte, überprüfe, ob es funktioniert hat, d.h. ob es sich für die konkrete Situation um eine ausreichende Lösung handelt. Wenn nicht, probiere die nächst-einfache Lösung; wenn Du eine ausreichende Lösung gefunden hast, bist Du fertig.
Diskussion |
Beispiel: Ich brauche einen Sortieralgorithmus, der schneller ist als BubbleSort?. Muss ich dann wirklich sowohl MergeSort, als auch QuickSort (und eine handvoll weiterer SortierAlgorithmen?) probieren, bevor ich mich für "den richtigen" entscheide?
Das glaube ich nicht. Da das Erhöhen von Performance fast immer andere negative Effekte hat (komplexeres System, damit erhöhte Entwicklungs- und Wartungskosten z.B.), gibt es allermeistens einen Punkt, wo eine weitere Optimierung keinen ökonomischen Sinn mehr macht.
z. B. Ein Management-Informationssystem, das auf Laptops unterwegs in Verhandlungen komplette statistische Auswertungen von Millionen Versicherungsfällen in Vertragsverhandlungen zur Verfügung stellen soll (1 Minute ist besser als 3 Minuten, aber 30 Sekunden oder 10 Sekunden wären noch besser).
Wir können die Zeit auch auf 5 Sekunden drücken, schaffen es dann aber zeitlich nicht mehr, drei der Versicherungsarten zu implementieren. Was ist dem Kunden wichtiger?
z. B. Ein Datenbanksystem, dessen Performance gegen Konkurrenzprodukte die Marktchancen wesentlich beeinflusst.
Dann brauchen wir aber nicht maximale Performance, sondern nur bessere als die Konkurrenz. Und gleichzeitig müssen wir noch darauf achten, nicht zu teuer zu werden - für ein "zu schnelles" Produkt ist eventuell gar nicht genug Markt da...
z. B. Eine WikiSoftware, dessen Performance die Anzahl der auf einem Server gleichzeitig unterstützbaren Wikis bzw. Benutzer bzw. Interaktionen limitiert.
Wieviele tausend Wikis möchtest Du gleichzeitig betreiben? Jubelst Du, wenn es stattdessen zehntausende sein dürfen?
Zugegebenermaßen gibt es aber wohl Situationen, in denen man keine feste Anforderung hat, sondern eine Kosten-Nutzen-Abwägung treffen muss. Muss man dafür AlleAlternativenPrüfen? Ich bin mir nicht sicher - ich würde mich in den meisten Fällen wohl eher auf die offensichtlichsten (und einfachsten) Alternativen beschränken und nur bei Bedarf stärker in die Breite gehen. -- IljaPreuß
Diese Seite ist unabsichtlich so etwas wie ein Reibungspunkt zu ExtremeProgramming geworden, wobei ich nicht ganz verstehe, warum das so ist. Es besteht ja Einigkeit, dass Optimierung immer eine separate Anforderung sein muss, die nie freihändig vom Programmierer in Angriff genommen werden darf. Aber teilweise Optimierung, vollständige Optimierung, SpikeSolution oder AlleAlternativenPrüfen könnte jederzeit auch in einem XP-Projekt zu einer Aufgabe werden. Deshalb sehe ich den Konflikt nicht. Der Kunde sagt z. B. "Wir haben ein Leistungsproblem, das gelöst werden muss. Wir möchten vordringlich wissen, welche Leistungsreserven wir zu welchen Kosten erschließen können, ob sich dies lohnt oder ob wir besser die Hardware austauschen.". -- hl