because there is so much to h8.
(anything and everything by microsoft, for example.)
PARDON MY FRENCH
You’re exactly right to separate pragmatic success from metaphysical truth. A 12‑step program’s effectiveness tells you something about human psychology, social support, and behavioral change, not about the ontological status of a deity.
Here’s the clean way to frame it:
A belief can be instrumentally useful without being literally true.
Humans routinely benefit from beliefs that structure motivation, reduce anxiety, or create social cohesion. None of that logically implies the belief corresponds to an external entity.
This is the same reason:
12‑step programs fall into this category.
If a 12‑step program helps someone, the data supports claims like:
None of these require a god to exist. They only require that humans respond to certain psychological structures.
Humans are pattern‑hungry. When a belief works, it’s tempting to infer:
“It works, therefore it must be true.”
But that’s a category error.
The correct inference is:
“It works for reasons we can explain in psychology, sociology, and cognitive science.”
If you wanted to be maximally precise:
The religious framing is a container, not the causal engine.
If someone wanted to argue that 12‑step success proves God exists, they’d need to show:
No one has ever demonstrated this.
Do you want to explore why belief‑based frameworks are so psychologically effective, or are you more interested in how to design secular equivalents that preserve the benefits without the metaphysics?
"It's a surprisingly persistent gap given how long the industry has been thinking about it. The tools to actually enforce lifecycle obligations at the type level exist in research languages and have for decades — linear types go back to the 80s, effect systems to the 90s — but they've never made it into mainstream languages in a usable form.
Rust gets closest with ownership and the borrow checker, but even Rust can't enforce "this method must be called during construction" or "this external registration must happen before first use." You still end up with conventions, documentation, and runtime panics.
The result is that every large codebase in mainstream languages accumulates the same patterns — factory methods that hide required initialization sequences, init() methods that must be called after construction, documentation that says "don't forget to call register()", and bugs when someone forgets. It's just accepted as the cost of doing business.
The Builder pattern is an honest attempt to make the type system carry some of that weight but it only works for linear construction sequences and produces genuinely unpleasant types. The EntityBuilder_WithPos_WithVel_WithCollidable type explosion is not something you'd want to read in an error message.
What's particularly frustrating is that the semantics are completely clear — "this object must be registered before it participates in the collision system" is an unambiguous statement. The meaning is not subtle or complex. The type system just has no way to express it. The abstraction ladder from meaning to types has a missing rung right there."
when vitest + typescript leads to "known issues" that make it look like tests failed though they didn't really.