How to Code With AI Without Becoming Dependent On It
Listen to this article (experimental) · 06:46

It has quietly become one of the most common questions a developer asks out loud: how do I code without becoming completely dependent on AI? The people asking are often the ones you would least expect. A computer-science student who can pass the theory exams but has built every real project with a model at their elbow, and now cannot write a function without reaching for it. A working engineer who notices, one ordinary afternoon, that they have not typed a line unaided in weeks. The usual answer comes back fast and nearly unanimous, and it is right for exactly one kind of person and wrong for almost everyone asking.
The answer is: remove the crutch.
Cancel the subscription. Uninstall it. Code offline, like it is 2010. The metaphors arrive on cue, and some of them are good. Training wheels bolted to the only bike you own. Cheating on an exam. A calculator. The sharpest version of it: AI was a wheelchair you never needed, your coding muscles have atrophied, and the only way to make them strong again is to carry the weight yourself.
If you are a student learning fundamentals, that advice is correct and I will not soften it. You cannot build a mental model of a problem if a machine builds the solution for you every time. The most careful version of the warning names the real danger precisely: it is not using AI, it is letting AI skip the part where your brain builds the model of the problem. For that person, the crutch has to come off, because the point of the exercise was never the working program. It was the wiring you grow while producing it.
But most people asking this question are not going to become people who never touch AI. They are going to become professionals whose job increasingly is to direct it. And for them, "use less AI" is not an answer. It is a delaying tactic that postpones the real question by a year.
The real cause
Here is the thing the crutch metaphors miss.
Dependency is not caused by AI writing your code. It is caused by AI writing code you never turned into understanding.
I should say where I stand, because it is not the abstinence side. I have spent recent months building AI tooling: a pipeline that turns a sentence into a plan and opens its own pull requests, a control plane that governs fleets of agents. I use these tools every day and I am not going to lecture anyone about purity. But every one of them rests on a single rule that has nothing to do with how much AI you use: nobody merges what they cannot explain.
That rule is the whole difference between using a tool and depending on it. Under the metaphors, a harder point keeps surfacing. Picture the AI-only developer shipping generated code into a real production system, watching it break, and having to fix code they never understood. And the popular boast that you can have AI "build the whole app without me contributing anything" falls apart on contact: you are still supplying the constraints and reviewing the output, so you are contributing, and if you genuinely are not reviewing it, you are shipping the security holes yourself. The cost of dependency is not that you used AI. It is that you cannot fix, at two in the morning, the thing with your name on the commit.
Why the calculator analogy breaks
The comparison people reach for is the calculator. Calculators did not stop anyone from learning arithmetic, so why should AI stop anyone from learning to code?
Because a calculator returns an answer you can trust. Seven times eight is fifty-six whether or not you understand it. An LLM returns an answer you have to verify. That is the entire difference, and it runs the opposite way from the reassurance: it means understanding matters more in the AI era, not less. The calculator let you stop understanding arithmetic because it was never wrong. The language model cannot let you stop understanding code, because you are its reviewer, and a reviewer who does not understand what they are reading is not reviewing anything at all.
The discipline that actually works
So the goal is not less AI. It is keeping possession of the thing dependency takes from you. In practice that is a short list, and most of it echoes the better advice anyone gives.
Write the first version by hand. Build the ugly, slow one yourself, then let AI compare, critique, or refactor it. The struggle is not friction in the way of learning. It is the place the model of the problem forms.
Use it as the senior sitting next to you, not as your hands. The most useful way to put it is a mentor, not an intern programmer: challenge what it gives you, demand the links, then go read the documentation yourself. The moment it becomes your hands instead of your advisor, you have stopped owning the skill and started renting the output.
Never merge what you cannot explain. This is the entire rule, and it is enforceable. If you cannot walk a colleague through why the generated code works, it is not yours yet. It is a liability you signed for.
Make the review real. I wrote in another post that after enough approvals you stop reading, and a gate you do not read through is not a gate. The same is true one person at a keyboard: the diff you accept without understanding is the exact line where dependency starts.
The most clear-eyed compromise I have heard anyone describe is a barbell: hand-write and debug everything, except under deadline or for throwaway scripts, where you reach for the AI knowing full well that it builds technical debt and makes you a little dumber. I like that posture more than any purity. The goal was never to pretend AI does not exist. It is to know precisely what you traded, and to be able to buy it back.
What the muscle actually is
The people telling you to cancel your subscription are protecting something real: the strength you can only build by doing the hard part yourself. They are right that you build it by hand, and right that it atrophies when a machine carries the weight for you.
But the muscle that keeps a working developer from becoming dependent is not the ability to produce code without help. It is the judgment to know when the help is wrong. You earn that the same way you earn any judgment, by understanding what the machine wrote, every single time, before it becomes yours.
So use all the AI you want. Just never ship a line you could not have caught.
Questions this article answers
How do I code with AI without becoming dependent on it?
Not by using less of it. Keep possession of the understanding instead: write the ugly first version by hand, because that is where the model of the problem forms, use the tool as the senior sitting next to you rather than as your hands, and never merge what you cannot explain. Dependency starts at the diff you accept without understanding, not at the moment you open the chat.
How do I know if I am actually dependent or just using the tool well?
The test is whether you could fix it at two in the morning, when the thing with your name on the commit breaks. If you cannot walk a colleague through why the generated code works, it is not yours yet, it is a liability you signed for. Producing code unaided is not the measure. Catching it when it is wrong is.
Is AI not just the new calculator?
No, and the difference runs the opposite way from the reassurance. A calculator returns an answer you can trust, since seven times eight is fifty-six whether or not you understand it, while a language model returns an answer you have to verify. That makes you its reviewer, and a reviewer who does not understand what they are reading is not reviewing anything at all.
Is it ever fine to just let the model write it and ship it?
Under deadline or for throwaway scripts, yes, on a barbell posture: hand-write and debug everything else, and reach for the tool knowing full well that it builds technical debt. The boast that you can have AI build the whole app without contributing anything falls apart on contact, because you are still supplying the constraints and reviewing the output, and if you genuinely are not reviewing it, you are shipping the security holes yourself.
Read next
AIYou Are Chasing Tools. The Skill Is Underneath.
The tool you argue about is the part you can swap in a day. Nobody is asking about the part that took years.
AIWhen the AI Has to Film Its Own Review
When a pull request is raised, mine or one I have to review, I now ask the agent to run it on my machine, try to break it and film itself doing it. A paragraph can claim a test happened. A recording has to show it, and deciding what it means is still my job.