Teaching Python to My 11-Year-Old: What Actually Worked (and What We Quit After 3 Weeks)
The kitchen timer for chocolate chip cookies was still beeping when Leo slammed his laptop shut so hard his half-eaten strawberry granola bar slid off the edge of the table. It was our third Tuesday of working through a paid “Python for Kids” course I’d signed him up for, after he wouldn’t stop talking about his friend’s Discord bot that posted random cat photos to their friend group every hour. “This is stupid,” he mumbled, kicking the leg of his chair. “All we do is copy lines the guy says and I don’t even know what any of it does.”
I leaned against the counter and pulled the cookies out before they burned. I’m not a software developer; I only know basic Python from sorting spreadsheet data at my part-time admin job. I’d paid for the highly rated course because I assumed structured lessons from an expert would be better than me winging it. I’d bought into the line that 11 is the perfect age to pick up “real coding,” that starting now would give him a leg up for high school classes down the line. But watching him slump there, crumbs on his hoodie, I realized the course was just another after-school worksheet to him, something I was making him do that had nothing to do with the reason he cared in the first place.
I wiped the crumbs off the table and sat down next to him instead of giving the usual “just stick with it” speech. I asked him what he actually wanted to build, if he could make anything at all. He didn’t hesitate. He wanted a digital d20 for his weekly Dungeons & Dragons campaign, because he’d left his physical set at a friend’s house twice in one month. He also wanted it to automatically add his +3 strength modifier when he rolled for attacks, so he didn’t have to do the math in his head mid-battle.
We canceled the course subscription that night, no guilt, no “we have to get our money’s worth” argument. We set two loose ground rules instead, both tailored to how 11-year-olds actually function after six hours of school: we would only code for 20 to 30 minutes at a time, right after snack and before homework, two weekdays a week. We would never do lessons just for the sake of learning a term. Every new thing we learned would help build something he actually wanted to use.
We didn’t download any fancy software or buy a new laptop. We used a free browser-based tool called Replit, which saves work automatically and doesn’t require any complicated setup. The first day, I didn’t open with a lecture explaining that “variables are like labeled boxes.” I just told him to type `import random` at the top of the blank page. When he asked what that meant, I said, “It’s like grabbing a bag of dice out of the game closet. Someone else already made the dice, we just get to borrow them.” Next, we wrote `roll = random.randint(1, 20)`. He hit run, and the number 14 popped up in the console. He blinked, then hit run three more times, getting 7, 19, and 2. That was it. He was hooked.
It wasn’t all smooth. The first time he got an indentation error, he groaned and pushed the chair back, ready to quit for the day. Indentation is one of the trickiest parts of Python for new learners, kids especially: extra spaces don’t just look messy, they break the whole code. I didn’t fix it for him. I pointed to the red error text, which said “unexpected indent on line 5,” and said, “That’s just like when your English teacher marks a paragraph wrong because you forgot to indent the first line. Let’s count the spaces together.” We found the extra space in 10 seconds, and the code ran again.
I made my biggest mistake a month in, when I printed out a formal worksheet explaining if statements, thinking I was being organized. By the time I finished walking through the abstract rule structure, he was staring out the window at the neighbor’s golden retriever, twisting his pencil around his finger, and we got nothing done in 25 minutes. I recycled the worksheet after he went to bed. The next session, I just said, “Remember last Saturday when you rolled a natural 20 against the goblin chief and yelled so loud the cat hid under the couch for 20 minutes? What if the program automatically printed ‘CRITICAL HIT’ when you roll a 20, so you don’t even have to yell it yourself?” He leaned forward immediately. We figured out how if statements work in 12 minutes flat.
That’s the thing most kids’ coding courses leave out: most 11-year-olds don’t care about abstract rules until those rules solve a problem they already have. Parents often ask if their kid needs to master Scratch before moving to Python, and my answer is it depends on the kid. Leo did Scratch for fun in elementary school, but by 11 it felt like “baby coding” to him, something for younger kids at after-care. Python felt like the real thing, the same tool his older friend used, and that social credibility mattered way more than any perfect skill progression. If your 11-year-old still loves building drag-and-drop Scratch games, there’s no reason to push text-based coding before they’re curious.
I also hear from a lot of parents who say they can’t teach Python because they don’t know how to code themselves. Half the time, I don’t remember the answer either. When Leo wanted to let his friends type in their own character modifiers instead of being stuck with +3, we spent two sessions fixing the bug where typing the word “three” instead of the number 3 crashed the whole program. We looked up the error message together, read a beginner forum post, and added a line that tells users to type a number if they enter text. I never had to be the expert. The line I use most often is, “I don’t know how that works either. Let’s find out together.”
We keep sessions at the kitchen table instead of his bedroom desk, so if he gets frustrated he can get up, pet the cat, pour a glass of milk, or stare out the window for a minute without feeling trapped doing homework. If he doesn’t feel like coding one week, we skip it, no makeup work, no guilt. This isn’t piano practice; there’s no recital coming up.
Three months after that granola-bar-slamming Tuesday, the dice roller works. All his friends have the link, and they use it every Saturday when someone forgets their physical dice. He tried to build that cat photo Discord bot a few weeks ago, but the account setup was confusing and we ran out of time halfway through. He closed the laptop and said he’d come back to it later, and he hasn’t mentioned it since. That’s fine too. Half of coding is leaving half-finished ideas sitting around to pick up later if you feel like it.
Last week he asked if we could build a program that tracks his nightly reading for his school reading log, because he always forgets to write page numbers in his planner. He scribbled a list of features he wants in the margin of his math notebook, with little doodles of fantasy novels next to each line. We haven’t started yet. We might get to it this Tuesday, if it rains and he doesn’t want to ride his bike to the park after snack. If not, we’ll do it the week after. I don’t know if he’ll grow up to work with code, and that’s never really been the point. The paid course promised he’d be “career ready” in six months, which felt silly even when I entered my credit card info. What he’s getting right now is much smaller, and much more useful: practice reading a confusing message, trying one fix, then another, and walking away for a week if it doesn’t work. That’s enough for now.
Please indicate: Thinking In Educating » Teaching Python to My 11-Year-Old: What Actually Worked (and What We Quit After 3 Weeks)