Ask HN: How are parents who program teaching their kids today?
My son is showing interest in programming, mostly because, like other kids, he wants to make games. That's what got me started, too :) We've been working with Scratch and GameMaker, and I’ve been focusing on fundamentals like logic, structure, and problem-solving.
It's really about getting him experience breaking problems down so he can solve bigger problems. E.g., before the hero can shoot an arrow to defeat the bad guy, we need to be able to create arrows, move them, know their position, and know when they hit the bad guy. He gets it.
That said, I wonder whether focusing on CS fundamentals is worth it. Knowing fundamentals is always useful, but learning to collaborate with an AI is probably the more important long-term skill.
What are other parents doing? Have you found a balance? What tools are you using?
103 comments
[ 3.1 ms ] story [ 177 ms ] threadGames in particular are such a vast mix of skills, techniques, and ever shifting market demand. I left game modding and went full time into biz software as my pixel painting and low-poly modeling skills were falling out of favor. Art fundamentals served me well enough, but I was far too slow an artist to put out high fidelity work at the new pace.
When my dad gave me QBasic, I bounced off it hard and thought I hated programming. Meanwhile I was programming games with tools like Klik-n-Play, Con, and batch files. Later in university I had to learn several programming languages and finally it clicked.
Just my two cents: if your kids aren't very interested or ready for that kind of knowledge now, you might find that in a few years they can learn it surprisingly quickly if they're interested then. What takes months to teach early on might work in days or hours later.
Also, don't forget to explore https://www.alice.org/ it's a 3D way to get started.
Roger that. I showed some Python magic to a pair of 10 year (or so) olds, they weren't too thrilled. Also Lego (my childhood magic) didn't do much for them. But they liked Minecraft well enough...
One of them is now an engineer, slinging C and Python as needed.
- Make them curious, if they are curious they will teach themselves. Example: don’t tell them what a for loop is, make a project where they really need it, but let them first to write it very verbosely without loops, then they will almost invent it themselves and be relived when you teach them (same style can be applied to most things)
- make projects that have low entry level, but where they can improve it infinitely. E.g. build an aquarium simulator or a city simulator using p5.js
- make them collaborate with other kids if possible, often they learn better from their peers than listening to their parents. Facilitate collaboration, and help them come up with more and more difficult projects, that require more and more of them, so they don’t stay on the same level too long
- I made this little thing with 100 levels, each easy enough to do in 30 seconds to 2 minutes: https://akkartik.name/post/2024-10-26-devlog. My kid has zero patience for lecturing, and this is me trying to sneak through that filter.
- When you get to the end, it turns out you're pretty close to a game of Pong or Snake, and it's been interesting to see people build toward one vs the other. I've been obsessed with Snake lately, alternating between playing it and hacking on it: https://merveilles.town/@akkartik/114547652849162554
The consumer tech industry's primary objective is "engagement" aka wasting human time and is thus intentionally hostile to automation or any kind of programmatic interactions, so it isn't easy to find such things.
these three fields underpin all advanced sciences
curious kid will learn everything she needs with internet/chatgpt. Your goal is to make sure your kid is curious and not wasting time watching MrBeast or sending nudes on snapchat
And then modded Minecraft can take you all the way, as far as you want to go.
Of course, I recommend starting with GregTech New Horizons - if they can survive that they’ll be able to handle anything!
This was a really useful realization when I was teaching kids to code in person for ~5 years. I started off teaching Java with an abstraction layer (https://www.bluej.org/), but I found that many students would be intimidated by anything that ventured outside of the abstraction (e.g. just run `javac` on your computer with a `.java` file). My most successful students intuitively understood how to turn a text file on their computer into a useful piece of compiled code, or into a JAR bundle that they could share with others. They also used the various abstractions that were thoughtfully introduced over time - e.g. an IDE that gives you a run button, libraries like Firebase which enable some exciting multiplayer game options, and so on.
Ok, so spaces and indentation matter. How many spaces exactly there should be around `=`?
`a[1]` -- does it fetch something or does it modify something?
`for k, v in a.items():` or `for i in range(10):` -- waaa? How many spaces there should be?
What do you mean my Python script doesn't run, you see I clicked it and it runs. What do you mean "interpreter"?
And the main issue -- types. I'm 100% convinced now that the first language must be strictly-typed, like Java, and don't use `var`, always use explicit types. Otherwise students don't think in terms of types, but "what I put there" like it can hold anything.
I don't want to end up as a curmudgeon griping about how "back in my day we didn't have an IDE!", as I'm in favor of giving students real world tools early, but I'm worried that we're filtering out some level of independence by sandboxing their learning so strictly.
Give the kid some programming tools and leave him alone. Be there for questions, and brainstorming if he wants it. Otherwise let him figure it out. He'll shoot himself in the foot, and maybe get discouraged but if his interest is deep enough he'll persist.
My kids have finally gotten hooked by godot, after a few years of building up a foundation with simple programming assignments. It's fun to see them digging in for hours to make something, but man, it was a long road to get here.
A pet project a child commonly wants to develop is a video game. Now imagine going on Google and searching how to build a game and what kind of results you get. How do you convince that child that he doesn't need the shiny flashy thing the ads are trying to sell and just needs to sit down and learn real coding?
How difficult a skill is "collaborate with an AI" that it can't be picked up quickly at any time (and will be changing rapidly)?
And how permanently stunted is a person who always "collaborated" and never had to think.
> I’ve been focusing on fundamentals like logic, structure, and problem-solving.
These are good. And exploration, and having fun.
> CS fundamentals
You can gently drop CS-ish ideas, or more sophisticated programming ideas, as the kid is ready. For example, they're blocked on something they're building, and can't go any further, because they're trying to do everything as code with not enough data. So you show them what could be data, and what language feature enables that, and suddenly their code looks a little more sophisticated, and a lot less repetitive.
If they keep going, eventually they will want to frontload learn all the CS things. Not for Leetcode interviews, nor for whatever job-gatekeeping atrocity is made up next for people who also have to interview-prep to fake "passion".
How permanently stunted are today's programmers which have always collaborated with a compiler or interpreter, and never once written or even looked at assembly?
Very few developers today care about resource usage and resource management. Very few developers even understand that there’s something there to care about.
Things like compilers and LLMs decrease the necessary skill to become a programmer, but neither will decrease the skill or quantities of the most skilled programmers.
Just last night, while looking for clear technical information about MCP integration options for Gemini, I found this Google-written article[1], that -- with a positive, hype-compliant spin -- opens with:
> Have you ever had something on the tip of your tongue, but you weren’t exactly sure how to describe what’s in your mind?
> For developers, this is where "vibe coding " comes in. Vibe coding helps developers achieve their vision with models like Gemini 2.5 Pro to generate code from natural language prompts. Instead of writing every line of code, developers can now describe the desired functionality in plain language. AI translates these "vibes" into your vision.
That's not thinking.
We've even appropriated "vibe" terminology, which means something like emotional gut feel, without having to think about it. (Mostly associated with wake-and-bake stoners, who've self-imposed two-digit IQs and munchies, and who will sometimes speak in terms of "vibes", for lack of further analytic capacity.)
Recognizing that the top killer app for "AI" right now is cheating on homework, the collaborate-with-AI 'skill' is like the well-known collaborate-with-lab-partner. The lab partner who does all the work, while the slacking student learns nothing, and therefore the slacker fails the exam. (But, near-term, the slacker might scrape by with a C- for the class, due to copying the lab portion, and due to an instructor who now just wants to be rid of the hopeless student.)
[1] https://cloud.google.com/blog/products/ai-machine-learning/b...
This isn't really some new concept, the only thing new is that it's being applied to areas that haven't historically had a ton of automation.
Hand-wringing about LLMs and "not thinking" is the same thing that was hand-wrung about students using calculators and not knowing how to do long division. Or using a computer lookup and not knowing how to use the dewey decimal system. Heck, or using an automobile/bicycle and not knowing how to shoe a horse.
People over the last decade have demonstrated they are perfectly capable of generating large quantities of crappy, not-thought-out code all on their own. Just look around you. LLMs democratize the lowest common denominator, and those that are doing sufficiently difficult, nuanced, unique things that they actually need to know what they're doing, will continue to do so.
I don't think LLMs will reduce the abilities of the 10% best software engineers, and I don't think the quality of output of the rest will meaningfully change.
I agree that our field is already full of poo. But, at least with one child, we have a chance to nurture them to be much better than that.
I'll make that argument with enthusiasm and determination.
We're trying to teach a child. That requires things like maintaining interest. Results beat out rigor and fundamentals every time. Teaching primitives is how they lose interest, showing them "this is how you make a game with an LLM, here's the game!" followed by, if they're interested, showing how to change certain things in code, is how they want to learn more.
In a similar vein, MythBusters got more kids into science than any scientific paper ever did, rigor be damned. When you teach a child, you want to emphasize "you, too, can do this!" not "a monad is a monoid in the category of endofunctors".
Let the child's interest guide them and you, not your interest.
What I disagree about is pushbutton generative "AI" popping out the end product.
I want kids to learn by figuring out things as they're building something that they want to build.
And when they can't independently invent a concept or technique that they need for something they're building, you can nudge them. (Example: Their 2D video game screen refreshes are too slow, and now they would be excited to be introduced to double-buffering. And now they'll know exactly why they need it and how it works. So, the next time they need a related graphics improvement, they've had that prior learning experience, and might be able to figure it out on their own.)
Imagine if young Carmack had been plopped down in front of a vibe coding session for Unity or Unreal, stated what he wanted, and it emitted yet another generic 3D first-person shooter. Would he have ever been motivated to innovate anything, and if he was, would he have the cognitive strength and learning skill to do so?
Not fatally, but the answer to that is not zero
Did people who would become programmers become worse programmers?
Or did programming just become more accessible, drawing more mediocre talent and dragging down the average skill level?
I teach them the following:
1. Goal determination - what do you want to do?
2. Context mapping - What is the environment and action space we’re operating in?
3. Problem decomposition - Given The previous how can I chunk the overall space of action into measurable and manageable parts to solve
4. Tool selection - what effector systems can I access and can they solve the subproblems?
5. Structured solution exploration - Now that I know my goal, context, problem heirarchy and tools, how do I create experimental system to progressively solve each subproblem and the intersection between them
Then it’s just running that until you have a solution
This transcends “coding” to more important thing which is holistic alignment of goal (direction) and action capabilities (magnitude) that results in a measured action vector which is discrete and bounded.
This started at a very young age: we gave him access to a windows PC, not a tablet. So by 3 he could log in and get to YouTube kids. This meant that keyboard and mouse and web browser were very comfortable concepts.
We also gave him and his younger brother countless building toys. Meccano. Lego Technic.
A few lessons I’d love to empart:
- you can’t make your kid into this. His younger brother has no interest and is far more about sports. So we nurture that with him instead.
- open ended learning. I’m not sitting down and teaching him. All I do is make sure he has access to the tools, and I unstick him when he’s stuck.
- I connect concepts when I see them. “That’s called a loop. It’s just like that thing you did in Minecraft to make your machine work over and over again.”
- the learning must all be a side effect of having fun. Don’t try to teach programming. Do fun things and fill in the programming toolbox, tool by tool, as they’re needed.
- connect programming to what your kid is passionate about. Programming is a means to an end, not the end itself. My kid loves trains and has a Lego train set. I suggested he use his technic to automate the track switch. I then let him work at it for hours and hours over weeks, giving him breadcrumbs of what to consider next.
for when they grow up =)
It is now a JavaScript platform:
https://turtlespaces.org/
Historical background may be helpful:
https://en.m.wikipedia.org/wiki/Logo_(programming_language)
Smalltalk, as the founding language for object-oriented programming, was originally targeted at children.
https://en.m.wikipedia.org/wiki/Smalltalk
I don't think any operational versions still exist.
Pharo is a cross-platform implementation of the classic Smalltalk-80 programming language and runtime system: https://pharo.org/
Thanks for saying this up front. Worth repeating.
It’s fun for me too since learning to program robots has always been on my bucket list. Chatgpt helps since even though it’s meant to be intuitive, you still run into various issues pretty often, and documentation is scarce. Sending screenshots to o3 works amazingly well to get unstuck.
I think the only way to learn to code is to really limit the use of AI (obvs can speed up some things, but never let him copy and paste from it)
I don't really think there is a substitute for encouraging him to push through without AI tbh.
When he eventually start's vibe coding, it will be like putting a v8 in a Ferrari instead of a VW golf.
It was a slow burner but over the course of four years he ended up learning quite a lot. Now being one of the best programmers in his college.
One of my personal favorite resources is CS Unplugged. [1] It sidesteps any particular language or toolset in favor of pen-and-paper interaction.
[1] https://www.csunplugged.org/
It looks to me like there is consensus for Minecraft and Godot. I expect Minecraft to work on old hardware. How about Godot? Can it be used offline?