1. The Tattoo Test – A Reflection on What We’re Really Saying When We Say “Coding Is Dead”
“Learning to code is now worse career advice than getting a face tattoo.”
That sentence doesn’t need context. It was delivered on HBO by Ian Bremmer, in front of millions. And no, it wasn’t satire.
It spread quickly. As such things do. Some laughed. Some panicked. Others nodded, already weary of the tech world and its shifting tides.
The signal was simple: Coding, once a golden path, is now a cultural relic. Outdated. Disposable.
But the message behind that signal deserves a closer look.
Not to defend coding, it doesn’t need our defense, but to ask:
What exactly are we burying when we declare it obsolete?
Because when someone says “coding is dead,” they’re not describing a skillset.
They’re authoring a narrative.
And like most viral narratives, it thrives by ignoring detail.
Let’s start with the obvious:
“Learn to code” was always a strange slogan.
It collapses craft into command.
As if learning a language made you a poet.
As if syntax alone gave you access to systems.
Some people automate routine tasks.
Others design systems of systems.
Some debug ancient COBOL mainframes.
Others sketch the architecture of distributed knowledge engines.
They all “code.” But their work could not be more different.
So which of these do we mean when we say: “That era is over”?
The truth? It’s the surface layer that’s disappearing.
The glue code. The boilerplate. The “how do I automate this spreadsheet” sort of programming.
That’s the layer AI is eating and it should.
Not because it wasn’t valuable. But because it was never the foundation.
The deeper layers are different.
They’re where systems are shaped, not just scripted.
Where decisions are embedded in architecture.
Where complexity is not avoided, but stewarded.
That work isn’t going away.
It can’t go away.
Because the systems we rely on still break. Still drift. Still demand interpretation, not just execution.
So here’s the uncomfortable question I think we should be asking:
What happens if nobody learns to code anymore?
Not because they should, but because the thinking behind it fades too.
What happens when fewer people learn to shape systems?
To build representations of meaning, not just pipelines of function?
To understand abstraction, recursion, boundary?
What happens if our tools evolve, but our sense of structure dissolves?
I don’t have an answer (yet).
But I think the question is worth holding.
Because maybe the future isn’t code-less.
Maybe it’s just meaning-less, unless we stay curious about what lies beneath the interface.
2. The Coder Spectrum: Not One, But Many
Let’s start by clearing up a basic confusion.
“Coder” is not a job title. It’s barely even a category.
It’s more like a shorthand that is used by people who don’t code to describe anyone who does.
But inside the world of software, the word breaks apart. It doesn’t describe one role. It describes a spectrum. From the repetitive to the inventive, from the task-bound to the architectural.
You might be thinking: isn’t that just seniority?
It’s not.
Some people stay near the shallow end for decades. Others enter near the deep end because they bring something else with them: systems thinking, design intuition, stubborn curiosity.
So no, it’s not just a ladder. It’s a shape. And it matters which part of that shape gets eaten by automation.
Let’s walk through it.
Type 1: The Task Coder
“Tell me what to build, and I’ll build it.”
This is the kind of work AI is already chipping away at.
Small changes to large systems. Ticket-based work. CRUD apps. Fixing the CSS. Adding a field to the database.
It’s honest work. But it’s also the most fragile.
Because this layer depends on translation, not interpretation. You take a requirement and express it in code. That’s exactly what language models are getting good at.
If your daily work fits this mold, you’re not competing with other devs anymore. You’re competing with autocomplete.
And that’s not a fair fight.
Type 2: The Project Coder
“I can build something from scratch as long as the idea’s already formed.”
Here we find the solo builders, freelancers, generalists.
They’ve done enough to start clean, pick tools, ship something that runs.
They know what a system looks like. But they don’t necessarily know how it behaves at scale, or how it breaks when people misuse it.
They’re valuable but increasingly replaceable by low-code stacks, auto-generated scaffolds, and AI copilots that can spin up CRUD backends in seconds.
If Task Coders are the first domino, Project Coders are the second.
Type 3: The Systemic Developer
“I don’t just write code. I design how code fits into a system.”
This is where things get interesting.
Systemic developers don’t wait for instructions. They shape them. They think in flows, boundaries, failure modes. They don’t just build features: they build structures.
You might say: isn’t that just a software architect?
Perhaps sometimes. But often it’s someone mid-senior who’s learned to zoom out. Someone who notices the pattern behind the ticket. Someone who asks why, before asking how.
AI can support this kind of work. It can’t replace it.
Because this kind of thinking isn’t in the code. It’s around the code.
It’s context-aware, recursive, messy and therefore very human.
Type 4: The Exploratory Coder
“I build things that don’t exist yet.”
Here we leave the realm of feature delivery.
Exploratory coders work at the frontier.
They build prototypes, test new interaction models, combine systems in weird ways just to see what breaks. They don’t just follow best practices. Sometimes they have to invent them.
This kind of work doesn’t scale well. It resists standardization. It’s hard to measure, hard to manage, and nearly impossible to automate.
Which is why it survives.
Even in a world of perfect AI tooling, someone still needs to ask:
What should we build next and what’s even possible?
Type 5: The Meta-Developer
“I build the tools that help everyone else build.”
These are the framework authors, compiler designers, plugin creators, and infrastructure engineers.
They don’t write apps. They write the things apps are built with.
If AI is going to write more code, it needs better environments, better abstractions, better APIs. All of which need to be designed, tested, secured, and versioned by humans.
This tier is the smallest in number, but the most foundational.
It defines the affordances of everyone below it.
So yes, you can generate a React app.
But React didn’t generate itself.
Zoom Out: The Pyramid
You’ve probably noticed the shape. More people at the bottom. Fewer at the top.
Which is exactly why Bremmer’s claim lands.
If you’re staring at the base of the pyramid, it really does look like coding is dying.
But that’s a trick of perspective.
Because the further up you go, the harder it is to automate and the more essential the work becomes.
Let’s keep going.
What happens if nobody steps into that pyramid anymore?
What happens when the old ones retire and no one picks up the pattern?
“When Bremmer says a face tattoo is a better bet, he’s probably talking about Type 1. The rest? They’re building the future he thinks is over.”)
The Thought Experiment: What If Nobody Learned to Code Again?
Progress rarely ends with a bang. More often, it fades quietly and invisibly like a broken deployment no one knows how to fix.
So let’s imagine a shift.
No dramatic collapse. No headline crisis. Just a generational drift, almost imperceptible at first.
People stop learning to code.
Not because it’s forbidden, but because it no longer seems worth it.
The tutorials feel outdated. The tools do more of the thinking. The market seems full.
And besides that: why wrestle with syntax when you can prompt your way to a working prototype?
So the next generation moves on.
They still shape ideas, still build. But they no longer touch the underlying systems.
They no longer learn to speak machine.
What follows?
Aging systems, aging minds
The existing generation of developers grows older. Some leave. Some burn out. Some drift into roles where they no longer build, only manage.
Their knowledge fades: not just the technical kind, but the kind that lives between the lines.
Mental models. Edge cases. Tacit decisions embedded in architecture, invisible in documentation.
You can write specs. You can comment your code. But you cannot transfer the lived intuition of someone who has shaped a system from within.
And so, the average age of true understanding rises. Eventually, it crosses a threshold. Knowledge doesn’t transfer. It evaporates.
Legacy becomes untouchable
Code doesn’t rot. But the world around it does. APIs change. Dependencies die. Hardware evolves. What was once modern becomes brittle.
And brittle systems are dangerous to touch, so we stop touching them.
We freeze them. Until they become infrastructure nobody dares to change, but everybody depends on. Hospitals. Airports. Banks. Systems too critical to fail, too fragile to maintain.
We’ve seen this already.
But only in corners.
Now imagine it everywhere.
AI stalls in its own shadow
Ironically, the “don’t learn to code” mantra often leans on the rise of AI.
But AI doesn’t build itself.
Models, pipelines, evaluation logic, monitoring frameworks: these are still hand-crafted. Not in the sense of poetry, but in the sense of systems thinking.
Fragile systems. Recursive ones. Full of failure modes that only experience can foresee.
If no one learns to maintain them, the stack stalls.
The interface remains fluent, but the substrate stops moving.
We keep asking questions. The answers just stop improving.
Technology becomes weather
And over time, technology shifts from something we shape
to something we simply endure.
Why did this break? Why does this feature behave differently in production?
Why did the system crash at 2:07 AM?
These were once technical questions. Now they become mysteries.
We guess. We shrug. We write a ticket.
The system becomes a force of nature: predictable, until it isn’t.
Can anything replace code?
Natural language? No-code tools? Generative scaffolding?
These are interfaces. Not foundations.
They sit atop logic, control flow, data modeling, memory management.
They are abstractions, not eliminations.
And like all abstractions, they fail.
When they do, someone needs to understand what lies beneath.
To debug. To extend. To rebuild.
If no one does, then the interface becomes a wall. You can use it but you can’t change it. You can depend on it but you can’t question it.
And that’s not empowerment. That’s quiet dependency.
Loss of fluency, loss of agency
If nobody learns to code again, the world won’t explode. It will just become mute. Stiff.
Unwilling to respond. Unable to evolve. Like a machine with no manual, no repair crew, and no blueprint for how it was built.
Progress won’t reverse.
It will simply pause.
And one day, someone will ask:
“When did we stop knowing how to start it again?”
On Alternatives: What Fills the Space If Code Fades?
Let’s assume the premise stands. Coding begins to vanish. Not in an abruptly way, but as a fading craft. The systems persist, but fewer people understand how they were shaped.
And so the question arises not as a provocation, but as a quiet necessity:
What fills the space that code once occupied?
Some would say: nothing needs to. We have natural language prompts, low-code environments, and powerful AI assistants. Syntax, they argue, is a historical burden: one we can now set down.
At first glance, this feels like evolution.
But peer beneath the surface, and the scaffolding becomes visible.
Language is not logic
Natural language is a marvel of ambiguity. It is fluid, context-rich, and profoundly human. It works because we, as speakers, bring the weight of memory, intuition, and lived pattern into every sentence. We resolve gaps without thinking, repair in real time, and forgive imprecision as part of the game.
Machines do not do this. Not in the way we imagine. They simulate the appearance of understanding, but the simulation is shallow. It works to the point until it doesn’t.
And when it doesn’t, the fallback is no longer clear.
At that moment, a prompt is not enough. You need transparency. You need traceability. You want to follow the thread that led from input to output, to step inside the system’s reasoning.
And what gives you that clarity is not a better interface. It is the good old code.
Not as syntax, but as structure. Not as language, but as logic made legible.
Abstraction hides, but does not remove
Low-code platforms promise to democratize creation. And they succeed, but only within bounds. They open doors, allow rapid prototyping, reduce boilerplate.
But they do not eliminate complexity. They displace it. They bury it under layers of abstraction, designed by those who still speak the older tongue.
This is not wrong. It is how all engineering evolves. But when those abstractions fail , and you can be sure they will, you need someone who can descend the layers and make sense of what lives below.
If that descent is no longer possible, the system becomes sealed. At first, this feels like safety. Over time, it becomes fragility disguised as progress.
AI assists, but does not design
Then there is AI. Capable of generating entire modules, commenting on performance, translating intent into code-like form.
But it does not know what it builds. It carries no intention, no consequence, no continuity of thought. Its outputs are impressive, but detached.
That is not a flaw. It is a condition. AI is a tool (a complex, generative and remarkable one) but still a tool. It needs a hand that knows how to wield it, a mind that knows when to correct it, a sense of what should be done, not just what could be generated.
Without that hand, we do not automate. And sadly we relinquish.
We shift from building to guessing, from shaping to prompting, from understanding to assuming.
And over time, what we lose is not efficiency, but agency.
Conclusion: Use It or Lose It
Let’s not be naïve. Some aspects of coding (as it was practiced over the past two decades) are fading. The boilerplate scripts, the stitched-together glue logic, the repetitive interface generators that once passed for engineering, all these can now be assembled, or at least suggested, by machines.
And that’s not a loss. It’s an evolution. Removing friction at the surface is not the same as discarding the structure beneath.
But here’s the distinction that too often gets lost: Saying that code is being redefined is not the same as saying it is obsolete. The age of blindly typing syntax may be ending.
But the age of thinking in systems, of shaping how machines behave and respond: all that is still very much present. In fact, it is becoming indispensable.
If we stop teaching people how to code, we are not just retiring a job description.
We are letting go of a kind of fluency: The capacity to see, not just use, a system.
To understand how it works, how it fails, and this is perhaps most critical, how it can be changed.
That kind of understanding doesn’t live in documentation. It lives in people. In lived experience. In hard-won models of thought that emerge only through building, debugging, and reshaping.
And when those people leave, for instance they retire, burn out, give up explaining themselves to AI-powered middle managers, the systems don’t crash. Not right away.
They keep running. Until they don’t. And then there’s nobody left who remembers why they worked at all.
So no, coding is not dead. But like any form of literacy, it must be practiced to remain alive. It must evolve, yes, but it must also be defended. Especially against the kind of lazy narrative that mistakes visibility for truth.
Because let’s be honest: the people who make sweeping declarations like “coding is over” are rarely the ones who have spent years inside a system. They speak from distance, not depth. And yet their words travel far, shaping perception more than substance.
It’s always the same pattern: People with platforms, mistaking reach for insight, drop their opinions into domains they do not understand. They flatten what is complex.
And in doing so, they leave the public with a picture that is wrong, not because it’s a lie, but because it omits everything that matters.
So here we are. A world where code is still running, still critical, still changing.
But where fewer people understand what it means to shape it.
And if we let that slide, if we treat fluency in systems as optional, then we won’t be entering a post-code world. We’ll be entering one where dependency replaces understanding. Where systems hum along in silence, until the silence becomes a warning.
At that point, the face tattoo might not be the punchline.
It might be the more honest decision: visible, irreversible, and offered without pretense.


Leave a Reply
You must be logged in to post a comment.