Static type systems are tremendously useful for preventing a common class of programming errors, not to mention they enable reliable refactoring of complex codebases.
> Yes, you’ve repeated the same tired and unconvincing argument you read in your textbook.
That is quite presumptuous. I spoke from personal experience (15 years in a dynamic language, 5 years in a statically typed language).
> Meanwhile in the real world it’s demonstrate every day by users of dynamic type system that this is not true or required.
Static type systems are not required (though you do incur a cost in writing a lot more tests in dynamic languages), but it is not true that they are overrated.
It does sound like you inhabit domains that are well-suited to dynamic languages, hence you've arrived at an opinion that is a local optimum for your limited experiences. If you've ever worked with complex, multiparty, multidependency projects, you would not express such disdain for static type systems. The mypy project in Python recognizes that there is a place for static typing.
It's a hardware overhead that harms automatic testing, dude.
Dynamic type systems are an abstraction used to make programming faster and that's pretty much it. Also they only show up in interpreted languages so that tells a lot about focus on performance. I personally think it's overwhelmingly more interesting to drop this abstraction in favor of stability.
Type inference is useful but there’s tooling to add that.