Früher habe ich nie verstehen können, warum Leute Blogs schreiben – ich hatte nie das Bedürfnis verspürt, einem Blogger zu folgen. Was hätte er mir mehr an Informationen bieten können, die ich nicht über andere Medienkanäle auch hätte erlangen können, wenn ich wollte?
So bin ich auch auf Ralf Westphal über die Zeitschrift dotnetpro aufmerksam geworden. Seine Herangehensweise an die Software-Entwicklung als Ingenieursdisziplin, an den Entwurf von Software, war in seinen Artikeln so grundsätzlich anders und unkonventionell, frei von aus der Uni und den Erfahrungen im Beruf gewohnten Schemata, und damit innovativ, dass ich keine seiner Ideen mehr verpassen wollte. Seitdem folge ich regelmäßig seinem Blog.
Die Software-Entwicklung als Ingenieursdisziplin hat aus meiner Sicht aktuell zwei prinzipielle technische Herausforderungen: Nebenläufigkeit und Komplexität der Architektur. Beides zu meistern sind notwendige Voraussetzungen, um sie als Ingenieursdisziplin zu professionalisieren und letztendlich die Qualität der entwickelten Software zu erhöhen.
Für beides bietet Ralf mit seinem Ansatz des Flow Designs eine Lösung.
Ich halte Flow Design für einen revolutionären Ansatz um vor allem der Komplexität der Entwicklung von Software-Systemen beizukommen. Ich denke sogar, es könnte zu einem Paradigmenwechsel führen, ähnlich dem beim Übergang vom imperativen Design zu objekt-orientiertem Design.
Natürlich ist ein Programmierparadigma in jeder turingmächtigen Sprache umsetzbar, so wie man ein objektorientiertes Design auch in C umsetzen kann. Es ist nur sehr viel einfacher, wenn man entsprechendene Werkzeuge zur Unterstützung hat; wie zum Beispiel eine objektorientierte Sprache. Auch für das Flow Design gibt es solche Werkzeuge – eine recht einfache Sprache (DSL) für die Spezifikation des Flows und eine Runtime, die Operationen an diesen Flow bindet und sie auf ihm ausführt.
Diese Werkzeuge stehen zur Zeit nur für die .NET-Plattform zur Verfügung. Da ich aber meistens auf der JVM-Plattform unterwegs bin, fehlen sie mir dort. Um produktiv in diesem Paradigma auch auf der JVM-Plattform entwickeln zu können, habe ich angefangen, Ralfs Weg auf dieser Plattform nachzugehen. Dieser Blog soll diesen Weg dokumentieren.
Als Implementierungssprache habe ich Scala gewählt. Einerseits verfügt diese Sprache über mächtigere Sprachmittel als die .NET-Sprachen, was eine recht stringente Umsetzung der Flow-Konzepte aus .NET ermöglicht. Andererseits gibt mir das die Möglichkeit, Scala zu erlernen, was ich mir schon lange vorgenommen hatte.
Da ich dem Weg von Ralf folgen werde (auch wenn hier und da mal eine Abkürzung dabei sein wird ;-)), wird dieser Weg mit einer EBC-ähnlichen Implementierung beginnen. Ziel ist es jedoch, eine Flow-Runtime in Scala zu implementieren, die auch in Java implementierte Operationen verarbeiten kann. Es werden sich Eclipse-Plugins hinzugesellen, die einen Flow-DSL-Editor realisieren und mit Intellisense und Code-Completion anreichern. Alles, was eben zu einer produktiven Umgebung für das Entwickeln auf der und für die JVM-Plattform dazugehört.
Natürlich sind Werkzeuge und eine neues Programmierparadigma nicht hinreichend, um die Qualität von Software zu erhöhen. Es gehören weitere Rahmenbedingungen dazu, wie der Softwareentwicklungsprozess und die Fähigkeiten der beteiligten Entwickler. Für den Prozess hat Ralf Westphal ebenso unkonventionelle Ideen, bei denen ich ihm, aufgrund meiner negativen Erfahrung mit erlebten Prozessen, gerne folge. Zur Weiterentwicklung und stetigen Schulung seiner Fähigkeiten ist jedem Entwickler die Clean-Code-Initiative nur wärmstens zu empfehlen. Sie gibt dem Entwickler ein Wertesystem sowie Praktiken und Prinzipien an die Hand, um die Herausforderungen der Softwareentwicklung professionell zu meistern. Davon soll in diesem Blog bei Gelegenheit auch die Rede sein. (rh)