Type Systems Vocabulary
- title
- Type Systems Vocabulary
- type
- summary
- summary
- Lewis Campbell's pet-peeve note on the orthogonal axes of type systems and why "strict typing" is an amateur term
- sources
- type-systems-vocabulary
- parent
- type-system-axes
- tags
- programming-languages, type-systems
- created
- 2026-04-25
- updated
- 2026-04-25
A short post by lewis-campbell arguing that online programming discussion often misuses type-system terminology โ making the discussion either hard to follow or actively misleading. The fix is to keep the two axes straight: static/dynamic and strong/weak.
The two axes
Static vs dynamic is about when types are checked. Static type systems read source code as a static asset and reject programs that fail the check before they run. Dynamic type systems attach a type to each value and check on demand at run time.
Strong vs weak is about how much implicit coercion the language performs. C is weak โ pointer arithmetic happily reinterprets bytes. Python is strong โ calling a method that expects one type with another type raises an error rather than silently converting.
The two axes are orthogonal. Campbell deliberately picks C and Python as examples to make this concrete: C is statically + weakly typed, Python is dynamically + strongly typed. Neither pair travels together as a package deal. See type-system-axes for the four-quadrant matrix.
Things people get wrong
Dynamic โ untyped. Dynamically typed languages have types; the name says so. Untyped means no checking happens at all, statically or dynamically. The two are different categories.
Strong โ static, weak โ dynamic. This is the point of the C/Python example. Conflating the axes produces sentences that sound meaningful but resolve to nothing specific.
"Strict typing" and "loose typing" are amateur terms. They appear to be invented by people who haven't internalized the two-axis model. A reader can't tell whether "strict" means static, strong, or both โ so the term obscures rather than communicates.
Why this matters
The post is short, but the underlying point generalizes. When a vocabulary collapses two independent dimensions into one slider, the resulting conversations cannot reach agreement: the speakers are arguing about different things while sharing a word. Keeping the axes separate is what makes the conversation possible at all.