An important point of using dynamic types is not mentioned:
The actual workflow of coders: Compile, run, fail, repeat vs. eval, fail, repeat.
After over 35 years of coding - mostly with statically compiled languages -doing it REPL-style makes such an enormous difference in my enjoyment of the profession.
I'm not sure I can go back to a compiler.
Interesting: I was first exposed to incremental development (in LOGO, Lisp and Smalltalk) in the 70s and found static languages painful and alien into the 90s, but have mostly flipped my preference.
I had a friend who described incremental programing as "programming by successive approximation". He wasn't praising it.
I might be misunderstanding, but it’s definitely possible to emulate this feedback loop with statically typed languages.
For example, Haskell has the `-fdefer-type-errors` flag that will turn type errors into warnings at compile time and runtime failures if the expression that fails to type-check is evaluated.
After over 35 years of coding - mostly with statically compiled languages -doing it REPL-style makes such an enormous difference in my enjoyment of the profession. I'm not sure I can go back to a compiler.