Effective Programs: 10 Years of Clojure
Rich comes down hard here on statically typed languages, but before the static typers get too offended, his main attack is on the overuse of ADTs/classes to build information processing systems (i.e., what a majority of us industry programmers are doing; he takes pains to define this arena...see the slides/discussion on what Rich calls "Situated Programs").So before the static vs dynamic typing debate gets too heated up here, I think we should focus on this point first[1].For those of you wary of his point here, I think it's worthwhile to go through an exercise, if you have the time to explore this. Write a simple information processing app using two different paradigms:   - Write it using a statically typed language and a relational database.
   - Then write the same app using some NoSQL store and avoid using ADTs (prefer using just maps of facts). Ideally do this in a dynamic language so the ergonomics are better for you.

And then ask yourself: Which one of these felt safer? More familiar? Which one of these offered more freedom, choice, and speed?1. I do think that once you come to terms with the problems of ADTs, you are on your way to not needing all the static type verification, but leave that to later.