In English class, not not is a mistake. Two negatives, we're told, cancel. In code, they commit. !!user. Two bangs, stacked. The machine reads that as a declaration: yes, this exists. No hedging.
It collapses whatever's on its right into one of two things. True or false. No "kind of," no "maybe." If something's there at all, !! confirms it. If nothing's there, it reports that too.
It's a small operator. Two characters. But it does something most of us struggle to do in our actual lives.
It commits.
English is the outlier
English punishes double negatives. I don't know nothing gets you corrected. The logic we're taught is mathematical: a minus times a minus makes a plus, so two negatives should cancel. Polite society treats the double negative as a grammatical sin, the mark of someone who hasn't been properly educated.
But English is the outlier. In Yorùbá, mi ò mọ̀ nǹkan kan - literally "I don't know any thing" - stacks negatives without contradiction. Fluent speakers don't hear cancellation; they hear emphasis. Spanish does the same thing (no sé nada). So does French (ne...pas). So do most of the world's languages.
The idea that "not not" cancels itself is a peculiar English rule we've mistaken for a law of logic. In many languages - and in almost every programming language - double negatives don't cancel.
They commit.
The operator of conviction
Most programming languages don't have clean true-or-false values. They have truthy and falsy - values that behave like true or false without officially being either. An empty string is falsy. Zero is falsy. Null is falsy. A filled string is truthy. Any number other than zero is truthy. An object, even an empty one, is truthy.
!! forces a reckoning. It asks the question the language was too polite to ask: stripped of everything ambiguous, is this thing real or not?
!!user // does a user actually exist?
!!password // is there a value here at all?
!!config.key // is this set, or did I just think it was?
That's the question the aunties ask when they pull you aside at the wedding reception. Do you want this person, or do you not? Say it plain.
Engineers write it with two characters. Aunties take a little longer.
The prayer I caught myself saying
A few years ago I stopped praying on purpose, to see what the silence sounded like. Not a crisis, not a deconstruction - just an experiment. I wanted to know whether the belief underneath was real, or whether the faith was mostly inherited.
What I caught myself doing was praying anyway. Over turbulence on a flight. In the quiet before a hard meeting. The morning of a hard decision. Small prayers, unplanned, almost reflexive - slipping out before I'd decided whether to say them.
The habit outlasted my decision to drop it. That was the moment I understood what I'd been doing. I wasn't choosing. I was trying to say no to something I couldn't, in the end, refuse.
Two negatives. One yes I hadn't picked. I'd only stopped being able to walk away from it.
What engineers know that the mystics already knew
There's a name for this, older than programming. Via negativa. The mystical tradition of defining the sacred by what it is not. You can't say what God is; you can only say what He isn't, and what's left when you've said all the no's is the truth. The Stoics had their own version - premeditatio malorum, imagining the loss to feel the having. You know what you value by what you refuse to let go.
Engineers do this every day, and most of us never notice.
NOT NULL - a constraint you put on a database column. Not "this column should have a value." This column cannot be empty. The commitment is expressed as a refusal. It's the difference between "I'd like to stay in touch with my mother" and "I will not let a week pass without calling her."
Assertions - we don't verify the happy path; we refuse the wrong one. assert x != 0. Not "x is good" but "x must not be zero." Conviction as prohibition.
Tests - a good test suite isn't a list of what the code does. It's a fence around what it must never do. The boundary isn't drawn by the yes. It's drawn by the long list of no's stacked behind it.
Engineers build conviction by closing doors, not opening them. We say what we stand for by cataloguing what we refuse.
How to use the double negative in real life
If you don't write code, you can still steal the operator. Here's how.
Find your !!. What are you incapable of walking away from? Not "what would you like to do more of" - that's a soft boolean. What have you tried to stop and couldn't? That's the thing. That's your conviction, pre-verified by your own failed refusal.
Write your NOT NULL list. The handful of things that cannot be absent from your life for it to still be yours. Not a goals list. A subtraction list. What would have to disappear for you to stop recognising the life you're living?
Test by negation. When a decision feels fuzzy, stop asking "do I want this?" and ask "can I live with not having it?" The yes you were going to say anyway becomes obvious. The yes you were faking falls apart.
Commit by refusing. Every strong yes is built from the no's stacked behind it. You don't pick a life by listing every quality you want - you pick it by closing off every other door and finding you haven't regretted a single one. That's not settling. That's !!.
The paradox
Two negatives don't cancel. They clarify.
The strongest yeses in a life - the calling you can't quit, the person you can't leave, the faith you can't shake - almost never arrive as free choices. They arrive as failed refusals. You tried to say no. You couldn't. What was left was a yes you hadn't picked. You'd only stopped being able to walk away from it.
English grammar calls this wrong. Yorùbá calls it emphasis. Code calls it !!. The mystics called it via negativa. The Stoics called it premeditatio. The aunties at the reception just ask the question straight.
Most of us are walking around with soft booleans where our yeses should be. Maybe. Probably. Kind of. When it's convenient. We never commit, because committing feels like closing doors, and the culture has trained us to keep every door open forever.
The operator says: pick. Collapse the ambiguity. Is this real, or is it not? Strip the maybe. Two bangs. One answer.
Coda
!! isn't a typo. It's a declaration.
The aunties aren't being rude. They're being precise.
The prayer I kept catching myself saying wasn't something I'd argued my way back to. It was a refusal I failed - and the yes that was left was louder than any yes I'd ever chosen.
In English class, double negatives are wrong. In Yorùbá, they land harder. In code, they tell the truth.