I was contacted by someone just starting to learn programming. They asked whether they should use AI from the start, or learn the basics first.
I think that’s a very deep question. Maybe stop for a minute and think how you’d answer.
Motivation
I found it most useful to recast the question.
In an age where children have constant access to their phones, do they need to learn arithmetic?
I’ve heard folks online say “no” to this. “They’ll never have to manually add up numbers or calculate a percentage. Let them explore more interesting things.”
I disagree with this, but not because I believe everyone should know what seven times nine equals.

My thinking is that numbers are the first step towards building an intuition about more useful things: ratios and percentages, speed vs. acceleration, compound growth—these are all intensely practical things. Until you have some kind of feel for them, you will be unable to make meaningful decisions when faced with a bunch of important life choices. We learn arithmetic not because we need to know what twelve divided by three is, but because we need the intuition that twelve divided by three is larger than twelve divided by six. We live in a world ruled by numbers; if you don’t know how those numbers behave, you’re at a disadvantage.
I could go on, or I could draw other parallels (do kids need to learn to history? geography? languages? …?). But every point would come to the same conclusion. Some skills are important because they are foundational to building an intuition about the world in which we operate.
Intuition
The aim of learning is not to remember what you’re taught, but instead to make that experience accessible when it is needed.
If I say “two plus two equals,” the word “four” will pop into your head without you thinking about it. There’s no recall; it’s just intuitive. If you’re driving past a street sign your mind will likely read what it says, even if you don’t ask it to. It’s just an inate ability, learned through repetition and practice when we were young.
It is this ability to handle things below the level of conscious thought that allows us to function.
Look out the window. Maybe you see trees with leaves rustling in the wind. Maybe you hear cars driving by. Maybe you smell that bakery down the street.
How much information is arriving via your senses? What is the bandwidth we handle when we simply exist? As raw data, it must be many, many megabits each second. If we had to process all that consciously, we’d melt.
That’s why the level of thought below consciousness is so important. It’s the LLM we have been training all our lives to recognize patterns and make suggestions based on what it finds.
Back to coding.
Do You Use AI When Learning to Code?
My answer is that “it depends.” Why are you learning to code? Do you have some cool idea for a killer app that you need to get to MVP? Vibe away. Do you want to build a career in software development? The basics will help.
If learning to code simply means getting better at prompting Claude to write something for you, then you are choosing to limit your experience; you are choosing not to build an intuitive understanding of what the code does and why it does it. And that’s absolutely fine, but you have to know going in that you’re building on an unknown foundation. If cracks appear later, you won’t really be in a position to know why.
If, instead, you decide to forego the AI, then you’re going to go slowly. You’re going to make mistakes and experience frustration, both made worse by the knowledge that an LLM could tell you what’s wrong in seconds.
But those mistakes and frustrations are necessary if you are trying to understand how things work; these are the feedback paths that build and cement intuition.
The vast majority of experienced developers use AI every day. But they all tell me the same story: you have to keep an eye on what it’s doing, and you have to guide it towards solutions you want it to use. To do that, you have to have an idea when you start of how things will play out; you must have the experience to be able to see the overall structure of what you’re building, and to be able to predict likely issues and choices that will mitigate them. To use AI effectively, you pretty much have to know what it is doing for you.
The AI Paradox
If want a career when you get computers to create value for people, then you need to build the intuition; you need to do things manually and make mistakes.
But there’s the paradox. AI is an incredible tool in the hands of an experienced developer, but how do you get to be an experienced developer without using AI? Companies are unlikely to hire someone who does something as old-fashioned as writing all their own code.
So here’s what I’d suggest. If you really want to get good at doing what we used to call “programming,” adopt a hybrid approach.
You must build intuition, and that means learning. It means trying stuff, making mistakes, rereading the same paragraph in an article a dozen times until it clicks. There’s no fast-path to experience.
But… as you start to cement that understanding into your intuition, you can start to use AI tools to facilitate using what you’ve learned. Once you know the multiple ways of summing a list of numbers, you could probably get an LLM to write that code for you, letting you focus on the higher level things you are learning.
Discipline
Once you allow an AI into your editor, then you are living with constant temptation. “I could write that for you, you know” is a dangerous thing to hear when you’re struggling to master something. It might be possible to tell your ASI assistant that you only want help up to a certain level: “please help me write basic control structures, but leave the higher level function organization to me.” I’ve played a little with this, but without much success.
So, as with most things, becoming good requires motivation and discipline.
Personally, I find the rewards are worth it. What do you think?
Great post, Dave! Thanks for sharing. I agree a 100% with this one.
One thing I'm constantly trying to do is owning my interfaces. I never thought about it as a "learning approach", but maybe that could work as well.
For example: In Elixir, I often create a behavior and tests and ask Claude to create a module that implements that behavior for me. In this way I can inspect the implementation (if I care about it) and also be at ease because Claude won't mess up my working code.
I think that AI for augmented programming is a tool, like a guitar. If you're Jon Snow and know nothing, you can only use it to play the "Come as You Are" intro. As you gain experience, you start to play chords, hammer ons, pull ups, bends, solos, harmonics, improvisation, etc.
Without coding experience the developer would only be able to use AI to say "Claude, build me this", the geek version of the "Come as you are" intro.