Type checking is a symptom, not a solution
Overall reaction
- Most commenters strongly reject the article’s thesis that type checking is a “symptom,” calling the argument confused, naive, or even ragebait/AI slop.
- A minority find the perspective interesting, reading it as a critique of function-centric architectures and a call for higher-level, time-aware, message-passing abstractions rather than an attack on types per se.
What types actually provide
- Repeated claim: types are explicit interfaces and contracts, not incidental bureaucracy. They define the “shape” of inputs/outputs and enable black-box composition.
- Types are described as specifications, theorems, or invariants; programs are proofs that satisfy them. Even untyped or assembly code implicitly has types, just unchecked.
- Strong static typing is framed as an automated, always-on subset of testing that catches classes of bugs early and localizes their source.
Scale, correctness, and tooling
- Many dispute the article’s “standard answer is scale” framing: types are about correctness at any size, though their value grows with codebase/developer count.
- Examples: TypeScript and Python typing catching bugs in tiny scripts; IDE autocomplete and refactoring depending heavily on static types.
- Others note types can enable over-engineering or more complex designs, but still see them as net-positive.
Hardware and electronics comparisons
- Multiple commenters with hardware experience say the article misrepresents electronics: HDLs have types; EDA tools perform extensive automated verification, rule-checking, and simulation.
- Some argue physics acts as a brutal “runtime type checker” (wrong voltage = burnt board), hence the need for even more checking up front.
- Several emphasize that software’s state space and dynamism (recursion, concurrency, unbounded data) make it inherently more complex than static circuits.
Unix pipelines and black-box composition
- The portrayal of UNIX pipelines as a superior, typeless composition model is widely criticized.
- Pipelines are said to be brittle, “stringly typed,” and reliant on undocumented assumptions about formats, delimiters, and ordering; small output changes often break chains.
- Some point to shells that pass structured data or JSON-oriented tools as implicit acknowledgments that richer “types” are needed even there.
Complexity, architecture, and higher abstractions
- Many agree that better architecture, simpler interfaces, and isolation are crucial—but note these are largely expressed through types and module boundaries.
- Skepticism is high that one can eliminate “unnecessary complexity” to the point that automated checks are largely irrelevant, especially in large, evolving systems.
- A few connect the article to older ideas like correctness-by-construction and dataflow/statechart-based systems, but say such approaches haven’t displaced typed languages in practice.
Dynamic languages and real-world anecdotes
- Commenters share pain stories from untyped or loosely typed ecosystems (old TensorFlow/Python, large pre-TypeScript JS codebases, shell scripts) where missing type info made APIs hard to use and evolution error-prone.
- Static typing in libraries is highlighted as crucial for avoiding accidental breaking changes and for making contracts clear to downstream users.