Skip to main content

Mr. Brightside

Posted by editor on September 10, 2008 at 4:32 AM PDT

Wait, now Java does too much?

The forum section of the front page gets four items today: one more than usual, but two less than I had been considering. There are a bunch of really good discussions going on. Well, there's also a new spam trick -- spammer posts a "hey, does anyone have bulk e-mailing software" message from one account, and then the SEO-targeted link-tacular followup from another -- but I caught those and deleted the messages (the users will be deleted in a few hours once the U.S. West Coast wakes up).

Anyways, back to the legitimate discussions, alexj33 posted a provocative message in the JavaTools forum -- probably should have been in JDK feedback, but again I digress -- to ask Has Java lost its way?

I used to be a Java developer back in the late 90s. Java has always been a frustrating enigma for me. Allow me to explain.

Several times I've browsed in and out of the latest Java books and forums, and I cannot believe how *complex* it has all become. Quite simply, does there have to be a new API and a new 3rd party framework for every little thing a developer wants to do?

My understanding is that Java was meant to take the complexity out of previous development platforms, yet in my eyes it has become exactly what it was meant to replace, albeit in different ways.

Who can keep up with this dizzying array of acronyms and libraries? Who has the time to? Is it even worth it to do so? Who has time to research the frameworks to find out even what is worthwhile to invest more time in?

Is this a valid criticism? We've heard a lot over recent years about Java "using up its complexity budget", but some of that is aimed at language features like generics (and possibly closures). This complaint has to do with the breadth and depth of the libraries available to the Java developer. On the one hand, there are a lot. A quick word-count of the JDK 6 Javadocs shows that Java SE has over 3700 public classes, and that's before you bring in libraries like Java EE.

But on the other hand, does anyone really try to keep up with it all? Java is large enough to have specialization, and it's likely the server-side programmer never looks at anything in Swing, just as the desktop developer neither knows nor cares how servlets work. By this argument, Java's no different than any other large platform: do you suppose there are a lot of MSDN developers who excel both at Direct X graphics and .NET web services?

alexj33 finishes up with some interesting questions that are worth keeping in mind as we approach Java 7 and, no doubt, a new set of APIs:

OK, rant over. Now onto the real question. My question to you all is threefold:

1. What do you think the original purpose of Java was?

2. Is Java on the right path today? Can it continue in its current direction?

3. Is Java itself embracing or alienating the developer community?

Also in today's Forums, terrencebarr posts a reminder of Java ME's value in
Re: Why not get rid of the JVM and JIT for mobile device? "Sure, Java ME fragmentation is a source of extra effort and frustration but one of the key reasons is because the underlying native platforms are so radically different (not really Java's fault). Deploying native apps not only requires developers to deal with the native differences but adds a new layer of complexity with different processors, executable formats, operating systems, libraries, security mechanisms, etc, etc. It grows the problem space by two or three dimensions."

Over in the Project Wonderland forum, nicoley posts a
New Proposal for Voice Calling in 0.5. "I have just added to the wiki the first draft of a proposal for Voice Calls in Wonderland version 0.5: The general concept of this design is to unify "voice chat" and telephone integration. The proposal suggests a single user interface for making VoIP calls and PBX calls. It also includes the design of an in-world personal virtual phone. This phone can be used by each Wonderland user to both place and receive voice calls."

Finally, ingridy clarifies a timeline question in the followup
Re: "Next Generation" Plug-In Support for AMD64?, saying "64bit plug-in will not be ready for 6u10 final release."

In Java Today,
the ME Framework 1.2.1 release is now available on the project's download page. "This release went through an extensive QA cycle and is ready to be used for test suite development. If you downloaded the ME Framework 1.2.1 development releases, please switch to this final milestone release." The ME Framework is a set of JT harness plugins that supports the Java ME platform. TCK architects use the JT harness and the ME Framework to construct TCK test suites for Java ME technologies.

Kirill Grouchnikov has started a new series of blogs in which he talks about the specific tasks involved in taking a UI definition from your designer and turning it into a working application. Step 1 is analyzing the original design or more specifically, identifying the application's decoration areas and functional areas. Step 2 is mapping design to UI toolkit, which means "map[ping] the application functional areas to Swing container hierarchy and the application decoration areas to Substance decoration areas."

Sathish K. Palaniappan and Pramod B. Nagaraja's article Efficient data transfer through zero copy explains how you can improve the performance of I/O-intensive Java applications running on Linux and UNIX platforms through a technique called zero copy. "Zero copy lets you avoid redundant data copies between intermediate buffers and reduces the number of context switches between user space and kernel space."

In today's Weblogs, Fabrizio Giudici begins with a story about Remote profiling with NetBeans. "Varun Nischal, one of the fresh new members of the NetBeans Dream Team, is hosting some friends on his blog. I've just published a small story about the NetBeans Profiler used in remote mode."

In Add resetValue() to EditableValueHolder?, Ed Burns "polls the community about whether to break backwards compatibility in one small interface in JSF 2.0."

Finally, Marina Sum promotes a Join OpenSSO and Single Sign-On Presentation in Second Life. "Registration is now open for the September 30 session."

Current and upcoming Java

Registered users can submit event listings for the href=""> Events Page using our href="">events submission form.
All submissions go through an editorial review before being posted to the

Archives and Subscriptions: This blog is delivered weekdays as
the Java
Today RSS feed
. Also, once this page is no longer featured as the
front page of it will be
archived along with other past issues in the href=""> Archive.

Wait, now Java does too much?


alexj33, it doesn't matter what you or I believe as developers. The language experts, theorists supreme and the guardians of Java will tell you what's good for you. They'lI tell you that Java will become obsolete if it doesn't "catch up" with other functional programming languages or doesn't get more "expressive and concise" like morse code by biting a silver bullet called BGGA closures. The gods have spoken. Comply or be left behind, mortal. :-)

So, the complaint is that due to Java becoming more capable, it is now too complex? Well, I can see that as standards have evolved some items have been kept for 'backward compatibility' that quite honestly add bloat and confusion. However, if you need portal technology and Java didn't offer an API to do it then you would complain. The problem I see is a lack of integration with current API's or total replacement, pick one. I have news for you. As the needs of the business change you will have to continue to learn new frameworks. Pick you language(s) to do that in. Is Java the correct one for all of them. No. But it is the one for a lot of them and will continue to be for me. That said, I think Java needs to be cognizant of the fact that it should not try and be all things to all people and consider what should it provide more capability to plug into vs. implement.

The ever increasing complexity of Java has convinced me to move away from it. All one needs to do is look at the Java EE tutorial to get a feeling of hopelessness. Do I seriously need 5-6 different roles to deploy a web app to a production environment? I work in one of those roles at a large company, and I can tell you from experience that it causes more problems than it solves. Java is far too complex. Look at the Portal framework. I need a whole new set of skills to develop a portal application vs. developing in a servlet environment. Why? What's the point? I don't want to have to learn 16 different frameworks and standards just to create a halfway complex portlet. Not only that, why should I have my programming capabilities limited by some ill conceived standard (JSR 168 - you can't access http cookies. Just ran into that yesterday). The Java community has convinced much of the business world that all these standards and frameworks are necessary to maintain compatibility and interoperability, but in the end, not even the big Java vendors can keep applications compatible between versions of their software. Thanks for the ride Java. You've taught me an important lesson. Things can get too big and too complex to be useful.

Java has to keep adding APIs to support new functionality and programming models. I think the complaints about generics are overblown, and I don't think closures will kill the language. What works to kill a language is simply a new generation of programmers. They see Java and how huge it has become, and then they see python, which seems small, and hey - no compiler needed! So they start learning Python and they grow with it over time so they don't mind the additional complexity. Ten years from now, Python will have a gazillion APIs and the next generation will say it is too complicated and start learning "Foobar" or whatever the small, simple language is of the day. And this language will have a compiler! No more bugs in my programs because of typos! Cool!