News

Dienstag, 24. Januar 2012 | News

Wider die polyglotte Avant Garde: Ein Plädoyer für die Einfachheit Javas

(Link zum Artikel: http://www.it-republik.de/jaxenter/news/061561)
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share

In Zeiten, in denen JVM-basierte Sprachen wie Pilze aus dem Boden schießen und die Tooling-Unterstützung für polyglottes Programmieren voranschreitet, hält Lofi Dewanto in seinem Blog ein Plädoyer für die Rückkehr zur Einfachheit: Nach intensiven Liebäugeleien mit der Mehrsprachigkeit ist Dewanto zu der ernüchternden Erkenntnis gelangt, dass das beste Konzept immer noch die eine universelle Programmiersprache sei, mit der sich alle Aspekte einer Anwendung erledigen lassen.

Damit spricht Dewanto exemplarisch für eine Gruppe von Entwicklern, die sich wieder mehr an Werten wie "Wartbarkeit", "Lesbarkeit", "Pragmatische Machbarkeit" orientieren - Werte, die man allgemein der Sprache Java zuschreibt.

Die polyglotte Avant Garde
In der Avant-Garde der Software-Entwicklerzunft konnte man sich seit 2006 wähnen, folgte man dem u.a. von Martin Fowler und Neal Ford vertretenen Paradigma der polyglotten Programmierung: Für jeden Problemtyp die eigene Sprache, hier Scala, da Groovy, hier das gute alte Java, dort die eigene DSL. Und es ist ja nicht so, dass Dewanto den neuen JVM-Sprachen keine interessanten Aspekte abgewinnen könnte: Go, Groovy, Ruby, Scala und nun Dart.

Doch so spannend und produktivitätsfördernd Mehrsprachigkeit zur Entwicklungszeit auch sein mag - Dewanto hat die Erfahrung gemacht, dass polyglottes Programmieren ihm vor allem in der Maintenance-Phase eines Projekts Kopfschmerzen bereitete. Vier Punkte stellt Dewanto besonders heraus:

  • Nach dem Ausscheiden fähiger Entwickler sei es schwierig, neue Kräfte so heranzuformen, dass sie die vielen verwendeten Sprachen beherrschten. Ist es doch schon nicht selbstverständlich, in einer Programmiersprache effizient zu arbeiten, so ist es umso schwieriger und nur in Ausnahmefällen zu erreichen, in mehreren Sprachen zugleich effizient zu sein. Mit unambitionierten Programmierern ist dies schlicht nicht machbar.
  • Die Komplexität eines Projektes steigt auch mit der Zahl der verwendeten Technologien. Eine Struts-Webanwendung mit Ajax upzudaten (mit Action-Dateien, Form-Dateien, Struts-XML-Konfigurationen, JavaScript-Files inklusive JSON, HTML und/oder JSP-Dateien) ist schon schwierig genug – man stelle sich nun vor, noch Groovy-, Scala- oder Dart-Code mit anpassen zu müssen.
  • Das Tooling für neue Programmiersprachen ist trotz manchem Fortschritt noch nicht auf dem Stand von Java. Besonders Kompatibilitätsbrüche bei neuen Sprachversionen machen Entwicklern wie Tool-Herstellern zu schaffen. Java-1.1-Anwendungen können hingegen heute noch mit dem Java 6 Compiler kompiliert werden.
  • Eine DSL langfristig zu unterhalten ist sehr aufwändig und macht nur in großen Unternehmen Sinn. Für kleine und mittlere Unternehmen mit moderatem Budget lohnt sich der Aufwand kaum.

Zurück zur Einfachheit von Java
Nach sechs Jahren der Unterstützung für polyglottes Programmieren macht Dewanto deshalb eine Kehrtwende: Sein Wunsch ist es, dass das Paradigma "One for All Programming Language" wieder mehr Gewicht erhält:

So in year 2012, six years after my support to Polyglot Programming, I hope to see following things happen: One language for all aspects in one application is the best concept ever. I name this as “One for All Programming Language paradigm”.

Wie Englisch heute schon pragmatisch als Weltsprache eingesetzt wird, so soll auch eine universelle Sprache alle Aspekte der Programmierung abdecken. Und diese Sprache ist für Dewanto faktisch: Java!

My best solution sofar is Java + XML, that’s it, no more, no less. No mixing with Groovy, Dart, Ruby, Scala, << name your DSL here >> in one application.

Zweitens sollen in Zukunft Java-nahe Lösungen wie GWT zur Kompilierung von Java nach JavaScript oder Guice als Dependency-Injection-Framework ohne XML bevorzugt werden. Und im Mobile-Bereich schwärmt Dewanto für Android, weil dort Java als Programmiermodell zum Einsatz kommt.

Dewantos Fazit:
As a conclusion I can only hope to see more such pure and plain Java solutions in year 2012!

I agree, but ...
Die Kommentare zum Blogpost fallen recht unterschiedlich aus. So argumentiert Pierluigi Vernetto für die Verwendung neuer Sprachen, die für gewisse Teilaufgaben schon immer nötig gewesen seien. Außerdem könne die Nutzung "heißer" Technologien gerade fähige Programmierer anlocken:

An application should be written in only 1 language, for sake of simplicity, agreed, but often accessory tasks like scripting the configuration of WebLogic domains need to be written in Python or Groovy... and honestly introducing the opportunity to learn a new "hot" language like Scala can attract on the project the best programmers.... Pierluigi Vernetto

Der Kommentator Doovde bestätigt hingegen die Vorbehalte gegen das babylonische Sprachgewirr, mit dem Argument der schweren Wartbarkeit:

I'm sitting in a project with Java, python, jython, tcsh, bash, php, xml and expect. It's impossible to debug in efficient manner, trouble shooting is like surgery while joggling. Doovde

Wie sieht es bei Ihnen aus? In einem Quickvote von 2009 hatten wir schon einmal die Frage an Sie gerichtet: Wie polyglott programmieren Sie? 17 % hatten damals für die Option gestimmt: "Für jeden Aufgabentyp die geeignete Sprache verwenden - das ist die Losung der Zeit! Und die neue Sprachenvielfalt bringt uns diesem Ziel immer näher."

Welche Erfahrungen haben Sie mit dem mehrsprachigen Programmieren mittlerweile gemacht?

(hs)

Anzeige

Kommentare

Gravatar Steve 24.01.2012
um 13:10 Uhr
Interessanter Unfug. Wer programmiert schon "nur" in Java?

Jede einfache Java Applikation nutzt doch inzwischen XML- und oder Annotationsverarbeitung, Codegeneration, Bytecodeassemblierung und aspektbasierte Ansätze.

Die "Einfachheit" von Java basiert wohl hauptsächlich darauf an allen Ecken und Enden kein Java zu benutzen.
#zitieren
Gravatar sam 24.01.2012
um 17:04 Uhr
haha… schreibt er dass java+xml fuer alles ausreicht…
dann sollten wir auch weiterhin in bibliotheken gehen und nicht im internet nach aktuellen loesungen suchen.
oder wieder auf baeume klettern anstatt Elektromobile oder hybride fahrzeuge zu steuern…

wann immer ein java entwickler schreibt, dass er nur java und xml braucht, dann immer hat man es mit jemanden aus dem letzten jahrtausend zu tun.

die selbiegen verweigern ja auch heute noch dass man automatisiert testet oder gar auf automatisierte deployments setzt…

schade dass das bekennen zum stillstand oder rueckschritt in der java welt so gross ist…

da kommt javafx und alle gestanden java geeks heulen ueber javafx script…
dann kommt javafx2 und nun heulen alle weil es kein xml hat…
dann kommt javafx xml alias javafxml und ist es nicht almodisch genug…

weil java eine reine industriesprache zum loesen von industrieproblemen aus dem letzten jahrtausend ist, aergern sich immer mehr java entwickler darueber, dass ihre heilige jvm "missbraucht" wird von diesen ganzen unheiligen, die irgend welche fremden sprachen in der jvm zum leben erwecken wollen…

es ist schon beinahe peinlich auf dem bewerbungslauf 'java' stehen zu haben wenn man liest dass nicht wenige am liebsten wieder nur java und xml als werkzeuge fuer alle probleme eingesetzt sehen wollen...
#zitieren
Gravatar stone 24.01.2012
um 17:07 Uhr
Ich habe mal nachgerechnet, in meinem Leben habe ich mit ca. 15 Programmierern zusammengearbeitet. Davon waren ganze 2! Fähige Programmiere in 1er Spreche! Und einer war Experte, Polygon ect. pp. (ich bin es nicht). In einer Welt wo Softwareentwickler Xml und Html … Programmieren braucht kein Mensch neue Programmier sprachen. #zitieren
Gravatar TestP 24.01.2012
um 18:51 Uhr
Grundsätzlich gebe ich dem Autor recht. Ich würde keine andere Programmiersprache lernen, die ausser syntaktischen Zucker nichts bietet.

Andererseits gibt es Dinge, die mit Java schlicht nicht gehen. Sei es Treiber oder gar Betriebssystemkomponenten. Da kommt man um Mehrsprachigkeit gar nicht herum ob's passt oder nicht. Mit Java/C# und C/C++ erschlägt man nahezu alles und das ist jetzt auch nicht die Welt.



MfG
#zitieren
Gravatar Stephan 25.01.2012
um 10:28 Uhr
1. Es gibt wohl immer noch Leute die meinen, wenn Sie fehlerfrei kompilieren können eine Programmmiersprache zu beherrschen! Es geht ja nicht nur um die Sprache sondern um die vielen Libraries (jars) und APIs und auch um den Programmierstil
2. Wer HTML5 nicht verpassen will braucht HTML + Javascript (selbst wenn man GWT benutzt)
3. Dart is keine jvm Sprache sondern eine Sprache die im Browser ablaufen soll, wie Javascript.
#zitieren
Gravatar schlingel 25.01.2012
um 11:02 Uhr
IMHO kann es sinnvoll sein, muss es aber nicht.

Gerade im Umfeld von CLI Sprachen wie Java oder im .Net-Bereich ist es doch immer reizvoller sich mit funktionalen Sprachen die Bereiche der Datenverarbeitung zu erleichtern.

Ich bin ein großer Freund von FP und mag F# sowie Clojure. Wenn man die jeweiligen Sprachen in abgetrennten Modulen einsetzt und dann nur einbindet oder als Service anspricht sollte das auch problemlos hinhauen.
#zitieren
Gravatar Michael Gutbier 25.01.2012
um 12:37 Uhr
Avantgarde ist ein Wort und wird deshalb zusammen geschrieben. (siehe z.B. http://de.wikipedia.org/wiki/Avantgarde)

Ich kann dem Autor auch nicht zustimmen. Mehrere Sprachen zu beherrschen sollte die Norm sein, um unterschiedliche Probleme auf die einfachste Weise lösen zu können. Statt von "polyglotten" würde ich eher von "monolingualen" Programmierern sprechen, wenn sie nur eine Programmiersprache beherrschen.

Andererseits dürfte es den wenigsten möglich sein, mehrere Sprachen auf einem hohen Niveau zu beherrschen. Aber darum geht es nicht unbedingt. Vielmehr muss man unterschiedliche Sprachen kennen und verstehen, um unterschiedliche Probleme aus passenden Blickwinkeln betrachten zu können. Eine einzige Sprache reicht dazu sicherlich nicht aus.
#zitieren
Gravatar Det 26.01.2012
um 06:38 Uhr
Tatsächlich kann ich die unternehmerische Sicht des Autors verstehen, und wenn das Tätigkeitsfeld es erlaubt (z.B. reine JEE Entwicklung) ist die One-For-All Sprache sicher eine qualitätssichernde Maßnahme.

Es gibt aber zwei Aspekete in dem Artikel, und der zweite ist, dass diese Beste Sprache eben Java sei.
Und da kann ich dem Autor leider überhaupt nicht mehr zustimmen. Java macht das Lösen mancher Probleme schwerer als es notwendig ist. Concurrency in (purem standard) Java ist immer noch eine Krux, Generics sind unglücklich gebaut, Funktionale Ansätze funktioneren mal so gut wie gar nicht, selbst die Lambdas kommen erst übernächstes Jahr.
Auch wenn es für viele Probleme Libraries gibt, so ist durch die restriktive Syntax das API oft eckiger als es sein müsste, weil die Sprache Java keine geschmeidige Einbindung zulässt (Ich sage nur: Fluent Interfaces statt vernünftiger Builder Syntax).

Java als einzige Sprache wäre ok, wenn Java denn eine vernünftige Sprachplattform für die jeweiligen Lösungsräume wäre.

Das ist genau, wo für mich Scala punktet. Statt dass man ein Buch "Effective Java" liest, bekommt man eine effektive Sprache, die die Punkte in sich umsetzt. Die Syntax ist flexibel genug, dass sich Bibliotheken in diese geschmeidig integrieren können (ohne dass es direkt zu einer DSL wird). Funktionale Programmierung ist von Haus aus vorgesehen und erleichtert den Umgang mit Collections und Baumstrukturen. Generics sind an der richtigen Stelle verankert (definition site) und Typinferenz vermeidet in den meisten Fällen unnötige Wiederholungen immer gleicher Information.

Von Monoglotter Programmierung zu reden ist das eine, Java als die eine Sprache vorzustellen das andere.
Hätte Java mit den Zeichen der Zeit schrittgehalten, wären Leute gar nicht erst auf die Idee gekommen, Ruby, Python zu portieren, Groovy zu entwickeln, Scala, Kotlin, Ceylon Aufwände zu starten, um nur die bekanntesten zu erwähnen.

Es gibt noch eine zweite unternehmerische Perspektive: Attraktivität des Arbeitsplatzes. Und ein monoglotter Java-Shop ist dies in meinen Augen nicht!
#zitieren
Gravatar OLI 31.01.2012
um 06:38 Uhr
@Steve: Deine Arroganz in Ehren. Wir arbeiten an Applikationen die teilweise 15 Jahre alt sind und immer noch auf- und abwärtskompatibel. Wir setzen C/C++ und Java ein. Wir haben zeitweise in Randbereichen auch Python und ähnliches versucht.
Am Ende hatten wir abseits der Hauptpfade immer wieder Probleme:
a) Entwickler und damit das Know-how war weg.
Damit blieb dann gerade in den Randbereichen auch mal die Wartung auf der Strecke. Und letztlich veraltete diese achso moderne Technologie schneller als der tatsächlich alte C Part.
b) die Build Umgebungen musste immer wieder angepasst werden, weil die "modernen" Sprachen sich mal wieder schneller entwickelten und die Schnittstellen nicht stabil halten konnten.

Ich bin kein grundsätzlicher Gegner von polyglotten Sprachen. Aber:
Es dürfen nicht zuviele Sprachen sein, sobald Entwickler das Projekt verlassen und andere mühsam eingearbeitet werden müssen und diese Randsprachen nicht mehr up-to-date sind, dann stehen diese Sprachen bei mir auf der Abschussliste.
Meistens werden die Sachen dann doch wieder in Java entwickelt.
Bei kleinen Projekten mag das mit Scala/Groovy u.a. noch ganz nett sein. Aber Großprojekte über mehrere Zeitzonen, zig Mitarbeiter und u.U. wechselnde Mitarbeiter mit unterschiedlichen Know-how machen am Ende diese Randsprachen zu einem wirtschaftlichen Problem.
#zitieren
Gravatar Andre 01.02.2012
um 17:03 Uhr
Gerne würde ich zustimmen, zumindest für Applikationen und der serverseitigen Programmierung (JSP). Wenn man sich mit den APIs gut auskennt kann man sehr effektiv in Java programmieren, so meine ich wenigstens. Ich habe mal Python probiert und ich fand es gut, allein Anwendungen (also meine Anwendungen) sind mir nicht eingefallen die nicht auch mit Java zu machen wären.
Ich programmiere auch mit R (cran), wenn das jemand kennt und wenn man dies als Programmiersprache bezeichnen kann. Vergleichbares in Java, javamathtool.jar, gibt es glaube nicht. Für automatisierte, statistische Analysen scheint es mir das Beste zu sein. Davon abgeleitet würde ich sagen, gibt es eine Programmieraufgabe so versuche es in der Sprache zu lösen die "Du" am besten kannst, und wenn es schwierig wird und die "Gemeinschaft" zu anderen Sprachen rät, schaue dir die Sprache an.
#zitieren

Folgende Links könnten Sie auch interessieren

zurück zum Seitenanfang