Seems that Bruce Eckel is unhappy over all the attention that Ruby (specifically, Ruby on Rails) is getting - so he wrote up a counter to Bruce Tate's "Beyond Java". I don't think he's unfair to Tate's book, although I must admit that I have more sympathy for Tate's argument. In any case, Eckel recycles the "Humane Interface" discussion from awhile back, and - like most of the Java enthusiasts - misses the point:
Martin's argument is that Java's List interface requires you to say aList.get(aList.size -1) to get the last element, and this seemed silly to him. Which it is, if you have unified all sequence containers (that is, list containers) into a single type, as Ruby and Python do. Java, however, follows the C++ STL approach of providing different types based on the efficiency of various operations. The Java libraries do not unify to a single list type because of efficiency issues, so you have to decide if you are going to be fetching the last element from a list a lot, and if you are you use a LinkedList, which does have a getLast() method -- a fact which was completely left out of Martin's original discussion, and the ensuing firefight (other than some ignored comments).
What he misses is the pragmatic approach that Ruby and Smalltalk take. Convenience protocol is no bad thing, and - given decent tools (like Smalltalk has), lots of methods in a class aren't a problem. At least in Smalltalk, most of the convenience protocol landed in the Collection classes based on many, many years of usage - and Ruby was, to a large extent, modeled on Smalltalk. The big problem in a language like Java is that you can't just add a new method to an existing class - instead, you get an explosion of "helper" classes wrapping them. I suppose that's a pragmatic approach given Java's design, but I wouldn't call it an instance of good design.
Eckel approaches all that with the thought that developers should know up front that they'll need a given method, and then pick the right class. Umm, yeah - I always have full information when I get started. I guess in his world, he never runs into that "oh, crap" moment when you realize that some object is missing protocol that would make life simpler. Elliotte Harold, who weighed in on this extensively, never really got that point either.
Anyway, David Heinemeier Hansson (the Rails guy) had some thoughts on Eckel's response to Tate:
I'm losing track of the ill-conceived comparisons, but I do know what's astoundingly clear: Bruce Eckel doesn't like Ruby, he doesn't like the attention its getting, and he doesn't like people such as Bruce Tate fueling that attention. No beef, that's cool. But why not just say it like that?
You could even have presented yourself as the polar opposite to the so-called hyper-enthusiasts: A hyper-detractor! The label comes complete with a cape, an evil smirk, and long tirades about how the other side is no match for your master plan.
David does get a bit too snarky over Eckel's changed opinion on Python - it is possible to change your mind over time. Writing extensively on the web simply makes it possible for people to find your old opinions more easily and imply it's some kind of hypocrisy.
Hat Tip to Tim Bray.