Mehr Power!
vom 11. September 2010
In letzter Zeit höre ich immer häufiger, das man hier oder dort mehr Leistung, mehr Server, mehr Mitarbeiter oder mehr Software-Tools braucht. Natürlich ist es nicht schlecht wenn man von allem viel und reichlich hat, doch ich bin der Meinung, dass oftmals mit ein wenig Anstrengung mehr mit begrenzten Mitteln erreichen lässt.
Besonders bei der Programmierung lässt sich häufig ein vielfaches an Rechenpower oder Speicherverbrauch einsparen. Ein simples Profiling der Anwendung zeigt schnell Engstellen auf, die sich mit ein paar einfachen Zeilen Code (Eine Variable an einer anderen Stelle definieren, Abbruchkriterien an den Anfang der Methode schreiben, Wiederverwendung von Speicher, unnötiges Kopieren, unnötige SQL-Joins rauswerfen etc.) eliminieren lassen.
Im Serverbereich ist es natürlich das einfachste, neue Hardware zu bestellen, sobald der Server in der momentanen Konfiguration anfängt, an einer seiner Grenzen (Platz, Antwortzeit, Zugriffszahl) zu stoßen. Beim Aufsetzen eines Systems wurde anfangs vielleicht nicht daran gedacht, dass zwei Monate später 2000 User täglich einen inperformanten Service nutzen. Oft lohnt es sich, Feintuning an den Parametern vorzunehmen oder schlankere Software einzusetzen. Es braucht nicht immer ein J2EE Application Server in einer eigenen VM zu sein, um ein paar statische Webseiten auszuliefern.
Oft reicht es auch, die Zeiten zu nutzen, in denen die Hardware sowieso nichts zu tun hat. Vermutlich stört es nicht weiter, wenn nachts um 2 Uhr ein Skript 10.000 Bilder umkonvertiertund und zuschneidet. Den Cloud-Ansatz von Google, Amazon und Co. finde ich auch nicht so verkehrt.
Auch bei Software-Tools bin ich immer wieder überrascht, wie viel Geld dafür ausgegeben wird und wie ineffizient diese dann genutzt werden. Ich bin ein großer Freund von Open Source und ich bin bis auf ein paar wenige Ausnahmen sehr zufrieden und auch produktiv damit.
In dem Buch "7 Habits of Highly Effective People" von Stephen Covey (Seite 172) ist eine Grafik beschrieben, die mir seit Jahren in solchen Situationen immer ins Gedächtnis springt:

Ich finde gerade das (aus bestehendem das Maximum herausholen) so spannend. Fast alles lässt sich mit etwas Verstand effizienzer/performanter/einfacher gestalten. Diese Lektion habe ich noch einmal sehr deutlich gegen Ende meines Studiums erfahren: Ein komplexes Problem muss nicht komplex programmiert werden. Die einfachen Lösungen sind nicht nur leichter zu verstehen, sondern meistens auch performanter und schneller.
Allerdings erfordert diese Art der effizienten Ressourcenplanung auch Zeit, Geduld und Hirnschmalz. Wie seht ihr das? Ist es das wert oder ist die Arbeits(kraft|zeit) zu teuer, um sie mit solchen Dingen zu behelligen?
del.icio.us,
Kommentare
Nur muss ich im Büro manchmal Abschnitte machen, da da Budget mancher Projekte nicht erlauben übermäßig viel Zeit zu investieren ... am Ende des Monats zählt dann doch das Konto.
Ich bin der Meinung, dass eine gesunde Investition von zusätzlichem Gedankengut absolut notwendig ist um weiter zu kommen! Auf diesem Weg habe ich schon so viel entdecken können, das ist toll.
Als ich meine Abschlußarbeit am DIT gemacht habe und an meinem momentanem (wenn auch im Moment ruhendem Projekt) arbeitete habe ich mich stark mit der optimierung der Daten auseinander gesetzt.
Eins der Schlagwörter hierbei war Caching.
Oft gebrauchtes im RAM behalten statts 1000mal die selbe Anfrage durch eine Datenbank durch jagen.
Dein Punkt mit der zu komplexen Software hat was ganz schön wahres dran. Seit PCs mehr und mehr Power haben sind viele Programme unnötig Komplex, Aufwendig und Ressourcenfressend Programmiert worden.
Die einzigen zwei Industrien in denen meiner Ansicht nach Hardwareeffizient programiert wird sind:
* Spiele Industrie - Ein Stück Hardware aus dem das maximum an Leistung geschöpft werden muss. Wahre zauberer in der Richtung sind wohl die Jungs hinter der God of War Serie.
* Große Server wie Suchmaschinen und Social Networks.
Google generell versuchen jede Software effizient zu entwickeln. Man bedenke einfach nur die Performance von Picasa gegenüber anderen Viewern.
Das Problem ist wie immer die zur Verfügung stehende Zeit um etwas sinnvoll zu designen. Sobald Du mal nur noch am reagieren bist und nicht mehr am agieren, ist es zu spät. Entweder Du packst dann eben noch ein paar Stunden extra drauf oder es läuft eben wie bisher.