Two links, one from dzone and one from sys-con, addressed "what's wrong with java". Interesting thoughts, the dzone guy has an excellent point. But there's more.

The first article is "Java kicks Ruby on Rails in the butt." It's on a sys-con site, so have Adblock up and running unless you want to go blind.

The second is on Dzone: "Java Kicks Rails Butt? Are Java developers everything that's wrong about Java?"

There's a lot going on here. The first article is basically pushing model driven architecture. He walks through a simple RoR app, then shows how OpenXava would do the same app. That's all fine and good, but he has this paragraph stuck right before diving into code:

The productivity in Java world is a cultural problem, not a technical one. That is this is not a Java fault, it's our fault, we, the Java developers, need to design very beautiful architectures, to apply everywhere the GoF patterns, to do everything reusable, to put 3 tiers in all our systems and to use web services for all. We are not looking for simplicity, therefore we have not found it. But, Java is a very elegant language that allows simpler approach to software development.

Whoa! In other words, we java programmers (and hes including himself) are overengineering. We're not being pragmatic as a culture, which may explain why the pragmatic programmers have so little java. Keep this point in mind.

The second link is a response to this one, focusing on that quotes paragraph. He says this:

The author of the article missed an important trying to separate the language itself from the culture of its community, which is a huge part of any platform and it should be considered when analyzing or comparing different platforms. Is that the "social" aspect of a programming language or platform? I guess so (although I feel a total cliche saying it).

Interesting! So when we as programmers arent pragmatic or bright or whatever, we bring down the language, especially for kids looking for the next cool thing. I like the social responsibility thing, but the result is kinda scary, and yes, Forrester, I'm looking at you.

But here's the thing: one of the other points the response had was this:

The author claims Java developers are what's wrong about Java. In his view Java is a elegant language and since the developers never looked for productivity hence it was never found. That's an oversimplification obviously but he does have a point. Who doesn't remember the first versions of EJB? Java developers have a tendency to over-engineer applications, I remember 10 years ago I was doing a small Astrology site for someone using JBoss 2 and EJB. I had DTOs, I had remote calls, I had Sessions Beans for business logic, I had Entity Beans (CMP, BMP) for the data access layer, and of course interfaces for everything. What a waste! I am glad I learned my lesson.

This made me mad. Look: people blame EJB 1 for being a pile of dog turds. That's fine, but most people do so when they should have been looking in thr mirror.

Here's the thing:

EJB was meant for remote calls. Always. It included transactions. It was meant for CORBA.

People looked and said "wow, how neat, I can run stuff wherever" and applied it everywhere. That's because these people were not smart, and because the people who pushed EJB 1 never stoppped to say "by the way, only use this if you need its features, because it's going to crush your performance and be a pain to develop with otherwise."

Should they have said that? Yes, they should have. Along the way they could have dumped the ejb compiler thing from 1.0 (and they did.) But the biggest problem is that they never addressed the cultural impact, by saying "99% of you don't need this, so don't use it until you do."

Look at what happened: EJB 1 was a giant "screw you" to developers. They bought into this magical tool that wasn't meant for their use, and got slaughtered in production because they used it when they shouldn't have, on containers that sucked, and yes, WebLogic, now i'm looking at YOU.

So then what? People like Rod Johnson came along, writing books on using J2EE without EJB. It's a good book, and worth reading, but Rod leveraged it. His message was 'don't use EJB unless you really need it," which is what the EJB people should have been saying, except he didn't emphasize the "unless you really need it" part, and along the way, created the Spring Framework, which people saw (slightly unfairly) as a competitor to EJB.

Good for him, i guess, he profited from peoples' ignorance, but I really wish they'd have been more upfront about where Spring fit. I know, I'm being a little unfair here, because I don't think they ever really came out and said "no, you should never use EJB, buy our stuff instead," and God knows Spring's useful. I don't code without it any more.

But I've always thought about that cultural divide, the one the articles are referring to, and this guy pointed it out.