I just stumbled across Dan Weinreib's blog entry on "Complaints I am seeing about Java".
I am almost shocked to find someone actually agreeing with me on most of the points listed in his post. The guy sounds completely reasonable. Wow.
Most of the language-discussions I've seen are driven forth by what I refer to as "Language Hippies". A Language Hippie is someone who is very interested in programming languages and all of them have a secret dream of designing their own language. Or failing that, to inflict the features of one language (usually one that most people could care less about) onto a more mainstream language.
For some odd reason most Language Hippies seem to want features that just result in lower quality code. Yes, lambda functions are cool for some uses and yes, it would save you some typing if Java had them, but so what? How are you going to write unit tests for Lambda functions? By copying and pasting them into some mock of what you are passing it into? And yes, closures are useful when used in moderation, but it doesn't take a genius to figure out that excessive use (and people do tend to over-use features they love) just makes the code harder to read.
How come Language Hippies almost always are such horribly bad programmers? People who write unreadable code with lousy tests?
If they're really so enthusiastic about Lisp, Haskell, Ruby, ML, Smalltalk and whatnot, why aren't they using it?
Some things are fiddly to do in Java. Good. That'll keep people from doing them to excess.