Eli Chen

Debugging with AI

“Vibe coding” has become the popular name for using AI to build something without really understanding the code underneath it, and the promise is real, rapid development and software building opened up to far more people. But there’s a trap hiding in it, because if you build without understanding, you end up with a system that you can’t debug and can’t maintain, and that’s a system that will eventually stop working in a way you can’t fix.

I’ve actually found the opposite to be possible, that using AI to code can be an incredible accelerator for learning, if you let it be one. It gives you concrete, working implementations to look at, and those help you build intuition for concepts that stay abstract when you only read about them. It acts like a filter that separates what you need to understand right now from what you can safely come back to later. This is close to Jeremy Howard’s “top-down” teaching philosophy in Fast.ai, the idea that you should get your hands dirty with working code first and dive into the theory once you have something real to anchor it to.

Most of the criticism of vibe coding is that it produces code that’s only good enough for a prototype, too fragile for production, too brittle to maintain. And that’s often true, but I think it usually comes from skipping the learning part. If you never build an understanding of how the system works, of the syntax, of the architecture, then you’re setting yourself up to fail the moment the AI makes a mistake, because you won’t be able to tell that it did.

And the AI will make mistakes. These models are still being reinforcement-learned to search the solution space more effectively, and mistakes are simply part of where we are right now, whether it’s a hallucination, a subtle syntax error, or a path that looked reasonable and turned out to be strategically wrong. So the real question is how we get the most out of AI during this era of imperfect AI, and the answer, to me, is that we have to become great debuggers.

So what makes a great debugger? It’s tenacity, the refusal to give up on a problem. It’s deep focus, the patience to peel back the layers of the onion one at a time. It’s humility, the willingness to set aside what you assume is true and run an objective experiment instead. It’s systems thinking, using what you already know to make good guesses about where things are failing. And it’s pattern matching, the kind you can only earn by building and fixing software over and over again.

I love debugging. It’s a form of high-stakes problem solving that always pulls learning along with it, and the hit you get when you finally fix a stubborn issue is intense. You either fix it or you keep grinding, and I know some people hate that loop, but I’m addicted to it.

So if you’re learning to code with AI today, my real encouragement is to use these tools to learn software engineering, not just to generate output. Put your attention on your debugging skills, and that means investing the time to understand how computers and software actually work underneath. That foundation is the thing that makes a great debugger, and it’s the thing AI can’t hand to you.

It might take months or years to build, but what it buys you is a higher ceiling, a limit on how complex a system you can build and actually keep working. You can’t prompt your way out of every corner. At some point you need the depth yourself, so that you can steer the AI toward the right solution instead of hoping it finds one.

And don’t hesitate to lean on experienced engineers for the specific tips or the high-level guidance. We’ve been down in the trenches, and most of us are genuinely happy to help someone else learn how to get through them.