Java's got a Bad Rep: The Rebuttal
So it's been a week and I've seen a lot of response to my last
entry. One commentor in particular asked for a point by point rebuttal; which struck me as a spectacularly good idea. Here are the bulk of the arguments and my responses.
- Java isn't Free / Open Source / GPL / RMS-friendly
- Why use Java when there are plenty of native languages / environments to
- Java is missing templates / preprocessors / lambda functions / other
advanced language feature that only backwards cave-dwelling languages lack.
- There aren't any applications written in Java. It must be a failure.
- Java / Swing is slow, looks bad, and doesn't feel native, doesn't let me
do cool stuff like animation, 3D, or sound.
Here we go.
(1) Since it's such a huge (and apparently controversial) topic, I am covering
the open sourcing issue separately in this
other post. However, in summary,
opensourcing doesn't solve our problems and buys us very little, in
exchange for a lot of new problems. Follow the link for a full analysis.
(2) Why use Java when there are plenty of native toolsets to choose from? Well,
first of all, it's better than a lot of them. If you want to write an application
(not a script or a device driver) then Java provides you with a good toolset, great
libraries, and a clean language which learned from the mistakes of the past. It's
simply a good applications language that can make your programmers more productive.
Java can also be "write once, run anywhere". For people who need to
support multiple platforms, especially more esoteric ones where you could
never hire a native expert (say the palm pilot, or win 98), or if you simply
don't want the headache of dealing with bizarre version issues, then Java provides
you with a consistent platform to code against. It's compile once, run anywhere
features are especially important in the age of ubiquitous networks with code
flying over the wire. Java Webstart has been a godsend to companies with
locked down desktops spread over the globe. (potentially running eight different
versions and patch levels of Windows).
So why use Java? Because its better than a lot of the alternatives for writing
(3) Java is missing language features. This is probably more a
matter of taste than anything else, but Java isn't lacking features because
no one thought to add them. Nothing in Java is new. Every part of the
system, from language to library to VM, was carefully considered against
the 20 year history of OO languages. Preprocessors were left out for a
reason. So were pointers. Java is missing a lot of the more esoteric
features, but most of those features aren't used in day to day programming
anyway. A few of them, like generics, are slowly becoming more mainstream,
and Sun is adding them as people ask for it. Remember, computer languages
evolve slower than hardware or software platforms. It took 20 years for
inheritance and polymorphism to become common place (and it's till not as
common as you might think). The features Java is supposedly lacking we
really shouldn't miss. And if there's something you just have to have, then
you can use one of many addons to provide it like href="http://xdoclet.sourceforge.net/">XDoclet and href="http://shark.sourceforge.net/">Shark, safe in the knowledge that
if it compiles to Java bytecode then everyone can use it.
(4) Nobody uses Java. This simply isn't true. Probably 99% of
Java applications are either serverside (where the user doesn't know or
care what the application is written in) or are made for internal corporate
use. As Eric Raymond href="http://www.catb.org/~esr/writings/cathedral-bazaar/magic-cauldron/">pointed
out: "there is empirical evidence that approximately 95% of code is
still written in-house". Most Java applications, even Swing apps, are
for corporate use. In these environments the robustness, productivity, and
easy of deployment more than make up for Java's other flaws. There are plenty
of high quality applications that people don't know are written in Java, and
that's really the problem. Especially on the desktop I'd like to see more highlighting
of Java success stories (and more ways to get the word out!)
(5) Java is slow, ugly, and doesn't do modern native things. I've saved
this for last because I think it's the biggest problem. Java has this impression
because, well, it was slow and ugly. Back when Java debuted
nothing worked properly, applets were slow to load, and AWT used a horrid
subset of the available widget set on each platform, all of which looked
different and ugly.
Today the situation has changed. Swing has gone through several
revisions to become a powerful toolkit, if complex. The speed issues have
mostly gone away from improving the libraries and a decade of faster
processors. Even on my now aging iBook I run jEdit quite nicely and have
written tens of thousands of lines of code with it.
Swing itself has also matured (and gotten prettier). Most of the big
bugs have been fixed. Quite a few attractive Look and Feels are available
from Sun and 3rd parties. A lot of the missing functionality from the
early days is finall in place. It is entirely possible to make great
desktop applications, even consumer apps, with Java. We just need to
get people to realize it.
Despite all of my argument preceding, Java still has an image problem.
People still think that you can't write good desktop applications in Java
because they don't see them. So what can we do? Show them! And keep
First, we need to show off the good apps. Get the word out. I think we
need a place to highlight great applications. Perhaps a sidebar on Java.net
with a new application each day. The only requirement is that it be a
desktop application with a downloadable demo. This spot should have it's
own RSS feed and archive. Then we have to start the publicity. Get other
sites to link. Make a download.com for Java apps.
Second, create a place to collect all of the tips and tricks it takes to
make a quality desktop application. I've started a Wiki node href="http://wiki.java.net/bin/view/Main/BetterDesktopJava">here with a framework of what we should pull together: exe
packaging, good look and feels, swing tutorials and articles, how to work
with different kinds of media. Contribute whatever you know. We need to
fill out the missing pieces.
Third, start a contest for quality Swing applications along the lines
of O'Reilly's MacOSX app contest. We should have different categories for
commercial and open source, full applications and mini programs, and
maybe further sub-classification (word processing, media and graphics,
personal organization). We'll probably need to get a corporate sponsor
We all know that Java can make great software on the server. It's
time to reclaim the desktop. (Wiki Here)