I always dreaded Java. I started my journey with JavaScript and was using it for backend with Node.js. I loved simplicity and versatility of javascript to use it to build anything from frontend, backend, ML, to crypto projects. Yet, despite Java's popularity, running on billions of devices from mobile phones to POS systems, I couldn’t bring myself to like it. Let me share my personal journey to liking Java and why my perception changed over time.
When eyes meet with Java
Remember the time before Android or iOS became popular? The early touch screen phones used to come with games with Java jar files. I have fond memories of playing so many games and they had size of under 1 MB only!
I started learning HTML, CSS, JavaScript to build website and then later learned Node.js. Why switch when you can build backend with JavaScript.
Occasionally, I tried exploring Java but avoided diving deeper. Writing System.out.println("Hello World") just to print a single line felt unnecessarily verbose. On top of that, there was widespread negativity toward Java from YouTube content creators. People were constantly talking about Rust, Go, Ruby on Rails, and Zig, leaving Java to feel like an outdated relic.
We Meet Again
During my first job, our backend application is written in Java. So I had no other option but to learn it.
- Debugging Frustrations: Now the first pain point for me was the fact that to make any changes I had to compile the class file and replace it in an .ear file and restart Tomcat server, the whole process would take about 5 mins. It was frustrating. In NodeJS I just had to use nodemon to get the changes reflected.
- Understanding OOP code: Getting used to read OOP (Object Oriented Programming) based code was new to me. It got confusing sometimes, classes extending, implementing and what not.
- The Perception of Obsolescence: My overall perception was that no one is starting new projects in Java in 2024. The most of the resources I find online are pretty outdated, they might be relevant but in JavaScript, you'll always find the most fresh content out there.
Living with the Pain
The pain of Debugging
- If you aren't familiar above is a sample image of how stack trace in Java looks like. Initially it was really scary to search in the log file of 50K lines and seeing a lot of caused by chains. The above image paints a nice picture of how debugging in Java can be sometimes. but with time I realised that the useful message is in the bottom most caused by chain mostly.
But sometimes the root cause might be wildly unrelated to the error thrown but this is not something specific to Java, I have faced issues like this javascript as well.
I learned patience and to analyse problems deeply before taking any action to avoid the tedious process of compiling class files and replacing them in the ear archives deployed on Tomcat.
Java has Evolved but has your organisation?
One major feature of Java is its excellent backward compatibility. While this ensures stability, it also means that organizations tend to avoid updating older systems. For instance:
Using XML-based configurations for Spring Beans.
Relying on Enterprise Java Beans (EJBs).
Employing Ant for complex build processes.
These older practices can make development unnecessarily complex. Modern tools like Spring Boot and Gradle are far more developer-friendly, yet many companies stick to the old ways. 🥲
Discovering Spring Boot & Lombok: Java has evolved a lot and modern Java helped me resolve some of the frustrating developer experience that I had. When using Spring Boot I no longer have to change class files inside a war file but the changes get reflected quickly as it uses an embedded tomcat server. Using Lombok annotations I no longer have define getter, setters, and a lot of things get shorter.
Final Thoughts
I have just started my journey and learning more about Java, Spring. Please let me know what are your thoughts on Java, whether you haven't started yet, want to or are a veteran.
But regardless, Java you're a pookie don't let anyone tell you, you're boring, old fashioned, tedious. You're reliable, and understanding you takes time but it's worth it 💖
Top comments (18)
Have used it for many years, mainly because it's just being used a LOT in corporate environments and in big IT systems - Java, they often call "The New COBOL" :-)
Switched from being an "employee" to being a remote freelance web developer years ago, and now it's PHP and Javascript, haven't touched Java for a long time - I think there's very little demand (or opportunity) for remote freelance devs to do Java work, because it tends to be more for "in house" roles in corporate environments.
I believe that recent versions have picked up a lot of modern features (e.g. Functional Programming / FP style constructs a la map/filter/reduce etc) - but I'm not following it anymore, there's no incentive, and I don't really have a reason to.
But there's no denying that Java can be good for your career :-)
P.S. "... despite Java's popularity, running on billions of devices from mobile phones to POS systems ..." - I'm always a bit skeptical about these claims ... yes, it's installed on many computers/devices, but is it also actually used ? I think the last time I ran a "Java Applet" is more than a decade ago ...
good point. Java is used highly by inhouse teams and those teams use java syntax and features from a decade back. But I have seen some modern startups and OSS projects using Java for backend. Checkout out kestra they are using java and micronaut for backend.
Right, I checked Kestra and that seems the kind of thing you'd want to use Java for (hadn't heard about Micronaut) ... yeah it's not only in-house and "corporate" where Java is used, but that's where it is used a lot - and also stuff like big financial systems, ERP systems, payment platforms - like I said, "Java is the new COBOL" :)
20 years of Java experience, here. Things to consider/learn:
@charles_roth_8c0df94d211a, thanks for the really high quality resource for junit. would try out guice for sure sometime.
"Caused by chain" = stacktrace
I would advice against using SpringBoot, but I get why newcomers use it. We all used training wheels when we first started riding bicycles.
Check this: JumperCode
For those thinking Java is similar to JavaScript because it is "java"Script 🤌🏻
lol, yeah first time I thought that too. But JavaScript people were inspired by Java, so they named it JavaScript.
...And Oracle owns JavaScript.
ohh didn't knew it. cool fact.
Um, no, Oracle does NOT own Javascript. They own the trademark in the word -- but that's it. No-one owns the language, if anything the definitive standard is from ECMA, and the Europeans actually call the language ECMAscript.
Oracle DOES own Java, but other implementations of the language, and 99% of the standard Java library, have been declared as reusable/recreatable as "fair use" by the US Supreme Court. So many other organizations (notably Amazon) have their own implementations of Java -- but they stick extremely closely to the standard as defined by Oracle.
Reference: britannica.com/technology/JavaScript
Try Kotlin. It has a nicer syntax and has more features thanks to Kotlin Multiplatform.
(Liked. But it really IS Java underneath, and runs on the JVM.)
Thank you for the post Appreciating Java
50 billion+ devices run on Java.😄
thanks @dhanush9952. sure Java has so many real world applications!
I love Java. Thats it.
as one who left java some 5-6y ago and would not look forward going back :), there's nothing in this article that should make one appreciate java. Ignoring the quarkus, spring, kotlin palliatives I think the main issue is the OOP itself, modern systems are less "heavy hierarchy of classes designed ahead by great luminaries" and more "dynamic smaller systems that can be upgraded on the go". Java works for the second as well, but seems clunkier
Compared to what? Which "modern systems" are you thinking of?
There are certainly plenty of public/open-source Java utility libraries that are "less heavy hierarchy of classes" compared to the original Java standard libraries.