Raganwald shared this great piece by Steve Jones, in which Steve basically takes the exact opposite position as I did in a previous post. Raganwald points out that it's not as clear cut as that: you have to consider the haskels and the MLs and the fact that limiting-the-ways-that-you-can-screw-up is not only a feature of statically typed languages but are present in some dynamic languages as well.
I would like to follow up Raganwald's point that the static vs dynamic debates are often misguided. I will use ruby as the example, because, let's be honest, ruby is what caused all these heated debates.
- Many people like ruby because of its expressiveness, which does not require it to be dynamic, it's been pointed out for example that haskell can be very expressive
- Many people like ruby because of its responsiveness(as seen in rails and the interactive shell), which may seem like it requires it to be dynamic, but is definitely not the case: if you use Eclipse for Java, for example, you know that you can modify code and run it very quickly with the touch of a button because Eclipse compiles code incrementally
- Many people dislike ruby because it's does not have statically type checking, which helps to catch their mistakes. I think that people who choose ruby do not necessarily dislike statically type checking, they merely see the gains of expressiveness and responsiveness etc. to outweight the lost in the warm and fuzziness of static type checking