Advocating that people use either Quarkus or Spring is like advocating they build their stuff in COBOL.
Java is an alright language by itself, but the "EE" frameworks and the ecosystem that surrounds them are corrosive to good software. You are actively harming your brain by learning JavaEE. If you do that to new developers you deserve to have your beans turn undiscoverable on Christmas Eve.
I don't know. I started my career as a Java dev, but what made me grow as a software developer was learning Scala. I learned a lot about functional programming, algebraic data types, effects, and so on.
I'd say Java is a great production language, mostly because it's so simple that I don't need to "learn" it (when you know better than using madness like `==` or Serializable).
I’ve been working as a backend developer for close to six years now, but reading this brought me right back to college.
Like many others, I started with C. It taught me the basics - memory, pointers, writing data structures from scratch - but most of the time it felt like I was just trying not to break things. Solving problems became more about handling the language than understanding the logic.
Then I came across Java, and something just clicked. It felt structured, readable, and intentional. Almost like reading good English. For the first time, I could focus on the actual problem instead of building the tools to solve it. Collections, built-in libraries, and a reliable runtime made coding feel productive, not just painful.
Even now, years later, Java still feels like home. It’s not perfect, but it gave me the space to learn, grow, and build things that last. I really appreciated this article - it captures that quiet strength Java has, and the care so many people have put into making it better over time. It reminded me why I still enjoy writing Java after all these years.
The further away you are from VC money, the more "boring" technologies like Java make sense.
Whole careers have been built on producing CRUD web applications with Java on the backend and Angular on the frontend.
It's not exciting, but so is life without income in countries where this line of work is something to aspire to. I should know, as I live in such a country.
JVM is probably the most impactful piece of software ever written.
our world literally runs on the JVM.
however - the "Java" ecosystem used to suffer from architecture astronauts & complexity merchants. Certain things like Quarkus & SpringBoot have helped reduce that.
if you keep Java simple, don't ingest too much OOP Kool-aid. You can literally make anything that will work today, 10 years from now, 20 years from now. that's reliability you won't get from Python, Ruby & Javascript.
Remember the JVM offers alternatives - Clojure, Kotlin. with a Kotlin a nice compromise.
As a senior Java developper, I would say the most important things you will learn from Java (beyond types) are:
stream on collections (the local functional implementation of map/reduce/…),
interfaces everywhere,
and more importantly safe function extraction by your favorite IDE.
Let me elaborate the last one: you write an horribly long spaghetti code (because you are a junior, or you are in a hurry). That’s ok because the “Extract method” instant feature of your IDE will help you safely extract each piece of code AFTERWARDS into its own small function (that can be tested in isolation, where local variables stays internal to the function, where the interface contract in term of input/output/sideEffect is clear, where the function naming is meaningful).
The IDE can even tell you that this code you are extracting as a function appears at several other locations that should also be replaced with a call to that new function.
I don’t know if Typescript support in IDEs reaches the same level of simplicity/safety in term of function extraction.
But that feature is absolutely critical to go from spaghetti code to clean modular code, when you are a junior/work with juniors.
I’ve in university and the classes have been almost exclusively taught in Java. Learning C/C++ definitely felt like a step backwards, as there’s more you have to implement yourself instead of using the standard library. With that said, I think I learnt a lot more about how systems work under the hood by learning C, so perhaps it’s not as good for learning programming concepts IMO
I've been hating Java since 1999 for many reasons, yet I'm a Java Developer since then (with episodes of Python, C, C++ and Qt). The language itself got on my bad side when the Java developers said that they will not implement operator overloading (I'm a little bit crazy about the subject) because - EKHM - it would allow writing unclear code, which is bananas.
Things missing in Java:
- .? operator
- operator overloading
And there were a lot more, but most of them are already solved. The language is tidy and usable, the Optional api is not bad, the native function calling is improving.
But what I wanted really say is: the language itself is one thing, but the libraries available are the other. The strongest libraries in Java are the part of the language, especially time handling, character encoding, etc. Java was built with utf-16 in mind and other languages are still trying to cope with it. There are frameworks (outside the language standard) which allow crazy fast web service and DB development. It's all good, it's all standard and it's rarely breaking the backward compatibility. So you get a new developer, just after CS Bachelor and they jump into the project and understand the huge part of it.
When I'm learning new languages, I tend to try writing business applications and usually I cope with the same problems: datetime, string encoding, database connecting, etc. Yeah, golang has great goroutines, but they still import web service library from some guy's github, which can vanish in no time.
Java had changing its skin: Applets and Security managers, part of the cornerstone of Java 1.102 are gone.
So Java are 2-3 different evolving language nowadays.
JVM has so strong optimization layers which make very difficult for other languages to provide similar performance (Erlang is one of them in my humble opinion).
Yeah C/C++ program are faster but error prone (manual memory allocation...)
PHP is faster for web developing but refactoring is a nightmare.
Python can compete, but I do see few big projects written in it (Zulip,Dropbox,Plone/Zope).
JavaScript is super rapid dev rapid but can become a mess.
Rust is the newcome, I do not know but it seems quite cognitive-complex to code with it (I may be wrong).
I worked with shit-like Java code and i was always able to refactor it in small chunks.
The verbosity of Java is its major strength, but some things added to the language (like default interface implementations, virtual threads) are drawbacks because it create some confusion on basic pattern strategy you can employ with the language.
Not only it is one of the best ecosystems, Java bashers keep forgetting that it has a cousin ruling 80% of the world market in mobile phones, via the Java subset it supports, and the whole JVM infrastructure Gradle, Kotlin and Android Studio rely on.
16 comments
[ 12.0 ms ] story [ 79.3 ms ] threadJava is an alright language by itself, but the "EE" frameworks and the ecosystem that surrounds them are corrosive to good software. You are actively harming your brain by learning JavaEE. If you do that to new developers you deserve to have your beans turn undiscoverable on Christmas Eve.
I'd say Java is a great production language, mostly because it's so simple that I don't need to "learn" it (when you know better than using madness like `==` or Serializable).
Like many others, I started with C. It taught me the basics - memory, pointers, writing data structures from scratch - but most of the time it felt like I was just trying not to break things. Solving problems became more about handling the language than understanding the logic.
Then I came across Java, and something just clicked. It felt structured, readable, and intentional. Almost like reading good English. For the first time, I could focus on the actual problem instead of building the tools to solve it. Collections, built-in libraries, and a reliable runtime made coding feel productive, not just painful.
Even now, years later, Java still feels like home. It’s not perfect, but it gave me the space to learn, grow, and build things that last. I really appreciated this article - it captures that quiet strength Java has, and the care so many people have put into making it better over time. It reminded me why I still enjoy writing Java after all these years.
Whole careers have been built on producing CRUD web applications with Java on the backend and Angular on the frontend.
It's not exciting, but so is life without income in countries where this line of work is something to aspire to. I should know, as I live in such a country.
I really want to like Java, or JVM-based languages specifically, but its extremely annoying and complicated to figure out how and why thing works.
Would prefer to use Kotlin or Clojure.
our world literally runs on the JVM.
however - the "Java" ecosystem used to suffer from architecture astronauts & complexity merchants. Certain things like Quarkus & SpringBoot have helped reduce that.
if you keep Java simple, don't ingest too much OOP Kool-aid. You can literally make anything that will work today, 10 years from now, 20 years from now. that's reliability you won't get from Python, Ruby & Javascript.
Remember the JVM offers alternatives - Clojure, Kotlin. with a Kotlin a nice compromise.
stream on collections (the local functional implementation of map/reduce/…),
interfaces everywhere,
and more importantly safe function extraction by your favorite IDE.
Let me elaborate the last one: you write an horribly long spaghetti code (because you are a junior, or you are in a hurry). That’s ok because the “Extract method” instant feature of your IDE will help you safely extract each piece of code AFTERWARDS into its own small function (that can be tested in isolation, where local variables stays internal to the function, where the interface contract in term of input/output/sideEffect is clear, where the function naming is meaningful).
The IDE can even tell you that this code you are extracting as a function appears at several other locations that should also be replaced with a call to that new function.
I don’t know if Typescript support in IDEs reaches the same level of simplicity/safety in term of function extraction.
But that feature is absolutely critical to go from spaghetti code to clean modular code, when you are a junior/work with juniors.
Things missing in Java:
And there were a lot more, but most of them are already solved. The language is tidy and usable, the Optional api is not bad, the native function calling is improving.But what I wanted really say is: the language itself is one thing, but the libraries available are the other. The strongest libraries in Java are the part of the language, especially time handling, character encoding, etc. Java was built with utf-16 in mind and other languages are still trying to cope with it. There are frameworks (outside the language standard) which allow crazy fast web service and DB development. It's all good, it's all standard and it's rarely breaking the backward compatibility. So you get a new developer, just after CS Bachelor and they jump into the project and understand the huge part of it.
When I'm learning new languages, I tend to try writing business applications and usually I cope with the same problems: datetime, string encoding, database connecting, etc. Yeah, golang has great goroutines, but they still import web service library from some guy's github, which can vanish in no time.
Java had changing its skin: Applets and Security managers, part of the cornerstone of Java 1.102 are gone. So Java are 2-3 different evolving language nowadays.
JVM has so strong optimization layers which make very difficult for other languages to provide similar performance (Erlang is one of them in my humble opinion).
Yeah C/C++ program are faster but error prone (manual memory allocation...) PHP is faster for web developing but refactoring is a nightmare. Python can compete, but I do see few big projects written in it (Zulip,Dropbox,Plone/Zope).
JavaScript is super rapid dev rapid but can become a mess.
Rust is the newcome, I do not know but it seems quite cognitive-complex to code with it (I may be wrong).
I worked with shit-like Java code and i was always able to refactor it in small chunks.
The verbosity of Java is its major strength, but some things added to the language (like default interface implementations, virtual threads) are drawbacks because it create some confusion on basic pattern strategy you can employ with the language.
Please note that Java is not human friendly. You can learn it for years and still shoot your leg easily.