One of my favorite talks at last month’s Strange Loop conference was Martin Odersky‘s keynote entitled “The Trouble With Types.” There were many interesting points made in his talk, some that I agree with and some not. However, I’d like to focus in on a very small, seemingly throwaway statement made by Dr. Odersky that bothers me. That is, the statement is one that I see gaining popularity amongst many advocates of static typing that takes the form:
I’m not a great programmer, so static typing helps me to be a better programmer.1
My position is that this statement is incredibly weak, ringing hollow at best and disingenuous at worst. I don’t know exactly why this phrase is gaining mind-share, but I suspect it’s an attempt to counter the idea that strong static type systems like Scala’s are complicated. One reason that it rings hollow is that anyone can explore the code written by those who say this phrase and more often than not their skill is easily apparent.2
It’s my opinion that this watered-down phrase needs to die, and quick. I personally would be more impressed if advocates instead took a more positive position and stated some to the effect of:
I am a great programmer and I choose static type systems because I demand sharp tools.
Of course by taking this position you run the risk of pushing a fallacious, authority-based angle. However, in the weak or strong case you’re already pushing anecdotes around, so you may at least choose the one that is open for objective measurement. I’d much rather learn from and participate in a debate centered around whether Scala is a sharp tool 3 than if Scala makes weak programmers stronger.
Odersky at about 9.5 minutes into his talk mentions his experience in using types to constrain the possibilities of his programs to such an extent that when and if they compile then they tend to be correct. I’ve experienced this also during my ~3 years with Scala circa 2008 and 2011 and it is incredibly empowering. However, this power did not come magically, but was instead the result of careful thought and type design — something that I’ve not seen typically bad programmers do. ↩
Additionally, that weak phrase immediately provokes the question: if you’re a not a good programmer then why should I use your language? ↩