Is Java the SUV of Programming Languages?
Philip Greenspun has recently accused Java of being the SUV of programming languages. It is an interesting read, mainly in that it reverberates with how I feel about Java. I don't feel the same way, but there is an echo.
I love working in Ruby, and don't mind working in Python or Perl. All three of these languages offer substantially more power than Java. They all have decent library support (CPAN in particular is amazing)
I find myself coming back to Java for any moderately sized project, however. It isn't the language, standard libraries, or J2EE that brings me back. It is the open source libraries, the IDE's, and the cloud of tools around it. It is like Smalltalk for the diehard Smalltalkers. The tools that are just now getting into Java IDE's existed in Smalltalk a decade ago. Once you get used to working with them it is genuinely painful to step backwards to less functionality in the development enviroment.
The strength of Java lies in the tools that exist for it. I can be much more productive for moderately sized, web based applications in Java than I can be in any other language I use. To clarify "moderately sized," I mean anything where I want to seperate out the application logic from the user interface, and I want to use a database. In theory I could do it all in Ruby, and tools exist (ERb, WEBrick, etc) but I find it easier in Java. Change that, I find it easier in IDEA and OJB and Velocity, which happen to use Java.
.NET is an interesting point of comparison. Philip argues that the .NET web platform is more productive for his students compared to jsp, servlets, and JDBC. I think he is probably right. ASP.NET is a decently integrated tool. It compares more to Struts or WebWork than jsp + servlets. For newcomers, I bet it is easier to use than Struts or WebWork as well, as both of those tools suffer from chronic configurationitus. They are like BIND, you never start from scratch, but from a known-good base project (struts-blank for beginners, your last project for people with a last project).