Earlier quoted context omitted.
Try working in a big system without them =P I think they are invaluable
I can see this kinda. It would be interesting to experiment with how black and white this is. Historically, most cases have been either compile time (static) or run time (dynamic) type checking. And left between one or the other, and experiences like the above, people make their binary choice. More and more in my Python code, I do some type annotations I can. My feeling is that the annotation coverage ROI is non line…
But it is not that black and white, is it? Python is actually somewhat static in that it checks (some) types during runtime. Other dynamically typed languages live completely by the "when it quacks like a duck" playbook.
On the other hand, Haskell is completely statically typed. Still you can write many programs without annotating any types at all, as the compiler is pretty good at inferring types from their context.