Prof. Dr. Detlef Kreuz

Java

Als ich 1994 das erste Mal in Kontakt mit der Programmiersprache Java kam, erschien mir dies wie Entdeckung des Quantensprungs.

  • Endlich konnte ich Software in hierarchisch strukturierte Module aufteilen. Der Java-Übersetzer kümmerte sich um alles.
  • Endlich konnte ich mächtige Datenstrukturen verwenden, nicht nur feste Aneinanderreihungen oder zusammengesetzte Werte. Java bot dynamische Arrays, Hashmaps, später Mengen und noch viel mehr.
  • Endlich musste ich Daten im Hauptspeicher nicht mehr selbst verwalten. Dies erledigt die Java-Laufzeitumgebung.
  • Endlich führten gravierende Fehler nicht mehr zu einer kryptischen Abbruchmeldung in Form aneinandergereihter Bomben oder einer Meldung "Segmentation fault". Statt dessen erhielt ich ich eine präzise Angabe der Fehlermeldung, des Fehlerortes und der Aufrufkette.
  • Endlich gab es einen Mechanismus, mit dem ich Fehler im Programm selbst behandeln konnte.
  • Endlich konnte ich die sog. "objektorientierte Programmierung" selbst ausprobieren und musste mich dafür nicht mehr mit C++ und CFront herumschlagen.
  • Endlich war die Software nicht nicht mehr auf eine bestimmte Plattform begrenzt. Java ist nicht nur eine Programmiersprache, sondern auch ein plattformunabhängiges System.
  • Endlich war eine qualitativ ausgereifte Programmiersprachenimplementierung frei verfügbar.

Später

Was danach passierte, das kam mir wie eine kambrische Explosion vor. Es entwickelte sich eine Art Ökosystem rund um Java. Das Entwickeln von Software wurde durch Wiederverwendung existierender Teile (Klassen, Pakete, ...) erleichtert. Integrierte Entwicklungsumgebungen, Programmgeneratoren, vielfältige Prüfsoftware, ...standen zur (meist freien) Verfügung. Java wurde (und wird) zur Realisierung geschäftskritischer Anwendungen in der gefühlten Mehrheit von Unternehmen eingesetzt.

Eine Vielzahl von in Java realisierten Produkten steht allen zur mehr oder minder freien Verfügung. Als Beispiel seien hier einmal einige Projekte der Apache Software Foundation genannt: ActiveMQ, Beam, Cassandra, Cayenne, CloudStack, Commons, FOP, Fortress, Geronimo, Hadoop, JMeter, Lucene, Solr, Tomcat, ...

Im privaten und geschäftlichen Umfeld kommt Java zum Einsatz. Die meisten Android-Anwendungen sind mit Hilfe von Java realisiert und auf Mobiltelefonen, Tablets, TV- und Musikgeräten installiert. Manch einer nutzt in Java realisierte Werkzeuge zum Mindmapping (XMin, FreeMind, VYM, ...), Literaturverwaltung (JabRef), Geldgeschäften (Jameica/Hibiscus), oder vielen anderen Aktivitäten.

Java scheint die ideale Programmiersprache zu sein.

Monopol

Tatsächlich war Java seit Ende der 1990er Jahre eine Art Standard zur Entwicklung relevanter Software. Das ist erst einmal nichts Schlechtes. Die Standardisierung auf Java brachte erst die Vielzahl an nutzbarer Software.

Dank der frei verfügbaren, qualitativ hochwertigen Entwicklungssoftware gingen die meisten Hochschulen (inkl. Universitäten) dazu über, Java als erste Programmiersprache zur Informatikausbildung zu verwenden. Dazu entstanden auch Systeme, die das Erlernen erleichtern sollten, z.B. BlueJ oder Greenfoot.

So ergibt sich eine positive Rückkopplung: mehr Absolventen, die Java beherrschen führen zu mehr Einsatz in den Unternehmen führt zu stärkerem Druck, im Studium Java zu lernen.

Trotzdem, oder auch deswegen, führte die relative Standardisierung zu monopolähnlichen Strukturen.Nach dem Motto: es wurde noch nie jemand entlassen, weil sie/er IBM, Microsoft, Java verwendete. Oder: die Software darf mit jeder Programmiersprache realisiert werden, vorausgesetzt es ist Java.

Natürlich ist das hier ein wenig übertrieben. Ich möchte nicht die .NET-Welt von Microsoft unerwähnt lassen. Hatte Microsoft in der Anfangszeit sogar eine eigene Java-Implementierung angeboten, so konnte die Entwicklung von Java nicht im Interesse von Microsoft sein. Ein valide Strategie ist das Erschaffen eines eigenen Ökosystems, das man selbst vollständig kontrolliert. Aber das ist ein anderes Thema.

Entwicklung

Betrachtet man die aktuelle Situation, so hat sich einiges getan. Java wird zwar in erheblichem Maße eingesetzt, nur nicht mehr so exklusiv. Im Webbrowser wird Java zum Glück nicht mehr genutzt. Dort ist die (Monopol-) Sprache JavaScript, die auch gerne serverseitig (auch) anstelle von Java verwendet wird. Andere Alternativen sind Python, Ruby, Go, Swift, Erlang, R, ... Diese werden auch für unternehmenskritische Anwendungen eingesetzt.

Selbst in der Java-Welt entstanden neue Programmiersprachen. Diese sind auf der Java-Plattform ablauffähig und bieten für ihre jeweiligen Domänen signifikante Vorteile gegenüber Java selbst. Beispiele sind Scala, Clojure und Kotlin.

Umso mehr wunderten mich Nachfragen, als wir vor 3 Jahren die Anfängerausbildung für unseren Informatikteil von Java auf Python umstellten. Es gab besorgt klingende Bemerkungen, ob "die Industrie" überhaupt etwas mit unseren Absolventen anfangen könne oder warum wir etwas ändern würden, obwohl so gut wie alle Hochschule doch erfolgreich mit Hilfe von Java ausbilden würden.

Meinen Kollegen und mir ist es wichtiger, dass unsere Studierenden das Entwickeln von Software lernen, als das Verwenden eines bestimmten Programmierökosystems.

Gegenwart und Zukunft

Unser Wechsel auf Python war erfolgreich. Aus verschiedenen Gründen musste der Zeitaufwand für die Informatikausbildung um etwa ein Drittel gekürzt werden. Trotzdem sind unsere Studierenden ähnlich erfolgreich. Sie können mit Datenstrukturen arbeiten, implementieren Algorithmen und realisieren erfolgreich Web-Anwendungen. Zur Entwicklung von Anwendungen auf mobilen (Android-) Geräten sind sie in der Lage, sich weit genug in Java einzuarbeiten.

Das liegt natürlich auch am Inhalt des Studiums: Wirtschaftsinformatik. Bei einem eher reinen Informatikstudium sähe unsere Entscheidung eventuell anders aus.

Auch unsere anderen Studienfächer profitieren von der Ausbildung mit Python. Den Kollegen aus dem Bereich Data Science bietet sich eine gute Alternative zu Sprachen wie R. Analysen aus dem Bereich "Social Media Management" können auch gut mit Python erfolgen. Für diese Aufgaben bietet sich Java weniger an.

Was ist mit der "Industrie"? Auch die wandelt sich. Jüngst erzählte mir ein Absolvent, wie schnell er eine Aufgabe mit Hilfe von Python erledigen konnte, und wie positiv dies nicht nur bei seinem Vorgesetzten ankam.

Insgesamt beobachte ich bei einigen Unternehmen eine Strategie, die der früheren .NET-Strategie von Microsoft ähnelt. Nicht ohne Grund hat z.B. Google vor einiger Zeit die Sprache Go allgemein verfügbar gemacht. Nach diversen Rechtsstreitigkeiten mit Oracle, dem Rechteinhaber von Java, würde es mich nicht wundern, wenn es bald eine neue Sprache zur Realisierung von Android-Anwendungen gäbe. Mozilla hat mit Rust eine Sprache entwickelt, die eine in Bezug auf Performance, Sicherheit und Nebenläufigkeit ähnlich wie Go eine gute Alternative zu Java ist.

Für viele ist Java als objektorientierte Programmiersprache zu einschränkend. Nicht nur zur Formulierung nebenläufiger Aspekte bieten sich alternative Programmiermodelle an. Manche Vorgänge lassen sich viel leichter in Form von Funktionen oder Prozeduren beschreiben als mit einem Objektmodell. Java versucht in der Version 8 mit Hilfe der "Lambda-Ausdrücke" hier etwas zu verbessern. Meines Erachtens gelingt das nur halbherzig. Übrigens, wer viel von der Objektorientierung von Java hält, sollte sich mal den einen oder anderen Vortrag von Alan Kay ansehen, einem der Pioniere auf diesem Gebiet. Für ihn sind die Nachrichten das Wichtige an der Objektorientierung, nicht die Objekte oder Klassen (wie es nicht nur Java annimmt).

In nicht mehr so ferner Zukunft werden die eigentlichen Leistungssteigerungen nicht mehr durch schnellere Prozessoren erfolgen, sondern durch eine immer größere Anzahl von Prozessoren. Java ist eine Programmiersprache für den (im positiven Sinne) durchschnittlichen Softwareentwickler. Aktuell ist die Behandlung einer großen Anzahl nebenläufiger Aktivitäten in Java eher eine Sache von wenigen Spezialisten. Sofern Java eine Sprache (auch) für anwendungsorientierte Softwareentwickler bleiben möchte, müsste in diesem Bereich einiges getan werden. Andere Sprachen, etwa die schon genannten Go und Rust, sowie auch Erlang (älter als Java!) oder Elixir, sind wesentlich besser geeignet.

Fazit

Ich werde mich hüten, Java für tot zu erklären. Dafür gibt es zu viele existierende Anwendungen. Ist COBOL schon tot? Es gibt auch zu viele aktiv entwickelte Projekte und Produkte. Allein die schiere Menge an Java-basierter Software bedeutet dessen Fortbestand. Das muss nicht deprimierend sein, sondern bietet für viele eine vernünftige Aufgabe.

Einfach Java zu nutzen, weil viele andere es verwenden, das wird immer weniger eine Begründung.