To me it&#x27;s not so much Java that&#x27;s the problem, it&#x27;s the kind of programmer it seems to foster. The language itself is simple enough, so people invent all kinds of architectural bullshit and overengineer everything to hell to appear smart. As a result you get code that replaces compile time errors with run-time errors, and it&#x27;s fucking impossible to debug or understand because everything needs three dozen libraries and five hundred classes before you can even start doing anything worthwhile.<p>This is not Java&#x27;s fault, per se. You can write simple, performant, sane code in it. It&#x27;s just that 95% of people choose not to.<p>I have a feeling that this is part of the reason why Go is gaining popularity (even though I dislike Go as well, for different reasons): much of this garbage (such as DI frameworks, AOP&#x2F;runtime bytecode modification out the wazoo) are either impossible or deliberately inconvenient there, and writing overly complicated code is socially unacceptable.