Static typing defends against much more than simple errors that are easy to fix.<p>When you want to refactor your codebase and have thousands of calls to a method when you rename it and don't have static typing you have no idea where things broke with out having a unit test for each invocation.<p>My personal preference is for inferred typing where you get the benefits of static typing with out the line noise of static typing. (eg. F#) C# is taking another interesting middle ground with dynamic invocation. I think the real answer lies in inferred typing by default and static / dynamic typing (invocation) where and when you need it. There is no one universal answer but I think providing both options to the programmer is best so they can decide what is best for their particular situation.