Pat Maddox wrote a post called "Java People Must Be Stupid," and unfortunately, his irony blew up in his face. The point of his post isn't really that Java people are stupid -- it's that Java people coming to Ruby often seem to arrive with the crippling assumption that their fellow programmers are stupid.
What worries Java immigrants to Ruby is that Ruby doesn't have any of the protection mechanisms Java has, and the protection mechanisms it does have are easily circumvented. Pat's point is basically, "let it go, don't be afraid," but his phrasing put him right in the middle of a language war.
Anyway, I posted a comment there, and Reg Braithwaite asked me to post it on my own blog, so he could link to it without including all the shrapnel and debris from the language war, so here we go:
It’s not really stupid people, it’s people who’ve accepted a stupid idea. Java’s design is based on the idea that a language can prevent misuse by making bad things hard to do. It’s defensive thinking. Java people are caught up in this paradigm; that’s where these questions come from.
It might be more accurate to say that Java people are smarter than they give themselves credit for.
The thing is, telling people they’re stupid, when their problem is an equal mix of bad ideas and defensive thinking, that’s not the most persuasive argument available.
I think the only compelling argument, from a Java perspective, at least, in terms of Java people I’ve talked to, is that nobody ever actually accesses the stuff inside Rails which, if it were inside Java, would be hidden. The door isn’t locked, but still nobody goes in.
In any OOP language you do want to keep client programmers only using the API, not the internals of the objects the API is made of. That’s a good design principle. Java makes it happen by building a fort, locking everything down, the theory being they can’t steal it if it’s nailed to the floor. Their goal is legitimate, but their way of achieving it is kind of paranoid. Ruby’s got the same goal, but a radically different approach to achieving it. It doesn’t enforce any kind of security, but makes it easy to build such elegant APIs that entering the “forbidden zone” never even occurs to people, because it just isn’t necessary.
It’s like the opposite of thinking defensively isn’t thinking offensively; the opposite of thinking defensively is thinking creatively.