Tony Morris claims that Java and Ruby don't generalize to static and dynamic typing systems. He's right, but it doesn't really matter. What matters is that in the context of the discussion, we're differentating between traditional system development languages (C++, Java and C#) and newer system development languages (Python, Ruby). There are other key differences between these languages, but the easiest to identify is that the former are type-checked at parse time and the latter aren't.

For some reason, when I start talking about Python or Ruby to people who have written a lot of the traditional system development languanges, it's the typing that trips them up. They ask how to these languages deal with things like maintainability or IDE support (for refactoring). So people who speak warmly of Python and Ruby didn't choose to make this about static or dynamic type systems, but that's the position we find ourselves defending.

Talking about OCaml, ML, Haskell or Scala doesn't change the fact that we're presenting alternatives to Java and C#. Yes, it's possible to have terse parse time type-checking. That's great! If only Java and C# people who get hung up on type checking knew about these languages, right?

Incidentally, Tony Morris linked to Chris Smith's excellent article on typing. I've pretty much violated all the principles Smith presents, but as long as you substitute 'static typing' with 'whatever Java does' and 'dynamic typing' with 'whatever Python or Ruby' does in my writing, it should be pretty clear. Sure, there are alternatives, but they're not present in the context of this discussion. When they are, I'll have to revise what I say. Until then, I'll keep using Java and 'statically typed language' interchangably.