Java / JVM Black Magic / Literatur gesucht

Hin und wieder landet man in einer Diskussion, sei es geschäftlich oder privat, bei dem man allerlei Vorurteile von Java um die Ohren gehauen bekommt.
Vor einiger Zeit musste ich einem eingefleischten C++er erklären warum das hier

// pre allocate
public static final Exception e = new Exception();

(und ähnlich selten dämliches)
ein Layer 8 Fehler ist und nicht der “dummen” Java Sprache geschuldet.

Früher gab es mal einen interessanten Blog, der hieß glaube ich The Black Magic of Java, bei der darauf eingegangen wurde, warum Allokationen in Java billiger sind als in C++, oder was mit totem Code zur Laufzeit passiert, oder oder oder. JIT JVM Optimizations und so ein Kram.

Ich suche eine Literatur die ich den Leuten um die Ohren hauen kann. Ich hab einfach nicht die Geduld dafür konstant gegen eine Wand zu reden, warum die C+±Schneeflocke vor mir offensichtlich nicht der intelligenteste und begabteste Programmierer der Erde ist.

  • effective java, bloch (et al.), 3rd edition
  • Die Bücher von Robert C. Martin:
    – Clean Code: A Handbook of Agile Software Craftsmanship,
    – Clean Architecture: A Craftsman’s Guide to Software Structure and Design,
    – The Clean Coder: A Code of Conduct for Professional… (nicht gelesen)
  • Java by Comparison: Become a Java Craftsman in 70 Examples, Simon Harrer (n. g.)
  • Head First Design Patterns (A Brain Friendly Guide), Eric Freeman (n. g.)
  • Java Concurrency in Practice, Brian Goetz (n. g.)
  • Refactoring: Improving the Design of Existing Code, Addison-wesley… (n. g.)

Das wären nur ein paar…, aber das erste ist super, imo.

Edit: Ich lese gerad „Real World Java EE Patterns–Rethinking Best Practices (English Edition)“ von Adam Bien und „Java EE 6 and black coffee: A Java EE 6 tutorial (English Edition)“ von Malay Mandal, komme damit aber nicht wirklich voran, Alexa liest so komisch :smiley: Aber zum Beispiel ersteres hat ein Kapitel mit transforming and re-throwing Exceptions…

Danke, ich blätter mal durch :slight_smile:

Eigentlich bin ich … nun… nennen wir es mal ein “sabbatical” … aber wenn ich hier so eine Frage sehe, und da dann lange keine Antwort kommt, und dann eine, wo es um “clean code” geht, kann ich einfach nicht anders, als mich einzumischen. “Java Concurrency in Practice” könnte zwar ein erwähnenswerter Kandidat sein, aber ist so spezifisch für die concurrency-API, dass es schwierig wäre, dort Argumente rauszuziehen.

Das, was du dem Titel nach vermutlich (!) meintest, war nicht ein Blog, sondern die Seite von https://shipilev.net/ :

Da könnt ihr dann mal den Assemblercode vergleichen, den ein C++ - Compiler und die JVM generieren.

Wenn es um C++ - bashing geht, kannst du ihm ja auch mal die Aufgabe stellen: Implementiere diese Funktion

int32_t add(int32_t x, int32_t y) {
    ...
    return ...;
}

so dass dort zwei Zahlen addiert werden. Und wenn er dann meint, das wäre einfach, oder meint eine Lösung gefunden zu haben - wenn er also der irrigen Annahme ist, C++ sei eine “gute” Programmiersprache, mit der man zwei Zahlen addieren kann - dann verweise ihn auf https://blog.regehr.org/archives/213

Ok, die Vorschläge von mir waren blöde… Nix, um jemandem etwas um die Ohren zu hauen. Ggf. entfernen.

Es geht mir nicht darum C++ zu bashen. C++ hat seine Anwendung. Es geht darum sich jede sinnlose Diskussion über Sprachen möglichst kurz im Keim zu ersticken. Einer der ersten beliebtesten Sätze in jedem Programmiererkurs ist „Könnt ihr erst mal eine Sprache könnt ihr alle“. Ich lehne mich hier mal aus dem Fenster und sage: Das ist einfach nur falsch und könnte nicht ferner jeder Realität sein.
Sprachen bestehen aus mehr als nur ihrer Syntax, sondern auch aus den Features, Plattform, Compiler, Community, Bibliotheken, Definitionen…

Die JVM erlaubt es nun mal designorientiert UND performant zu arbeiten, bzw. diese ganzen coolen Sachen die ich an dieser Stelle fast auflisten wollte, aber es geht hier ja gerade darum eine entsprechende Literatur zu finden, einem C++er schnell in die wunderbare Welt der JVM Hochsprachen einzuführen.

Danke für den Link zum Blog, bzw. die Seite. Genau die meinte ich. Besonders der zweite Link (2015) ist unheimlich interessant.