Reflections on AI-Assisted Coding

After six months of intensive use of AI coding tools1, I started to look back on this period of work. A lot of things did get done — but how much of it actually stuck with me?

To me, an AI coding tool is a lot like a piece of legendary gear2 in a game. It may not be easy to obtain, but it has no level requirement; almost any player can equip it and immediately deal impressive damage. There's just one special modifier on this item: defeating enemies grants the player no experience points.

The analogy isn't rigorous, but it captures a concern of mine: AI coding tools can dramatically boost output, yet the user's abilities may not grow at the same pace.

Power you've borrowed, after all

With AI coding tools, developers can get familiar with unfamiliar codebases faster, implement new features, debug build failures, or complete tedious migration work. Their value is beyond doubt: they save time and let us take on problems we might once have had no way to approach.

But producing more and becoming more capable are, in the end, not the same thing.

In a game, the real gap usually only shows up when you take off that special piece of gear in a PVP3 match. In software development, that moment might come during a production incident, a tricky concurrency problem, or an architecture decision with no standard answer; or when the AI keeps generating code that looks correct but is actually wrong. Once the AI tool is out of answers, all a developer can rely on is their own knowledge and judgment.

I'm not saying AI tools make developers worse. The key issue is that the growth of skill may not keep pace with the growth of output. In the past, we often spent a long time grinding through a problem, and it was precisely through that process that we gradually came to understand it. Today, AI can help us skip many hard steps — but what gets skipped along the way might also include important parts of the learning process.

AI's output isn't personal growth

AI makes it easy to fall into an illusion: give it enough context, spend enough tokens, ask one more follow-up, and no problem is unsolvable. But I've found that isn't how it works. I still have to decide what to build, understand the key boundaries, spot subtle bugs, and take responsibility for the final result — much as the internet likes to joke.

The tool writes code faster than I do, and can produce code I couldn't write on my own — but that doesn't mean I truly understand it.

This gap is easily masked by a flood of diffs. More commits in the repository, more features, more experimental projects finished; unfamiliar details become less and less of an obstacle. And yet the projects can keep moving forward while I seem to be standing still.

Looking back over the past six months, I've consumed an astonishing number of tokens without feeling commensurate growth. I originally started writing code simply because I enjoyed it. In an atmosphere where everything gets vibe-coded, every thought quickly becomes a new task, a prototype, or a PR. Over time, programming increasingly felt like work rather than a hobby.

That's a little disheartening for me.

Actively absorb the XP

For me, the answer isn't to refuse AI coding tools — turning them off won't automatically make me a better developer.

Before accepting an answer from the AI, maybe I can pause and trace through the code path myself first; when I hit an error, I can try to diagnose the cause before asking the AI for an explanation. I can also reorganize its answers in my own words. Occasionally, I should solve problems without the help of AI, accepting that it may take longer. Most importantly, I need to understand the generated code, not just be satisfied that it runs.

AI can remove many of the difficulties in programming, but those difficulties aren't all meaningless. It is precisely through wrestling with them that we gradually build up experience, judgment, and confidence. If we hand over every difficulty, we might complete more tasks, but we'll be even less equipped to handle the problems that AI can't solve either.

Footnotes

  1. "AI coding tools" as used in this article refers to software based on large language models that can generate, explain, review, or modify code according to natural language instructions.

  2. In many games, legendary equipment usually refers to rare and powerful gear; different games name and tier it differently.

  3. PVP is short for "player versus player" — players competing directly against other players, rather than fighting computer-controlled enemies.