Java-Buch für erfahrenen Programmierer gesucht

Apoyando

Neues Mitglied
Hallo zusammen,

ich suche ein Buch über Java, das sich an mich als erfahrenen Programmierer richtet: Seit ca. 20 Jahren programmiere ich in C++; hinzu kommen Erfahrungen in Python und (wenngleich auch rudimentär) in C#. Um Java habe ich mich bis jetzt immer erfolgreich gedrückt; habe aber jetzt extra die Möglichkeit bekommen, Java "in depth" lernen zu dürfen, um die Java-Entwickler bei uns in der Software-Entwicklungs-Abteilung unterstützen zu können.

Wir machen sowohl das Backend als auch vor allem das Frontend in Java, letzteres mit Swing. Als Entwicklungsumgebung verwenden wir die Eclipse-IDE. Alles in allem wirkt das also leicht angestaubt; ich hoffe, das ist mit einem aktuellen Buch kein Problem.

Eine Vorab-Amazon-Recherche hat mir dieses Buch von Bernhard Steppan geliefert, das die Themen Java, Eclipse und Swing behandelt. Nur hatte ich bei der Leseprobe die (vielleicht unbegründete) Befürchtung, dass das Buch etwas arg "low level" ist. Ich möchte auch keine 300 Seiten lesen um zum Punkt zu kommen.

Das Buch darf gerne Englisch sein, und auch gerne etwas allgemeiner gehalten. D.h. ich suche nicht das typische Programmier-Tutorial, das ein Feature nach dem nächsten herunterreißt (zumal Nachschlagewerke heutzutage eh keiner mehr braucht), sondern ein Buch, das auch die "Philosophie" dahinter erklärt.

Habt Ihr da was auf Lager?

Bonus-Fragen:
  • Könnt Ihr mir auch ein gutes (ebenfalls mitunter englischsprachiges) Java-MOOC empfehlen, idealerweise eines, für das es auch ein gutes Buch gibt, so dass man idealerweise das dort gelernte im Buch nachschlagen kann?
  • Was haltet Ihr von Java-Zertifizierungen? Würde es sich lohnen auf eine solche hinzuarbeiten, bzw. wie mache ich das möglichst effektiv und kostengünstig? Welches Zertifikat lohnt sich für den Arbeitsmarkt am meisten?

Freue mich also auf Eure Antworten und viele Grüße!
Apoyando
 
Auch hallo,

Java hat eigene Anforderungen, was der Compiler als formell korrekten Code anerkennt (im Ggs. zu C++ oder Python). Für Java "in depth" könnte man "Effective Java" von Joshua Blosh oder "Head First Java, 3rd edition" (beides beim O'Reilly Verlag) ansehen. Und zusätzlich zu "elementarer" Programmierung auch Literatur / Spezifikationen zu "Java Enterprise Edition" (JEE) oder Frameworks wie Spring ( https://www.baeldung.com/ ). Sowie Schlagworte wie Maven / Gradle / .. , Docker / Nomad Project / VirtualBox / ... , SW-Tests, ...

Generell sollte man die Codebasis so organisieren, dass (häufige) Änderungen / Erweiterungen / ... aus menschlicher Sicht leichter vorgenommen werden können (Stichwort: SW-Architektur) und das die Robustheit des Systems gewahrt bleibt. Swing ist als Frontend-Technologie wohl zu alt, moderner wären Frameworks / Bibliotheken wie JavaFX, Angular, React, Vue.JS, Svelte,... (<- damit lässt sich (langfristig) aber auch Legacy-Software produzieren: Youtube, Kanal "The Morpheus Tutorials", Video "Die Zombie-Apokalypse der IT: LEGACY-Software verstehen und bekämpfen" sowie Kanal "thenativeweb", Video "Sei kein Steinzeit-Entwickler // deutsch" )
 
Seit ca. 20 Jahren programmiere ich in C++; hinzu kommen Erfahrungen in Python und (wenngleich auch rudimentär) in C#
Dann sollte Java für Dich kein Problem darstellen. Sprachlich gibt es natürlich ein paar Unterschiede, wobei die zu C++ heute größer sein dürften als zu den Anfangszeiten von Java. Heute würde ich Java eher mit C# vergleichen.

Was mir spontan einfällt: Java kennt kein Operator-Overloading, keine Templates, keine Pointer und keine Mehrfachvererbung, wobei letzteres je nach Sichtweise nicht mehr ganz richtig ist, weil eine Java-Klasse mehrere Interfaces implementieren kann und ein Interface mittlerweile auch über Implementierungen verfügen kann.

Damit ist Java sprachlich bis Version 1.4 (ur-uralt) ziemlich langweilig 🙂 Interessant wurde es mit Java 5 (uralt) durch die Einführung von Generics und mit Java 8 (alt) durch Lambda-Expressions, Methodenreferenzen und Streams. Seit Java 9 gibt es immer mal wieder nette sprachliche Features, wie Textblöcke, Switch Expressions oder Pattern Matching, wobei ich nicht weiß, was es mittlerweile alles in C++ gibt.

Der wohl auffälligste Unterschied für einen C++-Entwickler dürfte sein, dass es keine Headerfiles gibt. Es gibt keine Funktionen außerhalb eines Typs (class, interface, enum). Ein weiterer Punkt wäre, dass die Typen in Pakete organisiert sind, die in der Regel 1:1 auf das Dateisystem abgebildet werden. D. h. dass eine Klasse X im Paket a.b sich als Datei unter a/b/X.java findet.

Linking läuft grundsätzlich dynamisch. Hier kann mal ein Blick auf das "class loading" interessant sein. Auch witzig: eine Bibliothek ist in Java einfach ein Zip-File, das die kompilierten Dateien (plus ggf. Ressourcen) enthält. Für Dich vielleicht nicht ganz uninteressant: https://www.java-forum.org/thema/classpath-ressourcen-ides-und-build-systeme.194131/

Naja, und das Memory-Management läuft automatisch. Aber jetzt höre ich auf, so viel wollte ich gar nicht schreiben.

@M.L. hat ja schon Bücher genannt. Wenn es ums Testen geht, könnte man "Test-Driven Development by Example" von Kent Beck anführen. Ein Swing-Buch kenne ich nicht. Grundsätzlich sind die Java Tutorials nicht schlecht: https://docs.oracle.com/javase/tutorial/

Eher als Nachschlagewerk geeignet ist die Insel: https://openbook.rheinwerk-verlag.de/javainsel/ - gibt es auch auf Papier.
 
Danke für Eure Antworten, die für mich sehr hilfreich waren.

Habe mir jetzt mal "Head first Java" bestellt; mir gefällt auch, dass es von der gleichen Reihe auch was über Design Patterns gibt. Doch das würde ich mir später kaufen wollen, ebenso wie "Effective Java".

Bzgl. MOOCs war ich jetzt selbst am suchen, und evaluiere gerade folgende beiden:
  • "Object oriented Programming in Java" von der USC San Diego
    Das scheint "intermediate level" (womit ich keine Probleme habe, ich hab ja von den anderen Programmiersprachen her schon Erfahrung, und auch schon etwas hands-on experience) zu sein, und die benutzen wohl Eclipse als IDE
  • "Java 17 Masterclass" von Tim Buchalka
    Ist zwar entry level, aber sieht mir relativ umfassend und "praxisorientiert" aus. Benutzt die IntelliJ-IDE und scheint auf so ein Oracle-Zertifikat hinzuarbeiten.
Kennt jemand von Euch eines dieser MOOCs?
 
Um Java habe ich mich bis jetzt immer erfolgreich gedrückt; habe aber jetzt extra die Möglichkeit bekommen, Java "in depth" lernen zu dürfen, um die Java-Entwickler bei uns in der Software-Entwicklungs-Abteilung unterstützen zu können.
Darf ich noch ein wenig Selbstwerbung machen? Meine Java Wiederholungen erklaeren schnell ein paar Themen die Einsteiger gerne misverstehen oder falsch machen. Auch habe ich angefangen ein paar Beispiele basierend auf Fragen hier im Forum zu tippen, da ist vielleicht auch was praktisches dabei.
 
MOOC..Java 17 Masterclass...entry level
Kommt auf die Sichtweise an, der Gebrauch von Mustern (i.S. der Code-Lesbarkeit und -Wiederverwendung) ist für Kommandozeilen-Programme wie für komplexe UI's anzuraten (wobei Java den Gebrauch von wenigstens einer Klasse als Container von z.B. Eigenschaften, Methoden,... standardmässig erzwingt). Und der Lehrinhalt wird gelegentlich aktualisiert (wobei die Evolution in Java schon aus Gründen der Abwärtskompatibilität langsamer verläuft als in anderen Sprachen (oder (UI-)Frameworks)) Finanziell billiger wären OpenHPI - Java f. Einsteiger und OpenHPI - Java & JUnit
 
Habe mir jetzt mal "Head first Java" bestellt; mir gefällt auch, dass es von der gleichen Reihe auch was über Design Patterns gibt. Doch das würde ich mir später kaufen wollen, ebenso wie "Effective Java".
Wenn dir Entwurfsmuster neu sind (was mich bei 20 Jahren C++-Erfahrung allerdings sehr erstaunt), würde ich beide Bücher direkt hintereinander lesen. Es gibt beide Bücher übrigens auch auf Deutsch, da heißen sie Java/Entwurfsmuster von Kopf bis Fuß.

Mit Gradle oder Maven würde ich mich an deiner Stelle noch beschäftigen, und Projekte von vornherein in Gradle oder Maven aufsetzen und nicht die nativen IDE-Projekte zu benutzen.
 

Zurück
Oben