Several people have responded to my post on static typing and readability, and mostly they have missed what I actually said. I'll try again:
Thanks to the success of Rails, Seaside, Grails, and others, many developers are considering dynamic languages for the first time, or in a new light. These developers are often concerned that without static typing, their code will be unreadable. There are good reasons for static typing, but this is not one of them. Languages do not write readable code, programmers do. Good programmers can write readable code with static or dynamic typing, with "good" or "bad" frameworks.
In order to make this clear, I demonstrated some common decisions that make statically typed code less readable, despite the presence of type information. I also demonstrated some readable code without type information.
To the commenter feedback: Kabir refers me to Haskell and OCaml. Good languages, but not the point. I am not trying to prove that all static languages are bureaucratic. My issue is the assumption that dynamic language code is unreadable with type information.
Robert points out that I am comparing programming idioms, not languages. True. Robert, I completely agree with everything you have to say.
ocean thinks that my example is outdated and the argument therefore should not be taken seriously. I am glad you find the code outdated--I do too, and I said so in the original post. When we wrote R4JD, we wanted to pick examples that every Java developer would recognize. I have traveled the country asking Java developers what frameworks they use, and even today my anecdotal best guess is that over 60% are on Struts 1.x.
Norman, Slava, and Hani think I am comparing Java and Ruby, and announcing Ruby the winner. I certainly didn't say anything like that here. I have compared Ruby and Java web development before, and you can read the reviews to see if readers found the comparison fair and helpful.
Bob Lee: thanks for the on-topic comment. Bob's concerns about dynamic typing and maintainability need to be addressed more fully than I have time for here. But let me start by saying that not all code is a reusable API. And wouldn't Groovy give you what you want?