Would you be willing to elaborate a little more on what you hate about Java? You mentioned "complexity and over engineering", which is what I hate about it these days too.

The thing is, I used to like Java. While I've been mainly interested in Ruby/Rails for personal projects, I've had to keep coding in Java for my work, and I've started to hate it too. But there are a lot of things I still like and miss about it, including moments when I think I'd actually still choose to use Java for a project.

Looking back, I think my enjoyment of Java ended around 2005, which was when Servlets and JSP were replaced with Struts, Spring, and Hibernate. I know a lot of people felt this was a huge improvement over the original EJB, but personally, I was astonished that people thought Spring, Struts, and Hibernate were "lightweight" (I never even bothered with EJB). While these frameworks have improved greatly and aren't nearly as hard to use as they were a while back, but I still don't like coding in them.

I think I miss the "recipe" approach prevalent prior to 2005, where you stuck closer to the "low level" servlet/jdbc approach, and you either brought in a new library for a specific task, or decided to write the code yourself. It was a bit laborious, but there wasn't much you couldn't do if you were willing to do a lot of typing. This approach seems to be an evolutionary dead end now - people generally start their projects in a framework (rails, django, spring), and stay within it for the remainder of the project. So there isn't really any point to a servlet "cookbook" anymore. It's either a Spring cookbook, or a Struts cookbook...

I think some new technologies have made Java more enjoyable - especially Maven, but I felt that Spring made Java far less enjoyable. It's a personal opinion, but to get a sense of it, I recommend you try working through the SpringMVC tutorial on the SpringSource site. Like I said, this is pretty much just a personal preference of mine - if, after doing the tutorial, this seems like a great way to write web apps, then by all means, go for it. But personally, I can't stand it.

I've been wondering if maybe there's a niche out there for people who like to use java at the low level. The funny thing is, I obviously do like frameworks, since I'm pretty enthusiastic about Rails. I think that it's just that if I'm going to use Java instead of Rails, then obviously there's a reason, and it's probably because my tasks are taking me outside the normal operations of a framework.

I think this comes down to wanting to be either at a very effective and efficient high level of abstraction, or wanting to get down into the grit of the problem and be able to do anything. While there was a time that it would have seemed funny to refer to anything Java related as "low level", pure servlets and jdbc seem to be taking that role in the middle tier (not just within SpringMVC or JPA/Hibernate, even non-java languages seem to be compiling to Java to run on the JVM).

Ok, this is a long rant, maybe it should have been a separate post completely. It just seems like we're in the same spot, and I want to ask you - do you think you might enjoy Java more if you dropped back from the enterprise-framework thing and started using it where (in my opinion) it still excels, the "low-ish" level of the middle tier? I wonder if other people are starting to feel the same way I do about this - that Java has its place, but when it does, your probably going to want to be going in as low level as you can with the language - otherwise, you'd be using something else.