JAVA Eco System Einstiegshilfe

trialgod

Lt. Commander
Registriert
Feb. 2008
Beiträge
1.547
Hallo liebe Leute

Kurz zu mir:
Ich bin Software-Architekt im .NET Umfeld (kein SharePoint/CRM) und Fokus auf Event-Driven-Architectures. Ich habe langjähriger .NET Erfahrung und kenne das Ökosystem ziemlich gut. Also .NET Framework, .NET Core, viele libraries, VS und VS Code sowie die gängigen CI/CD Plattformen und was man so wissen muss. Ausserdem habe ich ein bisschen Erfahrung im F# Umfeld.

Zudem habe ich schon längere Zeit auch mit NodeJS bzw. NPM, Bower/Grunt/Webpack zutun und kenne auch python ein wenig.

Nun suche ich eigentlich wirklich coole Projekte und so richtig sieht es im .NET Umfeld wirklich nicht toll aus. Ich wollte daher meinen Fokus mal für die nächste Zeit auf JAVA legen und suche nun einen Quickstart.

Ich frage mich, was sind die Dinge die ich mir anschauen muss? Die Sprache werde ich recht schnell genug beherrschen. Die Konzepte sind mir alle bekannt und für Detailprobleme gibt es andere Leute im Team, die mich da wahrscheinlich unterstützen werden können. Was mich eher umtreibt ist, was so die Industriestandards sind und was ich so schnell wie möglich verstehen können sollte.

Meine Liste umfasst aktuell:
  • Jenkins
  • JEE?
  • Gradle oder Maven?
  • NHibernate?
  • sonst irgendwelche Frameworks/Libraries, welche sehr oft benutzt werden?

Was muss ich wissen um einen schnellen Einstieg zu bekommen? Welche "Technologien" sollte ich kennen? Gibt es sonst irgendwelche Pitfalls?

Als C# Entwickler mit F# (== OCaml) Faible muss ich sagen, dass ich JAVA wirklich ein bisschen 2001 finde. Wie verbreitet ist denn Kotlin mittlerweile? Hat es nennenswerten Anteil? Wird man von Kunden ausgelacht, wenn man es vorschlägt? Wie ist der Anklang in der JAVA Community?

Danke für eure Auskunft.
 
Zuletzt bearbeitet:
trialgod schrieb:
Meine Liste umfasst aktuell:
  • Jenkins
  • JEE?
  • Gradle oder Maven?
  • NHibernate?
  • sonst irgendwelche Frameworks/Libraries, welche sehr oft benutzt werden?
Naja,
  • Jenkins oder Travis für CI wird schon oft genutzt, also nicht verkehrt
  • JEE, hm - was genau? Willst du echt mit EJB oder so rumhantieren?
  • Maven ist mMn mehr verbreitet und simpel zu erlernen, füher gab es noch Ant, evtl. wird dir das heute noch ab und zu über den Weg laufen
    • gewöhn dich schon mal an Dependency Konflikte :D
  • wenn Hibernate, dann vermutlich auch Spring - aber das ist echt ein riesen Klotz und nicht in 5min gelernt
  • für Datenbanken trotzdem noch kurz JDBC ansehen, aber das ist schnell gelesen
  • JUnit oder TestNG für Unit Tests, das sollte man nie vernachlässigen

Kotlin ist natürlich trotz Java 14 noch deutlich "moderner" und kompakter. Scala wäre noch etwas falls es auch funktionale Programmierung sein soll.

Was noch zu beachten ist, es gibt eine Vielzahl von Java Versionen, die noch so rumgeistern. Mitunter kann das erstmal zu Problemen führen, aber das wirst du schon noch merken.

Ansonsten, was du noch brauchst hängt davon ab was du machen willst und in welcher Domäne.
 
Vor allem im Bezug zu JEE wäre hier definitiv noch das Spring Framework erwähnenswert.
NHibernate kenne ich persönlich nicht, aber die Funktionalität wird locker von Spring abgedeckt, wenn es in Richtung Web geht. Spring bietet aber auch abseits von Webservices sehr viel, da kenne ich mich aber weniger aus. Wie schon gesagt wurde, ist Spring aber definitiv ein Koloss, der dir die Arbeit aber ungemein erleichtern und beschleunigen kann.
Gradle oder Maven kommt auf das Projekt an, ich würde sagen Gradle kommt langsam, Maven ist aber mit weitem Abstand noch am verbreitesten, du kommst also definitiv nicht drum herum. Perspektivisch ist Gradle vielleicht sinnvoll, zum aktuellen Zeitpunkt eher weniger. Persönlich finde ich es deutlich besser wie Maven, aber das hilft halt nicht, wenn so ziemlich jedes Projekt auf diesem Planet auf Maven basiert.
Dass Java "ein bisschen 2001 wirkt" ist vermutlich der Grund dafür, dass es so weit verbreitet ist. Es ändert sich halt selten etwas, was für Stabilität und Zukunftssicherheit sorgt. Die Java-Uhren drehen seit jeher langsamer. Im Bezug zu .NET ist natürlich noch zu sagen, dass .NET einen massiven Zeitvorteil hat, weil es sehr viel neuer ist.
Wenn du Bock auf funktionale Programmierung hast, geht das seit Java 8 auch sehr gut. Da bin ich nicht supertief im Thema drinne, aber zu erwähnen ist auf jeden Fall das Java Functional Interface und Streams. Damit ist auch mehr oder weniger alles abgedeckt, was funktionale Programmierung angeht.
Bezüglich Java/Kotlin/Groovy kann ich dir nicht so wahnsinnig viel sagen, außer, dass bei uns in der Firma für Prototypen eher Groovy verwendet wird. Für den Produktivbetrieb eher Java selbst. Im Endeffekt ist das aber auch egal, weil alles in den gleichen Bytecode kompiliert wird. Auch hier würde ich sagen, dass es auf das Projekt ankommt. Wenn du Java kannst, dann sind aber auch Kotlin oder Groovy keine große Hürde mehr, im Endeffekt sind es ja "nur" Skriptsprachen für Java-Programmierung.
Alles was ich gesagt habe, bezieht sich übrigens nur auf meine bisherigen Erfahrungen in zwei Unternehmen. Ob mein Bild mit dem Bild der "Allgemeinheit" übereinstimmt kann ich dir nicht sagen. Natürlich kommt es, wie gesagt, auch immer sehr stark auf das jeweilige Projekt und die getroffenen Entscheidungen zur Umsetzung an. Pauschal kann man deine Fragen gar nicht wirklich beantworten.
 
Jenkins kann man machen. Wenn man quasie zum build team möchte. Sonst hat man damit ja wenig zu tun.
JEE kannst du dir sparen
Gradle oder maven ist so ein Religionsding
Gradle ist einfacher, besser zu erweitern. Maven ist altbacken und oft XML Hölle.

Spring mal anzuschauen hilft enorm.
Aber Java ist breit gefächert eingesetzt. Kommt ja drauf an was man machen möchte. Java als backend für Web oder Swing oder FX oder reine Server Dinge
 
blackbirdone schrieb:
JEE kannst du dir sparen
Dir ist klar, dass zu JEE unter anderem auch die komplette Servlet-API, JavaMail und auch die Persistence API gehört, also alles, was auch nur am Rande mit Webservices zu tun hat?
 
Also was ich brauche kann ich nicht sagen. Wie gesagt mein langfristiger Fokus ist weniger das Coden selber, sondern eher Systemdesign. Es wird also sehr Richtung Microservices gehen, also bspw. Kafka oder andere Thin-Broker. REST Services werden eine große Rolle spielen. Und tendenziell eher Web/Backend Fokus. Frontend möchte ich mir jetzt nicht unbedingt serverbasiert anschauen, da sehe ich keine große Zukunft in Zeiten von React/Vue/Angular/younameit.

Was ich so in unserer Firma mitbekommen habe ist: Entweder Spring Boot oder JEE. Wobei der Fokus derzeit scheinbar eher Richtung JEE geht.
 
Dann lies dich unbedingt ins Spring Framework ein. Für jeden einzelnen der von dir genannten Punkte bietet Spring etwas (mehr oder minder) fertiges an. Z.B. kannst du problemlos das Frontend in React entwickeln und das Backend mit Spring. Auch für Kafka und andere Messaging-Services gibt es Lösungen von Spring (bei dem Thema bin ich aber raus).
Spring basiert übrigens auf JEE, ist also im Prinzip das selbe, nur "anders" (sehr viel besser IMHO). Der Hauptunterschied ist, dass Spring an extrem vielen Stellen deklarativ arbeitet. Das heißt effektiv schreibst du nur einen Bruchteil des Codes, den du für eine vergleichbare JEE-Anwendung brauchst.
Ergänzung ()

Um den Einstieg in das Spring Framework zumindest ein kleines bisschen zu vereinfachen, kann ich übrigens Spring Boot empfehlen, weil es die initiale Konfiguration und das Einrichten eines Projekts erheblich vereinfacht.
Hilfestellungen zu Spring findest du im Web ebenfalls haufenweise, vermutlich sogar mehr, wie zur Servlet API direkt.
 
  • Gefällt mir
Reaktionen: trialgod
Ich kann Dir noch die ganzen Servlet-Container-Geschichten also (bspw. Tomcat, Jetty, ...) ans Herz legen, da es viel mit Deployment und Bootstrapping zu tun hat. In dem Kontext natürlich auch Docker.

Das ist ein großer Unterschied zu .NET, wo es halt den IIS gibt und der eigentlich alles von Haus aus kann.
 
  • Gefällt mir
Reaktionen: burglar225
Zwischen den Zeilen lese ich, dass du eher im Web-/Enterprise Umfeld unterwegs sein und weder Waschmaschinen noch für Android programmieren willst.

Vorwort: Ich selbst bin spring-boot Entwickler und bin daher sicherlich nicht unvoreingenommen.
Was ich so beschreibe wird unter JEE wohl ähnlich sein, dennoch glaube ich, dass Spring(-Boot) die Nase vorn hat, was z.B. Umfang und Modernität anbelangt

Frameworks/Libraries:
Die beiden verbreitetsten Frameworks sind JEE und Spring.
Mit Spring (bzw. um genauer zu sein Sprint Boot) hast du ein umfangreiches modernes Ökosystem, mit guter Doku und großer Community.
Mit Spring-Data kannst du Datenquellen anbinden, für Security Aspekte gibt es Spring-Security etc etc.

Daran würde ich mich dann weiter orientieren. Willst du Tests schreiben googelst du "spring boot testing" und stößt dann zwangsläufig auf Testframeworks, wie JUnit, Mockito, Powermock etc etc.

Spring-Boot arbeitet zum einen sehr viel mit Annotations, zum anderen gibt es oft sinnvolle Defaults (Convention over Configuration). Das heißt zum einen, dass es sich meiner Meinung nach nicht wie "Java 2001" anfühlt und man schnell Ergebnisse bekommt, anfangs aber oft nicht versteht warum.
Es reicht eine Annotation irgendwo anzuhängen und Spring initialisiert Defaults und macht "Magie".
Will man vom Default abweichen muss man sich reinarbeiten und Dinge manuell konfigurieren. So oder so schwindet mit wachsendem Verständnis der "Magie"-Faktor.

Erwähnen möchte ich auch noch Lombok (https://projectlombok.org/).
Das spart einen einiges an "noisy" Code, wie getter/setter etc. Ich kann die aber nicht sagen wie verbreitet das ist.

Tools:
Package-Management/Build-Tool: Gradle ist in der Android Welt sehr verbreitet, bei Enterprise-Java (JEE und Spring) ist es Maven.

Build/CI/CD-Tool: Sich mit Jenkins etwas zu beschäftigen ist sicher nicht verkehrt. Ist, denke ich, recht verbreitet.

IDE:
Die verbreitetsten IDEs sind, glaube ich, Eclipse (für Spring gibt es mit der STS (Spring Tool Suite) eine spezielle Eclipse-Version) und IntelliJ. Mit beiden lässt sich, finde ich, wunderbar arbeiten.

Kotlin:
Seit Spring 5 unterstützt Spring auch Kotlin. Beispiele in der Spring-Doku gibt es zunehmend neben Java auch für Kotlin und die Unterstützung wird in Zukunft auch zunehmen. Ich glaube der Großteil in der Industrie ist immer noch Java, aber Kotlin nimmt zu. Kann noch dauern, bis das so richtig verbreitet ist, es lohnt sich aber sich das schonmal anzuschauen.

Fazit - Meine persönliche Empfehlung für "Ich will Java Webentwickler werden"
Fang mit Spring-Boot als Maven-Projekt an. Von diesem Startpunkt aus hangel dich weiter.
 
  • Gefällt mir
Reaktionen: bog, trialgod und burglar225
kthxbye schrieb:
Erwähnen möchte ich auch noch Lombok (https://projectlombok.org/).
Wie zum Teufel konnte ich Lombok vergessen? :confused_alt:
Definitiv die beste Library überhaupt. Die erste und wichtigste Dependency in jedem meiner Projekte.

Ansonsten guter (und auch für mich interessanter Einblick), da ich nicht speziell Web-Entwickler bin, sondern nur oft damit zu tun habe.
 
Zurück
Oben