I hate this whole article. It's right, but I hate it.
A couple of quibbles, though.
The performance gains from decades of JVM optimization are insane. Garbage collection? Mature. Just-In-Time compilation? Rock solid. Cross-platform consistency? Still unmatched in many cases.
Bullshit. I can't imagine how you can think this if you actually work with Java in "eNtErPrIsE", customer-facing applications that receive more than a trivial amount of traffic. Java is the only garbage-collected language I've used where you have to tune cryptic parameters like -Xmx and -XX:MaxMetaspaceSize to make your application not fall over in prod. And in my experience, Java 21 seems to have made memory management worse at least in some ways.
Want a mature web framework? Spring Boot basically invented “Java, but not painful for web dev.”
Oh, Spring Boot is painful all right. It's just that the pain is outsourced to the most senior dev. The more junior devs spend a few hours banging their heads against something "simple" that the Spring docs say should "just work" but doesn't (just add a dependency here and an annotation there and viola; now your application makes your end-users breakfast), so they take the issue to the one developer on the team whose full-time job is to field these "intractable" issues because they're the only person on the team who will bother to learn how to properly read a ./gradlew dependencies output or who is willing to point their debugger at Spring classes themselves and go look at the Spring source code for answers, or even who actually know what a DispatcherServlet is. The junior devs think Spring Boot makes things "not painful" because when Spring Boot make things really fucking painful they just give the problem to someone else, get back a one-line fix ("you didn't put the @DefaultReverseButtholeRotoRooterFactoryDelegate annotation on your @Autowired member variable on line 86") without having any understanding why it'll fix the issue (Spring and Spring Boot aren't supposed to be "understood"; they're magic; you just slap it in your project and copy-paste shit from StackOverflow or god forbid Claude until it seems to work) and go on with their day.