Fog Creek Software
Discussion Board

The Problem With Java

Sun made a mistake with Java because they put the needs of developers before the needs of users. Users are punished with Swing or unsophisticated browser-based UIs, but developers are rewarded with the promise of cross-platform development. A user of a Java program couldn't care less that it will run unchanged on another platform but they do care that it's slow. You can gain a responsive UI using the SWT but then you sacrifice portability. I can't help feeling that the Java and .NET model of development is moving away from tight, responsive GUIs and causing the impoverishment of our users.

Devil's Advocate
Tuesday, January 28, 2003

In 1979 things changed.  Micro-computers became available that were both powerful enough to use for real tasks and affordable for individual use.

Up to then, sharing a processor from terminals was the norm.

Mainframes, time-share and minis all began to decline, slowly at first but then extremely rapidly.  The PC almost sealed their fate.  Rental computing, the model by which IBM grew leviathan, not only became uneconomic but the courts ruled it an abuse of monopoly.

Even with micro-computers it was quickly learned that you had to join them together to share data if not programs.  So networking and multi-user access popped up shortly afterwards.  The same lesson was learned all over again with PCs.

Even so, the model of processing remained the same, one user, one processor with the software running on that processor.  The inefficencies were made up by the gloss that could be put into the user interfaces to make them easier and more productive to use (or so we thought).  The emphasis was on building applications that could be bolted together even if those applications were from entirely different vendors.  We componentised.

Then we networked the networks, the internet and its ugly bastard child WWW. 

Now for the most part users of the internet just treat it as a library cum coffee shop cum love hotel.  Somewhere to look up weird stuff and giggle at the drawings in the 'adult'  books while trying to get off with the girls.

But that doesn't make much money for many people.  The dot coms hit on the idea of extending components into the internet so they could repeat the model of renting processors but this time instead of processor cycles it would be services delivered.

But for all that to work we needed cross-platform.  Just writing for a single platform at a time was too slow, too many other competitors were pushing for the same gravy train. 

Sun, believes that the internet is its baby that it understands it in a way that grumpy old Microsoft never could.  Java was the lever to push Sun into somewhere other than a not very successful hardware vendor.  It wasn't intended as that in the beginning but marketing soon 'Made it So'.

Java, though, bounced against the wall of the model; single user, single processor.  Because there were all these different platforms about and because the largest population of all was MS, Sun had no MS specific GUI, it didn't even have much of a clue about what a GUI should be.

That didn't matter so much in the *nix world, users there were used to having no standard GUI widgets, they even celebrated it.  MS users tended to feel physically ill running a Java app or at least as if their thumbs had been cut off.

And so we have Swing, Qt, XUL, Uncle Tom Cobbley and all.

All because of economy of scale.  If I can rely on some other abstraction to take care of the mechanics of getting stuff to and from the user in the GUI then I can concentrate on the real business of the application (which when boiled down is twiddling with some bits of data, storing them and representing them at some other time) and I get to test it just once, instead of iterating for all platforms and having all those platforms in house and maintained (with all the current versions available).

Logically, that has nothing to do with providing web services.  Services on some other machine shouldn't have a GUI, there's no point.  The GUI belongs with the user.  That goes for all those crappy Web interfaces, they are pointless.

Java isn't going in the wrong direction, its just used sometimes for the wrong purposes.  That its interpreted at runtime is no real advantage at all, the JVM is an advantage because its a standard set of services.

Some time in the future there may be an adequate GUI interface for Java, Swing is nearly there, XUL and XBL make it look cheap and nasty though.

Simon Lucy
Tuesday, January 28, 2003

Technology should be adapted to the user, not the other way around.
Any product that violates that isn't there yet.
On the cutting edge you may tolerate technology for technology's sake, because it enables you to do things you could not before.
But attention should shift immediately after to not only providing power, but also providing convenience, safety, pleasure, and anything else that is necessary to adapt to us, humans.

Don't forget we create tools to satisfy us, not for us to satisfy tools.

Practical Geezer
Tuesday, January 28, 2003

Sun did delight their users - namely, developers.

Now if the developers choose the tool that they like vs. the tool that serves *their* users, that is not Sun's fault. There are two logical, yet conflicting, arguments:

1. Tools that enable developers indirectly benefit the end application users, in that the end users get applications more quickly, more reliably, etc.

2. Sun should consider the end user, because Sun serves its customer (developers) better when it enables developers to serve their customers (end users) better.

I think the original post was asserting the second point.

I'm hoping Java continues to get better and better, and its UI's become more commonplace. I'm a Java developer and I enjoy using it - completely selfish reasons, no doubt. But, yeah, I'm frustrated that I can't delight my users as much as I'd like to with Java apps.

Lauren B.
Tuesday, January 28, 2003

Although I understand your argument as it pertains to Java, I don't see how  the same could be said of .Net as it uses the win32 libraries, remains just as fast as previous GUI applications, and look the same. From a user's perspective there would be no way to know the application was written using .Net.

Ian Stallings
Tuesday, January 28, 2003

If or when the UI components of .NET are ported to other platforms, the Win32 layer will have to be faked, which is another layer of abstraction which will cause performance degradation.

Devil's Advocate
Tuesday, January 28, 2003

.NET wraps win32, and uses a VM, it probably does not run as fast

Daniel Shchyokin
Tuesday, January 28, 2003

Ahhh the pleasure in finding a bug in someone else's code where 'i' is declared globally and treated as a local loop control ...

Simon Lucy
Tuesday, January 28, 2003

More properly, System.Windows.Forms wraps Win32 forms, and isn't as fast; WinForms are slower than VB6 forms, too. But the difference isn't all that big on hardware that's even close to recent.

Dave Rothgery
Tuesday, January 28, 2003

Is that it's gui's are acceptable to a unix user used to a no real standard gui interface, but fall far short of well designed on windows, the de facto standard desktop.

I had to use a java app to admin our pix today.  I was ready to dump the coffee cup into Scott's lap it sucked so bad.  Copy and paste was broken!!!!

Sun thinks the victory requiring the loading of java is a big deal for them.  Every app that needs java includes it anyway, so how is having the thing on the pc a big deal?

Another developer said the time is right now for applets as it was only bandwidth that held them back before.  Now that broadband is common, java applets will be popular again.  No, I think the reason applets didn't take off was because if you were unlucky enough to browse to a sight with an applet, you new your browser was toast 9 times out of 10.

Time for java?  Time for java to abandon its gui libraries and start over or stick to the server exclusively.

Crusty Admin
Tuesday, January 28, 2003

Hi. I am a 30-year old programmer, and have been working almost exclusively in Java since 1998. And I agree, Java GUI stuff suck, it has always been bad, even though it is getting somewhat better for each release.

The point is that everybody knows this, and it is not a big issue anymore. Focus with Java is nowadays nearly totally focused on server-side development, with J2EE application servers, Tomcat, Servlets,JSPs, Web services etc. And in those areas, Java excels and grows. Browsed the Apache Jakarta site lately?  It is booming with projects, most server-side related.

So, if you have to build a fancy GUI for Win32, use Visual Basic, or something else. If you need cross-platform GUI:s, then I don't know, evaluate other alternatives. But please, no more whining. I have been hearing these "look at those ugly Swing GUI stuff, Java must be a lousy language" for years. People must learn to use tools adecuated for their needs, and when it comes to GUI stuff, Java might not be it. Now deal with it.

Sorry about my harshness, but the subject matter is really really old, and I am really tired of hearing it over and over again.

Wednesday, January 29, 2003

Two years ago I would've agreed with the above. But things are improving at a fast pace on the GUI side of Java.

IMO, Java is now where Windows 3.x was in 1992(3) - so they are about 10 years behind, maybe a bit closer.

Probably in 3-4 years they'll be where native Windows APIs are today and quickly closing the gaps.

Wednesday, January 29, 2003

*  Recent Topics

*  Fog Creek Home