It served a purpose “Write once, run everywhere” remains broadly true with Java
However, you pay a penalty. Under the hood is “virtual machine” which takes up CPU cycles.
Think of the Star Trek Universal Translator. If you were to build one to talk to a Chinese person, every time you would say something in English, the machine would spend some time (be it seconds or milli seconds) translating to Chinese before spitting it out to the intended recipient. Now when Mr. Shanghai Guy replies to you, it AGAIN has to translate back to English and takes up some time.
No matter how fast your processor is, the penalty is there and if you add up all the transactions going back and forth and back (millions upon billions upon trillions), the penalty becomes noticeable.
So, soon you start to not look forward to these Universal Translator conversations with Mr. Shanghai Guy and the day he announces he has learnt English via Berlitz, you jump at the chance to talk in English with him and ditch the Universal Translator.
In Javaspeak, you prefer a Native App vs a Virtual Machine App
Another issue with Java. It built applications that had the most common GUI and functionality features. That makes sense as it had to run “everywhere”. What this meant was that if a particular Operating System (like Mac or Windows) had some unique GUI or functionality features that no other Operating System did, Java in most cases did not support them. So, all the Java apps looked pretty boring and felt “limited”
In the above example, imagine if all your Universal Translator did was limit itself to the common words and grammar of all the languages. Now, you would be stuck talking “formal English” and any of the colloquialisms of English would not be translated and neither could you indulge in your fondness for puns (a particularly English pleasure). Limericks would befuddle the translator.
So, yeah, Java did the job when needed. However, it never was going to replace a native app. With Windows maintaining a 90% domination of the desktop, it makes sense for app makers like Intuit to write Quickbooks as a native app.
Same has applied to Apple. Look at all the iPhone/iPad apps. Native apps...all/most of them.
Nice description - I’ve dabbled in Java but much more of a C guy - not even C++. But that’s how I see things as well. Java has its role in life but it certainly hasn’t taken over the world. But then again, very few things have. A few years ago you might say the x86 architecture has but now ARM and others are giving even it a run for its money.