Letzten Monat wurde ich engagiert um die Registrierung für eine neue Webapplikation zu bauen.
Die bereits existierenden Teile waren in Java mit dem Spring 3.0 MVC Framework gebaut, dabei sollte ich natürlich bleiben.
Das letzte Mal, als ich Java gemacht habe ist schon eine ganze Weile her, damals an der Uni, dementsprechend war die erste Woche etwas zäh.
In meiner professionellen Karriere war ich bisher in der Hauptsache mit sogenannten „Scriptsprachen“ unterwegs, vor allem Perl und JavaScript, daneben noch PHP und Ruby.
Nun bin ich einmal in den Genuss des allen überlegenen hochprofessionellen Javas gekommen – eine Welt voller TLAs und totaler Typsicherheit.
Variablenschubladen
Was mich schon immer amüsiert hat, wenn ich mit eingefleischten Java Codern gesprochen habe, ist die unglaubliche Angst for dynamischer schwacher impliziter Typisierung. Java ist ja das genaue Gegenteil und der Java Programmierer möchte auf jeden Fall immer überall wissen, mit was er es gerade zu tun hat. Für dieses oberste Ziel schreckt man auch vor solchen Ungetümen nicht zurück:
final RuleBasedCollator collator = (RuleBasedCollator)Collator.getInstance( locale );
Das hat natürlich Vorteile. Zum einen die, daß die IDE einem immer schöne Vorschläge machen kann, was man mit dem Objekt, das man gerade hat, nun eigentlich machen kann.
Es hat aber auch gravierende Nachteile. Für mich der ganz wesentliche: Java Code ist unlesbar sobald er im Rudel auftritt.
Nun gibt es ja viele Spezialisten, die jeden guten Geschmack vermissen lassen und auch in Scriptsprachen furchtbare Buchstabenwüsten hinterlassen (solche Leute sollten eigentlich nur in Python programmieren dürfen, da ist Formatierung Teil der Semantik…), in Java hat man allerdings überhaupt keine Chance es besser zu machen. Die statische explizite Typisierung verlangt eine derartig wortreiche Ausdrucksweise, daß man alles dreimal sagt. Noch ein schönes Beispiel:
Mailer mailer = Mailer.getInstance();
Von Präzision keine Spur, ich mußte tatsächlich dreimal das Wort „Mailer“ schreiben. Ich empfinde das als höchst abschreckend. Denn:
Programmiersprachen sollten für Menschen verständlich sein, für Computer nur gerade eben so.
Warum finden das Java Programmierer trotzdem so sexy? Es ist so schön sicher. Ehrlich Leute, das ist nur ein schönes Gefühl. Ich kann versichern, bei Applikationen in schwach dynamisch impliziert typisierten Sprachen, die in der freien Wildbahn anzutreffen sind, hat man höchst selten wirklich Typprobleme zur Laufzeit. Allermeistens hat man seine Datentypen im Griff und falls doch nicht, ist es äußerst selten ein Problem, daß irgendeine Tragweite erreicht. Duck Typing ist um so vieles handlicher.
Wer trotzdem nicht auf die Möglichkeiten stark typisierter Programmiersprachen verzichten will, sollte sich vielleicht nach Programmiersprachen umsehen die Typinferenz unterstützen. Wieso gibt es das eigentlich nicht in Java? Ahja: In Java 7 gibts das ja. Und wie. Das sieht ziemlich verbockt aus. Grusel.