I think it's a matter of taste and need. Many people who want static typing will cry foul if I suggest they use either a language that has sufficiently powerful static types (such as Coq) to allow proper theorem proving with automated theorem provers, or that they annotate their code with an appropriate specification language (Frama-C for C, JML for Java, SPARK for Ada, HasCASL for Haskell) that will allow automated theorem provers to (at the very least) catch whole classes of errors that are impossible to find with static types alone (even with, say, Haskell's type system) or (at best) formally prove correctness up the specification. They feel those would be too much work for too little gain. And the reality is that, for the sort of code they write and the sort of problems they tackle, they may well be right. And, of course, for the sort of problems fans of dynamic typing tackle and the sort of code they write, static typing is similarly too much overhead for too little gain. It really depends on how badly you need to be absolutely correct, and how mcuh work you're willing to put in to get there -- and there's a very big slope of different options.