t73f.de

Check-in [f82232bf20]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Java-Post
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1:f82232bf20915c2160d93d487344fa58a88db8ed
User & Date: dkreuz 2017-03-04 19:26:12
Context
2017-03-05
15:11
Typo check-in: 1676ef2568 user: dkreuz tags: trunk
2017-03-04
19:26
Java-Post check-in: f82232bf20 user: dkreuz tags: trunk
15:55
Gruppieren nach Jahren funktioniert nicht mehr. Herausgenommen check-in: 640188b26a user: dkreuz tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Added content/blog/20170304_155500_java/contents.lr.

































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
title: Java
---
pub_date: 2017-03-04 15:55:00
---
categories: profession, hochschule
---
tags: java, lehre
---
body:

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](https://projects.apache.org/projects.html)
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](http://www.bluej.org/) oder [Greenfoot](http://www.greenfoot.org/).

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
eigenen 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](https://www.hs-heilbronn.de/win/studierende) 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.

Meine 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 unseren 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.