| > I struggle to understand the mind set of people who do not want to use them. I've posted a few reasons before. I think I've refined the list slightly since last time: * People's first exposure to programming often came from using C++ or Java. An old version with really crappy type errors. Schools are often conservative about updating their tech stacks. * Types are most useful when reading or changing code. New learners are mostly writing new code. * Writing `Person person = new Person()` seems highly redundant. In the kinds of small programs you are writing as a newbie, you are likely to write a lot of this. The reasons so far make types seem like overhead: you are having to do more work and getting little in return for doing so. The next two get a bit deeper. * In the small codebases you'll have as a newbie[0] at disproportionate amount of the codebase is interacting with the outside world. The outside world is untyped. In both typed or dynamic languages, you have to shuttle this untyped data into your language's type system. But when there is a type error in this process, I find it is generally easier to debug in a dynamic language. That makes sense to me: they need to have good workflows for dealing with runtime type errors. * Classes tend not to teach technique[1]. Students are expected to invent it on their own as they learn programming. As professionals, we often don't teach technique to each other either. If you invent techniques that leverage the strengths of types, then the appeal of types will seem pretty obvious. If you don't you may go years without before you are exposed to these techniques. If you invent techniques where static types get in the way, then you may find static types to be a severe hindrance to getting things done. [0] I think this also applies a lot of the time when starting a new project. [1] By technique I mean the steps you do to produce working code. This doesn't just include generating new code, but understanding existing code and debugging code. |