Skip to content

How to Learn Coding While Building with AI Tools

Scrabble tiles spelling "I am still learning"

I shipped a feature yesterday. The app works. Users are happy. But when my co-founder asked me to explain how the authentication flow works, I stared at the screen for thirty seconds and mumbled something about “tokens.”

This is the trap of vibe coding with AI tools. You feel productive. You ship fast. But you’re not learning.

The Problem: The Illusion of Competence

Three months ago, I started building with Claude and Cursor. The experience was intoxicating. I’d describe what I wanted, and boom - working code appeared. Authentication? Done. Database migrations? Solved. API integrations? Shipped.

But then things started breaking. And I couldn’t fix them without the AI.

The pattern looked like this:

dependency-cycle.txt
Me: "Add user authentication"
AI: [generates 200 lines]
Me: "Great, thanks!"
[later, something breaks]
Me: "Fix the login bug"
AI: [fixes it]
Me: "Thanks"
[dependency reinforced]

I was shipping features without understanding them. The AI became a crutch, not a teacher.

A Reddit user named u/lilsimbastian nailed it:

“Learn yourself. When you build with an LLM, ask why it did what it did. Go read your code files, even if they don’t make sense. I understand when and how to say ‘teach me how’ not ‘do it for me’.”

The Mindset Shift: From Consumer to Student

The solution isn’t to stop using AI tools. It’s to change how you use them.

I switched from a passive “do it for me” approach to an active “teach me how” approach. Here’s what that looks like in practice:

Before: Passive Consumption

bad-prompt.txt
User: "Add user authentication to my app"
AI: [Generates 200 lines of auth code]
User: "Great, thanks!"

Result: Zero learning. I had no idea how authentication worked.

After: Active Learning

prompt.md
User: "Add user authentication to my app. Before you write any code, explain:
1. What approach you recommend and why
2. What files will be affected
3. What security considerations I should know
4. What alternatives exist and why you rejected them
After generating the code, walk me through each file and explain what it does.
I want to understand this, not just have it working."

Result: Structured learning. I gained vocabulary, understanding, and context.

A Simple Framework for Learning While Building

I developed a checklist that I run through for every feature:

session-structure.md
## Before Any Code Generation
- [ ] State what I already understand
- [ ] Identify specific knowledge gaps
- [ ] Request explanation of approach first
## During Code Review
- [ ] Read every file generated
- [ ] Highlight unfamiliar terms
- [ ] Ask for clarification on each
- [ ] Request comments for complex logic
## After Feature Complete
- [ ] Make at least one manual modification
- [ ] Explain the feature to someone else (or write it down)
- [ ] Document what I learned in personal notes
- [ ] Identify areas for deeper study

This framework slowed me down initially. But the compounding effect has been massive. Each session builds on the last. I’m not just accumulating features - I’m accumulating skills.

What Changed: Debugging as Learning

The biggest shift happened when I started using bugs as learning opportunities instead of just problems to solve.

Old Approach: Dependency Reinforced

old-debug.txt
Me: "The login is broken, fix it"
AI: [Fixes the issue]
Me: "Thanks"

I’d have the same dependency on the next bug.

New Approach: Skill Development

new-debug.md
Me: "The login is broken. Instead of just fixing it, can you:
1. Explain what went wrong
2. Show me the specific lines that caused the issue
3. Explain how to recognize this problem in the future
4. Let me try to fix it with your guidance
I want to learn debugging, not just have working code."

Now each bug makes me more capable, not more dependent.

Common Mistakes I Made (So You Don’t Have To)

Mistake 1: The “Just Ship It” Trap

I prioritized speed over understanding. I’d accept generated code without reading it, building feature on feature without comprehension. The AI became a black box.

Fix: I forced myself to read every file, even when uncomfortable. I looked up unfamiliar terms immediately.

Mistake 2: Imposter Syndrome Paralysis

I felt too “non-technical” to understand. Code looked confusing, so I assumed understanding was out of reach.

Fix: I started a personal glossary of concepts. Every unfamiliar term got looked up and documented.

Mistake 3: Skipping Fundamentals

I jumped straight to frameworks without learning basics like variables, functions, and loops.

Fix: I asked the AI to explain concepts from first principles before applying them.

What I’ve Gained

After three months of intentional learning while building:

  • I can make small changes without AI assistance
  • I understand what developers are telling me
  • I can evaluate technical proposals and estimates
  • I write more effective prompts with technical vocabulary
  • I catch AI mistakes before they ship

As another Reddit user, u/maleslp, put it:

“I still don’t know how to code, but I can talk to anyone in our tech department… I’m having to go back and rebuild some of my larger projects with the knowledge that good architecture and multiple reviews are key to the process.”

That’s the goal. Not to become a senior engineer overnight. But to become capable, informed, and increasingly independent.

The Takeaway

The key to learning coding with AI tools is intentionality. Shift from “do it for me” to “teach me how.” Read your code files even when they don’t make sense. Ask for explanations, not just solutions.

The AI will always be there to help. But the skills you build along the way are yours to keep.

Final Words + More Resources

My intention with this article was to help others share my knowledge and experience. If you want to contact me, you can contact by email: Email me

Here are also the most important links from this article along with some further resources that will help you in this scope:

Oh, and if you found these resources useful, don’t forget to support me by starring the repo on GitHub!

Comments