17 Aug 2025
Type systems have terms with well defined meanings.
Unfortunately many of the people who discuss them online are ignorant of these terms, making what they say hard to understand, or in some cases, obscuring their point entirely.
Static vs Dynamic
Static typing means types are checked statically. Static type systems use the programs source code as a static asset to perform type checking, without executing said code. Typically - but not always - the environment will prevent code that fails these static checks from running.
Dynamic typing means types are checked on demand, at execution or run time. Each value in the language has a type value associated with it that exists at runtime.
Note that dynamically typed is wholly distinct from un-typed, which is a term used to describe the complete absence of type checking, either statically or dynamically.
Strong vs Weak typing
This has to do with type coercion - to what extent the language will convert a value to another type representation implicitly.
C with its pointer arithmetic, is weakly & statically typed. Python which requires you to explicitly convert between different object types to call the appropriate method, is dynamically and strongly typed.
Common mistakes
Dynamically typed languages are not languages which "don't have types". They absolutely have types. It's in the name.
Strong Typing is not the same thing as Static Typing. Weak Typing is not the same thing as Dynamic Typing. I chose the examples of C and Python deliberately.
Using ambiguous terms like "Strict Typing" and "Loose Typing" seem to be made up by amateurs. It's not clear if "strict" mean static, strong, or both, something intangible.
Think I can help your company? Get in touch or visit my consulting site!