TL;DR
During the Testival 2019 Zabok, I drove Gaspar and Titus from conference venue to place where they staid. During the short drive, we had insightful car conversations. One Gaspar statement confirmed my static vs. dynamic significant difference that I realized years before. I will share that with you here in this post.
The main noticeable difference between static and dynamic programming languages is that static language, such as elixir, must be compiled before running. The compilation process reports some errors, such as type misusage. In dynamic languages, such as Ruby, this is not the case. You can run the program as soon is syntactically correct. If you miss in that run code with a bug (e.g., type misusage), your application would successfully finish its execution. That means that it is possible to deploy a program with a bug related to type errors. Another example is your browser javascript console full of exceptions.
Authors of dynamic languages did this on purpose. They wanted to force you to write automated checks of your code in TDD manner.
Doing that, you will cover type errors, but also you will get insight into other errors, for example, logical flows of your program.
Google testing blog nicely summarizes this in its old logo above.