Sie haben wahrscheinlich den Titel dieses Beitrags gelesen und gedacht: „Was raucht dieser Typ? Java ist überall! " Sie haben Recht, Java dominiert immer noch die Branche und unterstützt einige der weltweit größten unternehmenskritischen Anwendungen. Aber die Verbreitung von Java ist nicht das, worüber ich spreche, ich spreche über den Hype darum. Ich verbringe viel Zeit mit unerfahrenen Programmierern. Was machen unerfahrene Programmierer gerne? Seien Sie besorgt und übermütig in Bezug auf Tools wie Programmiersprachen. Keiner der CS-Studenten, die ich treffe, bewundert Java, und ich denke, das sollte nicht so sein.
Junge / naive Entwickler (ich selbst eingeschlossen) geraten oft in die Falle, neue Sprachen und Tools auf Kosten von Leistung und Vernunft zu fetischisieren. Bevor ich bei Halp (jetzt im Besitz von $ TEAM) arbeitete, hatte ich eine fast romantische Beziehung zu serverseitigem TypeScript. Ich fand das Ökosystem node.js das Coolste: Ich mochte die Idee von transpiliertem Code, Echtzeit-Debugging, einer riesigen Paketbibliothek und sogar seltsamen und fragmentierten Build-Systemen. Als ich es tatsächlich in der Entwicklung verwendete und mit erfahreneren Ingenieuren sprach, verschwand die Magie schnell.
Ich hatte eine irrationale Bindung an das JS-Ökosystem, weil es eine heiße neue Sache war; Es war ein Hype. Die Realität entsprach nicht meinen Erwartungen. Heute genieße ich die wunderbaren Dinge, die ich von JavaScript erwartet habe, wenn ich Erfahrung mit Java sammle. Ich fühle mich betrogen, dass der Hype mich nicht früher zu Java geführt hat. Java macht Spaß zu schreiben, ist produktiv und genießt unter neuen Entwicklern einen unfairen Ruf als Dinosaurier.
Ergonomie macht Java zu einer großartigen Programmiersprache
Dies sollte nicht unterschätzt werden: Java ist einfach eine Freude zu schreiben. Dies ist hauptsächlich auf die Fähigkeiten zurückzuführen, die JetBrains in IntelliJ IDEA einsetzt. Alles wird automatisch ausgefüllt, das Springen zur Definition ist schnell, die Verwendung von find funktioniert gut und das Refactoring ist einfach. Wo Java wirklich glänzt, liegt jedoch in der Erfahrung von Entwicklern mit Bibliotheken von Drittanbietern.
Hohe Arbeitslastabhängigkeit und Branchentrends
Meine Erfahrung ist begrenzt, aber ich habe das Gefühl, dass sich der Wind in Richtung Liberalisierung externer Abhängigkeiten bewegt hat. Nicht erfunden Hier ist nicht mehr in Mode, nicht erfunden Es ist in Mode . Insbesondere JavaScript-Entwickler schließen Bibliotheken von Drittanbietern eher ein, selbst für triviale Vorgänge wie das Ausfüllen der Nummer links . Ich denke nicht, dass der aktuelle Anhang zu Abhängigkeiten von Drittanbietern besonders schädlich ist, aber API-Änderungen im Upstream können untypisierte JS / Python-Codebasen beschädigen.
Wenn Sie Bibliotheken von Drittanbietern in Java verwenden, wissen Sie immer genau, welche Typen Sie an eine Methode übergeben müssen. Am wichtigsten ist, dass ein Missbrauch der Funktion zu roten Wellenlinien in Ihrem Editor führt. Angesichts der Tatsache, dass Bibliotheken weit verbreitet sind, denke ich, dass mehr Menschen von Java begeistert sein sollten.
Das nominelle Wählen spart Zeit
Dynamisch / implizit / schwach / jede Eingabe hat eine Reihe von Nachteilen. Wenn eine Abhängigkeit die API-Methode ändert und Ihre Anwendung zur Laufzeit und nicht zur Erstellungszeit abstürzt, ist dies ein Problem. Wenn ein Entwickler zur Implementierung einer Methode zurückkehren muss, um herauszufinden, welche Typen übergeben werden sollen, ist dies Zeitverschwendung. TypeScript- und Python-Typhinweise beheben dies geringfügig, können jedoch übergebene Typen zur Laufzeit ohne zusätzlichen Code nicht überprüfen.
Typschutz ist meine am wenigsten bevorzugte TypeScript-Funktion. Grundsätzlich ist dies eine implizite Eingabe, die Sie selbst implementieren müssen und auf die korrekte Implementierung vertrauen müssen. Meiner Meinung nach ist dies das Schlimmste aus beiden Welten. Folgendes berücksichtigen:
interface Dog {
bark: () => void;
}
/* The developer has to manually implement
a heuristic check for interface adherence!
When they update the interface, they have
to update the type guards too! */
function isDog(pet: object): pet is Dog {
return (pet as Dog).bark !== undefined;
}
const dog: any = {bark: () => console.log('woof')};
if (isDog(dog)) {
// TS now knows that objects within this if statement are always type Dog
// This is because the type guard isDog narrowed down the type to Dog
dog.bark();
}
Die UND-Typdeklaration über die Notwendigkeit, Validierungslogik für den angegebenen Typ zu schreiben, macht mir wirklich Sorgen. Der obige Code sieht so aus, als hätte jemand das falsche Tool verwendet.
Im Gegensatz zu TypeScript-Definitionen entlasten die nominalen Typsysteme von Java das Gehirn des Programmierers, indem sie Typdefinitionen kristallisieren und den Standardtypschutz gewährleisten.
Aufhebung der Verantwortung für die Optimierung
Java-Entwickler können sich darauf verlassen, dass die JVM die besten Anwendungen erstellt. Unabhängig davon, ob sie eine Multithread-Anwendung implementieren oder eine große Datenmenge auf dem Heap speichern, können sie sicher sein, dass sie nicht durch Speicherverwaltung oder Datenrennen in den Fuß geschossen werden. Dies ist in erster Linie ein Vorteil gegenüber C ++, das viele Fußgewehre enthält.
Dies ist Teil der ergonomischen Java-Erfahrung. Wenn sich ein Entwickler weniger um technische Details kümmern muss, kann er sich mehr auf das aktuelle Problem konzentrieren.
Der heilige Gral der Produktivität
An wie viele Sprachen können Sie sich erinnern, die die folgenden Bedingungen erfüllen?
- Qualitätspaket-Manager und Build-System (Maven)
- Nominalsatz
- Große Gemeinschaft
- Automatische Optimierung
Ich denke, das einzig geeignete Tool ist Java, aber lassen Sie mich wissen, ob es andere gibt!
Bearbeiten: Wie Jwosty betonte, verfügt der Java-Rivale Microsoft C # über all diese Eigenschaften und mehr / neue Sprachfunktionen . Ich habe C # nie außerhalb der Unity-Spiel-Engine verwendet, aber ich werde es lernen.
Überraschende Abwesenheit vom Lehrplan der Universität
Ich studiere derzeit an der Universität von Colorado in Boulder; Dies ist eine großartige Schule, aber nicht gerade für CS bekannt. Der größte Teil unseres Lehrplans für Informatik an der High School wird jedoch schamlos von der CMU oder Stanford gestohlen. Während meines Studiums an der CU habe ich folgende Programmiersprachen verwendet:
- C++. : , , . . , , .
- Python Julia. , .
- Scala. Principles of Programming Languages, . Scala JVM Java, , Java.
- Web-Sprachen (HTML / CSS / JS). Sie wurden nur in einem Kurs, Softwareentwicklungstechniken und -werkzeuge, zu Branchentrends verwendet.
Ich beende dieses Semester und Java ist noch kein einziges Mal aufgetaucht. Ich halte es für eine Schande.
Fazit
Es gibt keinen wirklichen Weg, um Anwendungen zu erstellen, aber ich denke, Java bekommt nicht die Aufmerksamkeit, die es verdient, insbesondere bei Startups und der unerfahrenen Programmier-Community. Nicht typisierte Sprachen sind nützliche Tools, aber ich denke nicht, dass sie die Standardauswahl für die Erstellung großer Anwendungen sein sollten. Wenn Sie ein Entwickler mit vollem Funktionsumfang sind und Java noch nie ausgiebig verwendet haben, werden Sie wahrscheinlich angenehm überrascht sein, wenn Sie es bei Ihrem nächsten Projekt ausprobieren.
Java und die JVM wurden in den 90ern und frühen 2000ern hochgespielt, aber ich denke nicht, dass sie jemals verschwinden sollten! Die Entwicklungserfahrung, die ich mit IntelliJ und Java gesammelt habe, ist bewundernswert.
Ich bin gespannt, warum Java den Hype überhaupt verloren hat. Die Kulturgeschichte der Programmierer ist schlecht dokumentiert. Wenn Sie Verständnis haben, senden Sie mir bitte eine E-Mail oder hinterlassen Sie einen Kommentar (auf reddit / Hacker News ).