In this post, I summarize why through the years I’ve become yet another Java hater.
1. Java is a resource hog
As soon as the JVM is installed and its process(es) loaded into memory, your computer resources and performances are heavily penalised. It allocates itself a disproportionate share of disk space, memory, CPU… It makes everything else goes slower. And let’s not start talking about the Java automatic updater: one of the most intrusive, annoying, frustrating, in one word vicious piece of software ever developed, possibly even worse than a virus.
2. Java desktop applications and applets are slow
And you really do not need a benchmark to realize that. Just count the number of seconds between the time you double-click on a Java application and the time its GUI is finally available for you to interact with. And it’s the same for a Java applet on an otherwise empty web page. Java being a resource hog, you would expect Java applications to make the most of these hogged resources to boost their own performances. Big error: the JVM makes everything else slower on the computer AND Java applications are also slow.
3. New Java application to install = new Java version to download
Almost every time you install a Java application, it requires the latest version of the Java platform. A new version of the Java platform is released almost every month. The result is that each time your install a new Java application, it never works straight away (you said “run everywhere” ?), beforehand you have to find the appropriate Java version, download tens of Mb, install it (alongside tens of other versions of the JVM), pray that you won’t end up with conflicts and finally start the application. And consider yourself lucky if you are not being asked to open a command line and type “java <name_of_the_application>.jar”. What about that for user friendliness ?
4. Multiplatform… if the right Java platform is available
The Java platform is an operating system built on top of other operating systems. Unfortunately there are many different Java platforms with many different versions which of whom are only available on some operating systems and with various flavours and quality of implementation. So Java does not resolve platform interoperability problems, it just moves them a few levels of abstraction higher (and moves performances several levels lower). Each time a new version of Java is released, the whole concept of “write once, run everywhere” becomes more and more flawed.
5. Classpath Hell
How many precious hours of your life wasted on resolving java.lang.ClassNotFoundException problems? If you don’t consider those hours having been wasted, then you really do have no life.
6. YAFL (Yet Another F***ing Layer)
So many useless abstraction layers, please cut the packaging and trim the fat. Each additional useless layer is an opportunity for more opacity, more slowness and more bugs to creep in.
7. Java is a drag on productivity
One of the raison d’être of Java was to be more productive than other programming languages. But after 15 years of existence Java has become the “new Cobol”.
8. The Java security model clashes with the underlying OS security model
The JVM process runs within the security model of the underlying operating system but tries to enforce its own security model. This causes frequent problems and incompatibilities with OS integrated authentication mechanisms like Windows authentication for example. When you start encountering those problems frustration and headaches are guaranteed.
9. Java is a magnet for security exploits
So Java with its super sandbox fine-grained security model is ultra secure ? Yeah, right. Java has now overtaken Flash as the most successful vector of attacks in browsers. Check Java: A Gift to Exploit Pack Makers.
10. Java GUI’s are ugly
Java GUIs stick out like a sore thumb. In addition to being slow, they usually completely depart from the OS look and feel. Like if a two-year old drawing had been sticky-taped on an impressionist painting. Yuck !
11. No multiple implementation inheritance
Multiple implementation inheritance is one of the most handy and useful feature of OOP. Deemed “too complicated” to be in Java but even more complicated to emulate in Java.
12. JDBC drivers hell
Finding, installing and setting up JDBC drivers is a nightmare. Especially when the only error message you get is “connection failed”.
13. Java IDE’s are unintuitive, confusing and buggy
Try developing with Eclipse for example. In addition to being slow and ugly like any other Java desktop application, you end up spending most of your time trying to fix path and configuration problems created by both Java and Eclipse. When an IDE makes you less productive than you would be by simply using vi or notepad, it is just worthless.
14. Heavily tied up to a software vendor
Why would you use a language and platform whose specifications are heavily tied up to a commercial company? Have you seen the new line of t-shirts launched by James Gosling? It says it all. Since Java was born, it has been marred by so many lawsuits between Sun, Microsoft and now Oracle and Google, this is just sick. Each time Sun/Oracle wins a lawsuit it means Java loses one more big chunk of its influence. I sincerely hope Oracle wins its lawsuit against Google so that Google completely gets rid of Java on its Android platform. Check the link at the end of this post to know why.
15. An army of lame developers
Nowadays Java is the only OO language taught in computer science courses. It is so removed from actual “computer science” that most Java developers have no clue about computer architecture. Most programmers nowadays only know about Java. This is a perfect recipe for ending up with waves after waves of lame Java applications.
16. Brainwashed supporters
Conscientious Java application developers spend so much overtime trying to fix or workaround all the problems created by Java that Java takes over their life and their way of thinking. For conscientious Java developers, defending Java becomes defending their way of life. Any attack on Java becomes a personal attack on them. In the realm of science, when subjectivity takes over rationality, hypotheses become religious rules. And this is what Java has become for many of its followers: a religion i.e. a rigid system of ideas and opinions built on sand (in a sandbox in the case of Java).
In one word Java is lame. If you are serious and want to be efficient at developing professional, high-performance, good-looking, multi-platform software using object-oriented programming, do not use Java.
And as a computer user, make yourself and your computer a favor : uninstall Java and never let it sneak back in again. Your whole computing experience will be vastly improved. If an application has been written in Java you can safely assume it is lame and that there is a better one out there, written in C or C++ for example, that does the same job faster and better.
As a bonus for having reached the end of this post here is a link to a small video demo illustrating how Java performances are trashed by other programming languages on the Android platform : YouTube – Android 1.5 speed comparing C++, C# (mono) and Java (using Roozz plugin)
And if you want to carry on, here is another good article on the topic : Why I hate Java