Update 2011 - Reading this post bothers me, as I'm using Java a lot now and can't complain at all! I can say that I've worked on some pretty bad Java projects that may have given me a bad taste for the language. Java is an excellent language and I have only good things to say about it now (for the most part!).

Then

I started out programming in C, which taught me a lot about the fundamentals of computer science. I learned about types, memory management, functions, and logic. As I began to evaluate other programming languages to try out, I of course ended up trying Java. My first impression of it was how heavy it felt. Of course, this was when 4GB of memory wasn't standard in a desktop, and memory allocations and processing power -- were still relatively precious. I remember trying out Swing and that only made me more disgusted with Java, as a Swing application felt horribly slow. Java users don't have to worry about memory management (technically), as the garbage collection system takes care of it for the user. I think this was a huge benefit for novice developers, because dealing with memory management definitely isn't fun -- and usually presents issues if not done properly. The next thing I tried in Java was creating a web application. I bought a book on J2EE and as I began learning the ins and outs, I began to hate it with a passion. The amount of configuration and boiler plate code to get something simple up and running, was a huge turn off to me. I was disgusted with the concept of EJBs and all the various patterns in J2EE. After a short while, J2EE was gone with the wind for me. I moved on to scripting languages, such as the notoriously shitty PHP, which was still in my opinion, more practical than Java...but I wouldn't settle on a good web framework and language until Python and Ruby really caught my eye.

Now

Flash forward to today...and I'm still not liking Java.

It is still plagued with lots of configuration, descriptors, assembly, and boiler plate code. And now that memory is relatively cheap and available, Java still eats it like a fat boy eating at McDonalds. PermGen errors, anyone? The JVM has moved forward a lot in the past years, but its still a memory hog, and I feel like it abstracts so much low level coding that developers tend to not pay attention to the performance of a system -- just throw more hardware at the JVM.

My productivity in Java is much lower than most other languages -- even C. When building enterprise software in Java the complexity of getting it setup and going seems like too much at times.

DAO's, interfaces, implementations, proxies -- its just boring to me.

Ever used a BlackBerry? It feels slow to me...and I bet if it was coded in C it would be a lot snappier...same goes for Android. I'm currently using an iPhone now and it definitely feels the most repsonsive out of all 3.

What do you think about Java? Any recommendations on feeling more productive and not slowed down?