Java mit 20: Wie es die Programmierung für immer verändert hat

Es ist keine leichte Aufgabe, sich daran zu erinnern, wie die Programmierwelt 1995 war. Zum einen war objektorientierte Programmierung ein akzeptiertes, aber selten praktiziertes Paradigma, wobei vieles, was als sogenannte objektorientierte Programme galt, kaum mehr als umbenannter C-Code war, der >>anstelle von printfund classanstelle von verwendet wurde struct. Die Programme, die wir damals geschrieben haben, haben den Kern aufgrund von Zeigerarithmetikfehlern routinemäßig ausgegeben oder aufgrund von Lecks keinen Speicher mehr. Der Quellcode konnte kaum zwischen verschiedenen Unix-Versionen portiert werden. Die gleiche Binärdatei auf verschiedenen Prozessoren und Betriebssystemen auszuführen, war verrückt.

Java hat das alles geändert. Während plattformabhängiger, manuell zugewiesener, prozeduraler C-Code mindestens die nächsten 20 Jahre bei uns bleiben wird, hat Java bewiesen, dass dies eine Wahl und keine Anforderung war. Zum ersten Mal haben wir begonnen, echten Produktionscode in einer plattformübergreifenden, müllsammelten, objektorientierten Sprache zu schreiben. und es hat uns gefallen ... Millionen von uns. Sprachen, die nach Java gekommen sind, insbesondere C #, mussten die von Java festgelegte neue höhere Messlatte für die Entwicklerproduktivität löschen.

James Gosling, Mike Sheridan, Patrick Naughton und die anderen Programmierer von Suns Green Project haben die meisten wichtigen Technologien, die Java in großem Umfang eingesetzt hat, nicht erfunden. Die meisten der Hauptmerkmale, die sie in der damaligen Eiche enthielten, fanden ihren Ursprung anderswo:

  • Eine Basisobjektklasse, von der alle Klassen abstammen? Smalltalk.
  • Starke statische Typprüfung beim Kompilieren? Ada.
  • Mehrfachschnittstelle, einzelne Implementierungsvererbung? Ziel c.
  • Inline-Dokumentation? CWeb.
  • Plattformübergreifende virtuelle Maschine und Bytecode mit Just-in-Time-Kompilierung? Wieder Smalltalk, besonders Suns Selbstdialekt.
  • Müllabfuhr? Lispeln.
  • Primitive Typen und Kontrollstrukturen? C.
  • Dual-Type-System mit nicht objektprimitiven Typen für die Leistung? C ++.

Java war jedoch Vorreiter bei Neuland. Nichts wie geprüfte Ausnahmen ist vorher oder nachher in einer anderen Sprache vorhanden. Java war auch die erste Sprache, die Unicode im nativen Zeichenfolgentyp und im Quellcode selbst verwendete.

Die Hauptstärke von Java bestand jedoch darin, dass es als praktisches Werkzeug für die Erledigung von Aufgaben konzipiert wurde. Gute Ideen aus früheren Sprachen wurden populär gemacht, indem sie in einem Format neu verpackt wurden, das dem durchschnittlichen C-Codierer vertraut war, obwohl Java (im Gegensatz zu C ++ und Objective-C) keine strikte Obermenge von C war. Genau diese Bereitschaft, nicht nur etwas hinzuzufügen Entfernen Sie aber auch Funktionen, die Java so viel einfacher und leichter zu erlernen gemacht haben als andere objektorientierte C-Nachkommen.

Java nicht (und immer noch nicht) hat structs, unions, typedefs, und headerDateien. Eine objektorientierte Sprache, die nicht an die Anforderung gebunden ist, Legacy-Code auszuführen, benötigte sie nicht. In ähnlicher Weise ließ Java klugerweise Ideen aus, die in anderen Sprachen erprobt und als mangelhaft befunden wurden: Vererbung mehrerer Implementierungen, Zeigerarithmetik und Operatorüberladung am deutlichsten. Dieser gute Geschmack am Anfang bedeutet, dass Java auch 20 Jahre später noch relativ frei von den Warnungen „Hier sind Drachen“ ist, die die Styleguides seiner Vorgänger verunreinigen.

Aber der Rest der Programmierwelt ist nicht stehen geblieben. Tausende von Programmiersprachen sind gestiegen, seit wir Java zum ersten Mal programmiert haben, aber die meisten haben nie mehr als einen winzigen Bruchteil der kollektiven Aufmerksamkeit erreicht, bevor sie schließlich verschwunden sind. Was uns auf Java verkaufte, waren Applets, kleine Programme, die auf Webseiten ausgeführt wurden und mit dem Benutzer interagieren und mehr als nur statischen Text, Bilder und Formulare anzeigen konnten. Heute hört sich das nicht nach viel an, aber denken Sie daran: 1995 gab es kein JavaScript und kein DOM, und ein HTML-Formular, das mit einem in Perl geschriebenen serverseitigen CGI-Skript kommunizierte, war auf dem neuesten Stand der Technik.

Die Ironie ist, dass Applets nie sehr gut funktioniert haben. Sie waren vollständig vom Inhalt der Seite isoliert und konnten HTML nicht lesen oder schreiben, wie es JavaScript letztendlich könnte. Sicherheitsbeschränkungen verhinderten, dass Applets mit dem lokalen Dateisystem und Netzwerkservern von Drittanbietern interagieren. Aufgrund dieser Einschränkungen waren Applets nur für einfache Spiele und Animationen geeignet. Selbst diese trivialen Proofs of Concept wurden durch die schlechte Leistung früher virtueller Browser-Maschinen behindert. Und als die Mängel der Applets behoben waren, waren Browser und Front-End-Entwickler längst an Java vorbeigekommen. Flash, JavaScript und zuletzt HTML5 fielen uns als weitaus effektivere Plattformen für die Bereitstellung der dynamischen Webinhalte auf, die Java uns versprochen hatte, aber nicht lieferte.

Trotzdem haben uns Applets dazu inspiriert, mit Java zu arbeiten, und wir haben festgestellt, dass es sich um eine saubere Sprache handelt, die viele der Ecken und Kanten glättet, mit denen wir bei Alternativen wie C ++ zu kämpfen hatten. Allein die automatische Müllabfuhr war den Eintrittspreis wert. Applets wurden möglicherweise überschrieben und nicht ausgeliefert, aber das bedeutete nicht, dass Java keine verdammt gute Sprache für andere Probleme war.

Ursprünglich als plattformübergreifende Client-Bibliothek gedacht, fand Java im Serverbereich echte Erfolge. Servlets, Java Server Pages und eine Reihe unternehmensorientierter Bibliotheken, die regelmäßig gebündelt und in das eine oder andere verwirrende Akronym umbenannt wurden, lösten echte Probleme für uns und für Unternehmen. Abgesehen von Marketingfehlern erreichte Java in IT-Abteilungen auf der ganzen Welt einen nahezu standardmäßigen Status. (Schnell: Was ist der Unterschied zwischen Java 2 Enterprise Edition und Java Platform Enterprise Edition? Wenn Sie vermutet haben, dass J2EE der Nachfolger von JEE ist, haben Sie es genau rückwärts verstanden.) Einige dieser unternehmensorientierten Produkte waren schwergewichtig und offen inspiriert Quellenalternativen und Ergänzungen wie Spring, Hibernate und Tomcat, die jedoch alle auf dem Fundament des Sonnenuntergangs basieren.

Der wohl wichtigste Beitrag von Open Source zu Java und dem breiteren Programmierhandwerk ist JUnit. Testgetriebene Entwicklung (TDD) wurde bereits früher mit Smalltalk versucht. Wie viele andere Innovationen dieser Sprache erreichte TDD jedoch keine breite Bekanntheit und Akzeptanz, bis es in Java verfügbar wurde. Als Kent Beck und Erich Gamma im Jahr 2000 JUnit veröffentlichten, stieg TDD schnell von einer experimentellen Praxis einiger weniger Programmierer zur Standardmethode für die Entwicklung von Software im 21. Jahrhundert auf. Wie Martin Fowler sagte: "Noch nie auf dem Gebiet der Softwareentwicklung waren so viele Codezeilen so viel zu verdanken", und diese wenigen Codezeilen wurden in Java geschrieben.

Zwanzig Jahre nach seiner Gründung ist Java nicht mehr der krasse Emporkömmling. Es ist der fest verankerte Amtsinhaber geworden, gegen den andere Sprachen rebellieren. Leichtere Sprachen wie Ruby und Python haben das Gebiet von Java erheblich erschlossen, insbesondere in der Startup-Community, in der die Geschwindigkeit der Entwicklung mehr als nur Robustheit und Skalierbarkeit ausmacht - ein Kompromiss, den Java selbst in den frühen Tagen der Leistung ausnutzte von virtuellen Maschinen stark verzögerten kompilierten Code.

Java steht natürlich nicht still. Oracle integriert weiterhin bewährte Technologien aus anderen Sprachen wie Generika, Autoboxing, Aufzählungen und zuletzt Lambda-Ausdrücke. Viele Programmierer sind diesen Ideen erstmals in Java begegnet. Nicht jeder Programmierer kennt Java, aber ob er es kennt oder nicht, jeder Programmierer wurde heute davon beeinflusst.

Zum Thema passende Artikel

  • Rückblick: Die großen 4 Java IDEs verglichen
  • Java für immer! 12 Schlüssel zu Javas anhaltender Dominanz
  • Java vs. Node.js: Ein epischer Kampf um Entwickler