Blogosphäre (aus JavaSPEKTRUM 06/08)
5. Dezember 2008Die übliche wilde Themenmischung der JavaSPEKTRUM-Blogosphäre: Diverse Cloud Computing-Varianten, Clojure als Lisp-Dialekt für die JVM und verschiedene Fundstücke – das typische Ergebnis eines Web-surfenden Geeks mit der Aufmerksamkeitsspanne eines Dreijährigen.
### Wolken
Wenn es ein Thema gibt, bei dem sich die Anbieter aktuell mit Ankündigungen überschlagen, dann ist es Cloud Computing. Tatsächlich gibt es auch hier schon wieder die in solchen Fällen üblichen Definitionsschlachten – man könnte das Gefühl bekommen, derjenige, dessen Definition sich durchsetzt, glaubt damit auch den größten Anteil vom Kuchen gewinnen zu können … Wenn wir von einer relativ unverfänglichen Definition ausgehen (Cloud Computing als “Nutzung von Rechenkapazität bei einem Dienstleister im Internet”), gibt es diverse spannende Neuigkeiten. Über den aktuellen Stand bei Cloud Computing-Pionier Amazon.com informiert CTO Werner Vogels immer sehr zeitnah in seinem Blog, so z.B. über das Ende der Beta-Phase der “Elastic Computing Cloud (EC2)” und die Verfügbarkeit von Microsoft Windows. Microsoft selbst springt nunmehr ebenfalls voll auf den Zug auf und kündigt mit Azure eine eigene Cloud-Computing-Plattform an. Über Googles AppEngine habe ich schon früher berichtet, ebenso wie über die vielen Dienste rund um die GData-APIs. Weniger bekannt, aber deswegen keinesfalls weniger interessant ist force.com, ein “Platform as a Service”-Ansatz des Online-CRM-Anbieters salesforce.com. Dessen Angebot steht am einen Ende eines Spektrums, auf dessen anderer Seite die eher technischen Dienste von Amazon.com stehen. Für die force.com-Plattform gibt es eine eigene Programmiersprache und IDE, zahlreiche APIs und einen Online-Store für Anwendungen, die für die Plattform entwickelt wurden und auf dieser laufen. Vielleicht lässt sich eine Parallele zwischen Amazon.com EC2 und Individualsoftware-Entwicklung auf der einen und Plattformen wie force.com und Standardsoftware wie SAP auf der anderen Seite ziehen – es gibt gute Argumente für beide Extreme, viele Varianten dazwischen und keinen Grund, anzunehmen, eine von beiden würde die andere vollständig im Markt ersetzen. In jedem Fall jedoch werden sich auch Software-Entwickler mit den Konsequenzen des Cloud Computings auseinandersetzen müssen.
### Clojure
Keine Blogosphäre ohne mindestens eine neue, mehr oder weniger abstruse Programmiersprache – es gibt Traditionen, mit denen ich auch diesmal nicht brechen möchte. Wer Java zu langweilig findet, auf die JVM aber nicht verzichten möchte, außerdem funktionale Sprachen wie Lisp mag und die in Erlang systeminhärente Unterstützung von Parallelverarbeitung schätzt, dem kann ich Clojure sehr ans Herz legen. Wie bei Lisp oder Scheme werden Clojure-Programme selbst in Clojure-Datenstrukturen ausgedrückt (mit den Lisp-typischen Klammern); es ist ein vollständiges Makrosystem enthalten; sowohl ein interaktiver Modus wie auch eine Kompilierung in Bytecode wird unterstützt. Sprachdesigner Rich Hickey begründet in einem sehr verständlichen Designdokument die grundsätzlichen Entwurfsentscheidungen, insbesondere zum Thema Parallelität: Clojure setzt auf eine strikte Trennung von Identität und Status.
Dazu muss man sich den Zusammenhang zwischen der aktuellen Hardware-Entwicklung und der steigenden Popularität funktionaler Programmiersprachen verdeutlichen. Es ist mittlerweile schon ein Allgemeinplatz, wenn man feststellt, dass unserer Rechnersysteme sich nicht mehr primär über steigende Taktfrequenzen, sondern eine steigende Parallelisierung durch mehrere Prozessorkerne weiterentwickeln. Die Programmierung von Anwendungen, die solche Multi-Core-Systeme ausnutzen, ist nicht trivial – nicht umsonst versucht man auch in der Java-Welt z.B. in EJB- oder Servlet-Containern, das Thread-Management dem Applikationsserver zu überlassen. Ideal wäre es aber, wenn nicht nur parallele Requests in einer Client/Server- oder Web-Anwendung, sondern generell alle Berechnungen ohne Zutun des Entwicklers parallelisiert werden könnten. Leider machen uns in Programmiersprachen wie C, C++ oder Java Seiteneffekte einen Strich durch die Rechnung: die Laufzeitumgebung hat keine Chance, Dinge zu parallelisieren, die wir nicht explizit dafür vorbereitet haben.
Funktionale Sprachen eignen sich deutlich besser für eine Parallelisierung, denn in ihrer puren Form gibt es keine Seiteneffekte – die Laufzeitumgebung kann also nach Lust und Laune (bzw. Anzahl und Verfügbarkeit von CPU-Ressourcen) die Aufgaben verteilen. Diesen Ansatz verfolgt auch Clojure: Werte (Status) sind grundsätzlich unveränderlich. Akademisch sind rein funktionale Sprachen interessant, in der Praxis ist jedoch schon die Ausgabe auf die Konsole ein Seiteneffekt (”echte” rein funktionale Sprachen sind daher recht nutzlos). Für die Fälle, in denen man Variablen ändern, d.h. ihnen einen neuen Status zuweisen will, setzt Clojure auf das Konzept von “Software Transactional Memory”: Von der Laufzeitumgebung parallelisierte Berechnungen greifen damit im Fall der Fälle transaktional auf gemeinsame Variablen zu.
Also: alle Programme so schnell wie möglich von Java auf Clojure umstellen? Kaum. Aber einen Blick ist die Sprache auf jeden Fall wert, nicht zuletzt wegen der exzellente Dokumentation und der sehr aktiven Community.
### Fundstücke
Aus der Rubrik “worüber ich sonst noch gestolpert bin”: Software-Entwickler, die ihren Job mit Leidenschaft ausüben (und dazu zählen natürlich alle Leser dieser Publikation), sind in der Regel nicht mit einem Mangel an Selbstbewusstsein ausgestattet, wenn es um ihre Fähigkeiten geht. Aber fast alle sind sich darin einig, dass es gewisse Dinge gibt, die man als “echter” Programmierer (und natürlich auch als echte Programmiererin) gar nicht können darf. Dazu zählt an vorderster Front die visuelle Gestaltung, sei es von Anwendungs-UIs oder Webseiten. Stefano Mazzochi befasst sich mit diesem Phänomen in zwei hervorragenden Blogposts. Im ersten erklärt er, wie man auch als normalsterblicher Geek besser zueinander passende Farben finden kann; der zweite enthält eine detaillierte und sehr verständliche Anleitung zum Design einer Webseite mit HTML und CSS.
Auch dieses Jahr gibt es für die OOP 2009 wieder ein Gemeinschaftsblog, das aus den Blogs verschiedener Teilnehmer aggregiert wird. Ein beispielhafter Beitrag, der mir persönlich aus der Seele spricht, stammt von Ralf Westphal: Er kommentiert einen Artikel von Rolf Unterberger, in dem eine Reihe von Skills aufgezählt werden, die ein Software-Entwickler heutzutage mitbringen müsse.
### Farewell
Damit sind wir wieder einmal am Ende – und zwar nicht nur dieser Ausgabe, sondern auch der Kolumne: die Blogosphären der vergangenen zwei Jahre haben Sie hoffentlich zum Verfolgen der Links motiviert (die sie auch diesmal wieder in der Online-Version unter http://www.sigs.de/blog/js/ finden), aber wenn es am schönsten ist, soll man bekanntlich aufhören. Wie immer freue ich mich über Kommentare!
Beiträge