Java is not that bad, honest

October 2025
 
4 min read
 

Well, someone posted on LinkedIn something along the lines of how Java is a pundit of a lot of jokes, but if you look at it a bit closer, it is a good language and you should give it a chance. And then bunch of people commented, almost dividing into two factions, ready to start throwing interfaces and dynamically typed variables at each other. I wanted to chip in with my own comment, but after about a minute LinkedIn told me, nah, you have too many UTF-8 code points in what you spilled over there, can't post that.

So, I had to write it here. See, it's not me, it's LinkedIn, I swear, it made me write this short article, scout's honour.

Here it is:

Java was designed to be used in enterprise scale environments, where multiple teams work on large systems, members of which may never even meet due to not being close to each other either in space (i.e. East Coast/West Coast) or time (i.e. whoever worked on this or that moved on to another company).

Scalability, maintainability, orchestrating effort of dozens or even hundreds of developers over long periods of time, long term support, being able to update complex systems while minimizing or eliminating downtime and chance of breaking things.... list goes on and on and on.

Almost every programming language has had some initial intention behind it, some domain of production it was made for, some workflow it was meant to support, some problem it was meant to solve, some target audience it was designed to make work life easier of.

Find out what that is and you will understand the language and design choices (or lack of) behind it.

Primary goal for Java set by Sun Microsystems was to have one programming language developers would use and write programs that would run on any target hardware (theirs or anyone's who licensed Java from them). Sun Microsystems built CPUs, servers, workstations, operating systems and a host of software and applications to support the hardware they made and their clients. Having one programming language to span and able to support all those domains, was the intention.

From strong typing, OOP, interfaces designed to promote contract-base and API style software design, methods being often called "messages", native support for loading code via class loaders from remote locations (a.k.a network), etc. etc. are just some of the hints at what was Java being designed for. Even just glancing at how the standard library (or libraries?) that comes with Java is designed, with its often super-fragmented approach, where you had to string together 17 different factories all raised from the depths of 9th circle of coffee stains on your work desk, may give you a clue that it was aimed to allow almost extreme flexibility and support for myriad of use cases an enterprise level systems, at the time, needed to support. Elegant? Far from it. Can you make a 13-headed monster with its crypto or image processing library, and then add a new bit in there by just unplugging and plugging back two wires? You can bet your yearly bonus you could.

Is it a perfect programming language? Depends what you mean by "prefect", but let's agree that it's not. Is it a good programming language? Well, if your software development goals align with what the overall design philosophy behind Java is, then yes, it is. Does it still lack in a number of areas? Sure. Why use it then? Because JavaScript was meant for scripting and quick prototyping, PHP was created to automate management of growing number of dynamically generated HTML pages on ancient Web servers, and Python was created as a successor of the ABC langaguage (they needed exception handling apparently) and as a means to interface with the Amoeba OS. That interfacing intention behind initial Python is still alive to this day: everyone knows that if there's a component or library out there coded in C/C++ or something that can be plugged in behind C/C++, Python has an import for it.

We can debate about strengths and shortcomings of any and all programming languages, and it's all fine and dandy, especially if you have some time to pass and would really like to go on Reddit, of all places, right about now. Do it.

On the other hand, if you are clear on what you are aiming to create with that software, application, SaaS, PaaS, AI integration, or whatever other kind of project you are on right now, and if you know your languages and frameworks, choose the ones that support you, your team and objectives the business you are operating in is aiming to achieve.

What I'm trying to say is: go to that workbench over there, look at all the hammers resting on it, and pick the right one for the job. Then hammer away until the job is done so we can all go out and play afterwards.

Peace.