When types are checked.
WHAT STATIC TYPING MEANS
Types are known and checked before the program runs.
WHAT DYNAMIC TYPING MEANS
Types are associated with values at runtime, and checked as they are used.
WHAT STATIC TYPING PROVIDES
Errors caught before running Documentation of what functions expect
Better tooling: completion, navigation, safe renaming
Performance opportunities
WHAT IT COSTS
More to write Sometimes verbosity A compilation step
WHAT DYNAMIC TYPING PROVIDES
Faster writing Flexibility Less ceremony for small programs
WHAT IT COSTS
Errors found at runtime, possibly in production Less tooling assistance Harder refactoring in large codebases
WHAT TYPE INFERENCE DOES
Determines types automatically, giving static checking without annotating everything.
WHAT GRADUAL TYPING IS
Adding optional types to a dynamic language.
WHY IT EXISTS
It offers the benefits of checking without abandoning existing code.
WHAT TO RECOGNISE
Both approaches build substantial systems, and the argument is about trade-offs.