Does the Language You Know Still Matter?
Listen to this article (experimental) · 08:35

You spent years getting good at one language. You learned its rules, then its habits, then the small ugly truths you only get from shipping things in it and watching them break. And now a model will write that language fluently, and every other one too, the moment you ask. So the question comes, in some version of: should I keep going with what I know, or move to the thing everyone is moving to? The fear underneath it is simpler than the question. Did the years just stop counting?
The language is two things
There is the language as typing: its syntax, the shape of a loop, where the semicolons go. And there is everything underneath: how it manages memory, how it handles two things happening at once, the failure modes that belong to it and no other, the idioms that are correct and the ones that only look correct, the ecosystem and the tools that grew up around it. AI made the typing cheap. It has barely touched the rest, and there is a reason. The rest is not really in the text. It lives in running systems and in the memory of what broke, and a model learns from text. That is why the deep half did not just survive the change. It is the half the change made scarce.
Watch which bugs got easier
The errors that shallow fluency used to guard against are exactly the ones the model now avoids and the compiler always caught: a wrong keyword, a misused bit of syntax, a call to something that does not exist. What is left are the mistakes only depth catches: the security hole that reads as ordinary code, the design decision that is wrong even though every line is fine, the concurrency bug you cannot see on any one line. AI cleaned up the cheap errors and left the expensive ones, and the cheap ones were the only kind shallow knowledge ever caught.
Depth is an alarm that fires on its own
There is a feeling every experienced developer knows. In the language you know deeply, wrong code sets off an alarm before you can say why. Something in the shape of it is off, so you stop and look. In a language you only half know, that alarm never fires. The code looks plausible, so you accept it. A model produces plausible code by construction, page after page of it. Tests catch some of what is wrong with it, and you can point a second model at the first, but a suite only checks the failures someone thought to write down, and models trained on the same code share the same blind spots. In the end the thing standing between plausible and correct is a reader whose alarm still works. That reader is someone who knows the language deeply. There is no shortcut to the alarm.
Switch for a reason, not a mood
Switching costs split the same way the language does. You can be writing plausible-looking code in a new language the same afternoon, and that part used to take months. The idioms, the runtime, the way this particular language fails, little of that transfers between languages that are strangers to each other. Between close relatives, languages that share an execution model, more of it carries over, and that is the only real shortcut there is. The rest still has to be earned. What transfers fully is the part that was never about the language at all: how you decompose a problem and reason about a system.
So switch when there is a real reason, a domain that demands it, a job you want, a problem the language was built for, and not because the noise got loud. Some domains decide the language for you. Real-time and embedded work cannot afford a garbage collector pausing at the wrong moment, so the systems languages own that ground, and the browser is the browser; in both, the language stands in for an execution model you have to hold in your head, and no amount of fluency from a model changes what the hardware will do. Machine learning belongs to Python for a different reason, the ecosystem, and the effect is the same.
Take the specific move people agonize over, staying with C++ or picking up Rust. Argued as which language wins, it has no clean answer and the argument never ends. Seen through depth, there is less to argue about. If you know C++ well, most of what Rust asks of you, thinking hard about ownership and lifetimes, is weight you were already carrying, except now the compiler carries it with you. That is closer to leveling up than starting over. And the grown-up version of the move is usually not a clean switch at all, but knowing enough of each to work where each belongs. The mistake was treating it as either/or.
The market gets a say
There is one more reason to switch, and it is the least romantic: the door. How much the label on your experience matters depends on how you earn. Build your own product and nobody who buys it asks what it is written in. Help others build theirs, consulting, freelancing, agency work, and you work inside their stack, so yours has to be close enough to get hired. And in plain hiring, the label can decide everything before a human reads your name. The filter wants years of one specific framework, and depth in an adjacent language does not get you the interview.
The market has seasons too. Languages swell and shrink in demand on cycles that have little to do with merit, and a stack that filled a decade of job listings can go quiet while one you never touched shows up on every posting. That is not a reason to chase each season. It is a reason to know which game you are in. If your income runs through other people's stacks, keep at least one language the market wants this season, and use the machine for what it is now good at, getting you to plausible in a new stack quickly, while you do the part it cannot: building enough depth to defend the code in the interview and after you are hired. The checkbox opens the door, and the depth is what keeps you inside.
Where depth does and does not pay
None of this makes breadth worthless. A second language, especially one that thinks differently from your first, sharpens how you see your first, and AI makes dabbling cheap, so wandering around costs almost nothing now. What lost value is breadth as a pile of syntaxes, five languages you can type and none you can defend.
Depth does not pay everywhere, either. For a throwaway script, a bit of glue, a prototype you will delete on Friday, the model levels the field and the language barely matters. Depth earns its keep in the code that lives: the mature system where performance or security actually matters, the code you will still be maintaining in three years.
The awkward part is that the reps that used to build depth came free with the job, and now they do not. You wrote the loops yourself, you hit the cheap bugs, you fixed them, and depth accumulated as a side effect. The machine does that part now, so the reps have to be chosen on purpose. Debug the generated code instead of regenerating it. Read the diff the way a reviewer would. Break something deliberately to see how it fails. Depth used to happen to you; now it has to be a decision.
This is an older point resurfacing: the mechanical production of code was never what you were paid for, and now it is the part a machine does. What is left is judgment, and judgment in programming is not language-independent the way we like to pretend. A lot of it lives inside one runtime, learned the slow way, by building things in it and being there when they failed.
So the years counted. The part that lost its value was never the part doing the counting. The syntax you memorized is worth less now, and it was never worth much. The model of the language you built underneath it, deep enough to know when the generated code is lying to you, is worth more than it has ever been. Learn a language well enough to review it.
Questions this article answers
Should I stay with the language I know or move to the one everyone is moving to?
Switch when there is a real reason, a domain that demands it, a job you want, a problem the language was built for, and not because the noise got loud. Some domains decide it for you: real-time and embedded work cannot afford a garbage collector pausing at the wrong moment, the browser is the browser, and machine learning belongs to Python because of the ecosystem. If your income runs through other people's stacks, consulting or plain hiring, keep at least one language the market wants this season, because the label can decide everything before a human reads your name.
Why not just point a second model at the first model's code?
Because models trained on the same code share the same blind spots, and a test suite only checks the failures someone thought to write down. A model produces plausible code by construction, page after page of it, and the thing standing between plausible and correct is a reader whose alarm still fires when the shape of the code is off. That reader is someone who knows the language deeply, and there is no shortcut to the alarm.
I know C++ well. Is picking up Rust starting over?
It is closer to levelling up than starting over. Most of what Rust asks of you, thinking hard about ownership and lifetimes, is weight a C++ developer was already carrying, except now the compiler carries it with you. The grown-up version of the move is usually not a clean switch at all, but knowing enough of each to work where each belongs, and the mistake is treating it as either or.
How do I build depth now that the machine writes the routine code?
By choosing the reps on purpose, because they no longer come free with the job. You used to write the loops yourself, hit the cheap bugs and fix them, and depth accumulated as a side effect. Debug the generated code instead of regenerating it, read the diff the way a reviewer would, and break something deliberately to see how it fails.
Read next
AIShould You Still Learn to Code When AI Can Do It?
Two of the questions developers keep asking are the same fear from opposite ends. The answer is yes, and the reason for it just got stronger, not weaker.
AIWhere Will the Next Seniors Come From?
AI is eating the exact work junior developers used to learn on, entry-level hiring is collapsing measurably, and every senior who can vet a machine's output was once a junior somebody paid to be wrong. On DHH hiring for 'how far could they go', the 2,200 people who applied, and why an industry that stops making seniors has misunderstood its own supply chain.