My son recently turned 7yo and I have successfully got him interested in programming. We started about half a year ago playing Minecraft and building more and more complicated automated machines. Recently I have added some robots that can be programmed in Scratch and now we have also started writing some simple games in Scratch.
I am not just trying to teach him programming but also show that with a bit of organization and working little bit each day you can achieve pretty huge results. So we created a very simple version of a game. I have then created a document where we are maintaining a listing of functionality we want to add. We then take them one by one, discuss how it can be added to the game and then tick off once it is done.
For Christmas he asked for some programming books ("how to make complicated Minecraft machines, how to write complicated commands and how to make mods").
We plan to do some more complicated robots and also make our own fun mods for Minecraft (as soon as I figure out how to hook up Scratch to recent version of it).
I am trying to not spend too much time on any given day (about 1,5h every day currently) so that ends up still wanting to do more.
I am also doing large part of coding myself and we switch who sits by the editor when he says he knows how to do something. I am trying to keep him enthusiastic by showing constant progress which I think is more important than that he actually does everything by himself.
I have 20 years of development experience so generally programming is not an issue for me.
Please, share your experiences, things that you have tested with your kids that did or did not work. Any tips you have personally tested.
- BASIC, Ruby, Python, Java setups + intros, tutorials.
- LEGO Mindstorms
- Scratch, Squeak
- Coding classes / camps
Note that I "made these things "available" but never pushed. I'd set up the environment, show him to to edit and run the code, and pointed him to tutorials. After some time went by I'd show him the next thing. Rinse and repeat.Worked:
A Texas Instruments programmable calculator. He read the manual, played with it a bit, then found out he could automate some of his homework. Then found out he could make simple games. Then fairly impressive games.
After that, he did a bunch of Minecraft programming and loved it.
Fast forward a decade and he smokes through Advent of Code without breaking a sweat, and is a co-founder and CTO.
I.e. all my efforts to pique interest didn't have any effect that I could see. He had to find his own way to it.
Then we started "programming each other" by telling each other where to go, and I introduced doing multiple steps at once (like "step forward 5 times").
My goal wasn't literally to teach her to program, but just to introduce that way of thinking, which is pretty different from how we normally think in day-to-day life.
She was excited about it, so I got her the Osmo programming kit for iPad. You program a little monster walking around, using physical, scratch-style code blocks. She's been excited about programming the monster every day, and is able to (sometimes) do some short programs of a couple blocks.
If she learns a bit more, my plan is to show her how to program a simple lego robot with scratch, like one that spins a flag when it sees something pink. I love that idea because with 2 lines of code you can make something really happen in the world, plus she'll be able to come up with new ideas for the robot on her own, and learn about the constraints, sensors, and eventually more basic programming logic.
As a mentor; unless the kid wants to go, please don't come :)
So many uninterested kids from helicopter parents. Kids as young as 6 just absolutely clueless and learning nothing.
If you want your kid to program, just buy them an actual computer system with files and a terminal, not some ipad shit, and let them at it. If they code they code. If they don't, you can try teaching them when they're like 13-14 and actually have a bit of brain wattage to back up what you're throwing at them.
It's worth emphasizing to your child the distinction between 'technology exposure' tutorials, and creative work as children tend to care more about making stuff and can find some tutorials a bit tedious. Luckily there are some high quality tutorials out there now, the mid-range and lower quality tutorials will just frustrate them.
Related to that, I would advise you to not let them enroll in any 'technology' classes in school as that will kill their interest since the educators will likely be underwhelming.
Also, at a certain age, if you give them too much attention for their interests they will stop pursuing it, so enjoy the next few years :)
another thing that my 8 year old is really into that surprised me is networks. Explaining how networks work and how he can start a minecraft server for him and his brother to play but his school friends can't because of the "firewall" has him on the edge of his seat hah.
edit: i want to add that i don't bother with explaining programming concepts like object-oriented design or algorithms just very simple cause/effect. Then to simple if condition effect. I get excited and end up overcommunicating and then boring my kids, it's like trying to start a carbureted engine without flooding it. You have to do give them just enough info to get started and hope it catches.
At first my dad put me a bit on CodeAcademy [0] which taught me tons of basics but didn't really get me hooked.
What really got me into coding was by thinking of a way I could use it to build something related to my interests or that would be useful for me.
That seems to be what you're doing with the games by linking it to something he's interested in so that's nice.
It can really be anything though, and you should try to show him the enormous area of things he can do with coding.
In my case I wanted to do my english homework faster, so I tried building a very simplistic program that could find literary devices (metaphors, similes, alliteration) etc... in the literature texts I had to study.
Also you should make sure you don't force it and that the passion and interest comes from him, which seems to be the case with the way he asked for books about coding.
We always had computers typewriters around the house, and I was fascinated by the look, smell, and sound of my father writing. And I just began doing it myself, probably with a small amount of guidance from him around the mechanics.
I ended up getting pretty good at prose by the time I was 9 or 10 and wrote a novella when I 14 (which was thankfully never published or distributed!). I don't write for a living but the skills stayed with me and of course have been very useful in all kinds of avenues.
I think, though, that if I had been encouraged to do 90 minute learning sessions with my father, I wouldn't have been so interested. There was a joy in finding my own path into that world, and if/when I do have children of my own this is something I will keep in mind that there's a fine line between sparking interest, and trying to force an interest.
We took a little detour at one point and I taught her basic skills to navigate around Linux terminal. Files, directories, editors, basic operational stuff.
Then I took another little detour and showed her ropes on git and github.
Then we got back to the python course and now I encouraged her to push everything she practices on her github account which she has been doing since.
Now that the course is over, we have started working on a project that aims to manage personal income tax. I chose that project because it could start simple and can evolve to be as complex as you want it to be. However, ultimately it is all simple arithmetic. The project is going very well so far. We are discovering new things about taxation almost every single day.
We are at a stage where learning vim would really help her so we plan to take another detour next week and start with a vim tutorial until she gets comfortable.
[1] https://help.uis.cam.ac.uk/service/support/training/download...
GameMaker (https://www.yoyogames.com/get) was my gateway drug to programming. It's an environment for making games that covers everything from programming the game logic, to designing game "rooms", the sprites and sounds in one package.
I was introduced to the software by my father at roughly the age of 9 to 11 and we did the introductory tutorial together. After that, I continued messing around mostly on my own.
What in hindsight turned out to be quite brilliant, was that GameMaker supports both drag-and-drop programming and scripting. I was able to start off by using drag-and-drop, but quickly realized that scripting was the way to go for more complex logic. The combined environment made it a rather smooth transition, as I only had to add the scripting part to an otherwise familiar graphical environment.
It seems like GameMaker is still around, so that can definitely be something to check out. Making games is fun and I remember having great times in the community, too.
And even though I prefer it over Python as a language, I had disastrous results teaching Javascript to 12-14 year-olds for light browser games. My intent was to bring kids with signs of early stage addiction to mobiles "onto the other side", by looking at games professionally and with creativity (as much as I could, anyway). Turned out fiddling with async and rAF is really a bad fit for learning basics.
Start with the simple stuff: https://microbit.org/projects/make-it-code-it/
I find games in scratch are complex and require too much programming knowledge to really get something interesting up and running. The micro:bit on the other hand can do interesting lights, sounds, etc with just the drag and drop of a few lines.
1) Hour of Code and Blockly, as well as some Blockly Games, age 5-7
2) Khan Academy JavaScript and processing.js at age 7.
He's pretty awesome at JavaScript now. The programming courses on Khan Academy are great. I will mention your child needs to be ready for it. At that age, a few months one way or the other is huge, as is having the mechanics of typing and mousing.
Next step from there is the book "Code: The Hidden Language of Computer Hardware and Software (Developer Best Practices) " and Nandgame, as well as Micro:bit.
I recommend against Scratch. It's a rabbithole that goes in the wrong direction. You get stuck in a local minimum, where it's really hard to move onto real programming, and within Scratch, there are a lot of local minima (move to random position).
For example, I was showing my 7 year old daughter the other night how she could automate her Roblox character with a simple AppleScript in order to move it every so often so that it could gain points while avoiding timeout from being idle, all while she could go and do other things around home. She smiled pretty big.
In short, IME showing how programming helps achieve an outcome has worked best. A general interest may compliment.
Now my daughter is five and plays with Scratch Jr. She makes short clips of characters moving around, recording and timing the characters voices, allowing presents and balloons to magically appear, she's not tying in code but instead uses "graphical programming blocks". She also likes codeSpark.
My kids do not distinguish programming from play. I intend to keep up programming = play which I will later transition to a more advanced version of, "I want to make a thing, writing a program will allow me make it." than what my daughter is currently doing. Make it fun, and don't do much in the way of suggestions/feedback, just let them know you'll answer any questions and let them make mistakes.
Example session:
>>>number_of_passengers_travelling=672
>>>number_of_passengers_got_down=21
>>>total_remaining=number_of_passengers_travelling-number_of_passengers_got_down
>>>print(total)
His only question was, do I have to type so much and I said yes. There is no way I am letting my kid name variables v1 and v2 :)
I remember at around 12 the Comcast repairman told me "the real money is in software". I thought - software, what's that? Then I probably went to work on our garden or something.
I didn't start coding until around 16, and that was because I had old computers that I wanted to use, and didn't really know about pirating windows, so begins using Linux, running PHP webservers ETC.
Point is - figure out what they enjoy and help them enjoy it.
I couldn't even get friends that want to learn to learn, even when they are practically homeless.
It's hard for some of us to fathom, but some people just don't have the drive to do this kind of thing. You also can't force it, all you can do is give context.
I also gave him a first mental model of how it works. You have a genie, he sees you want to make a label called "height" and put a integer, 5, in it. He decrements it by 1, places a tower of the height, walks over, etc... until you have a 5,4,3,2,1 triangle.
But I don't try to push it too much. I think it's good at age 7 or 8 to be exposed slightly, but unless your kid is a prodigy it ain't gonna click for a while. We just want to marinate them gently for a bit until it hits them.
MC is good because he plays it a lot and occasionally it comes up that you want to be able to do something quickly instead of placing hundreds of blocks. Or you want to copy something you built. The MC Python code allows you to write a script that does this.
Most of the time I don't have many hours so what I try is to inspire by creating something in a few lines and show what it is all about: input, output, calculations, loops and branching and how we can have fun with it.
I've used the tools at hand:
20 years ago I used VBA (Visual Basic for Applications) and made a Caesar Cipher, ran it in a debugger.
When I taught teenagers in school I mostly used autohotkey.
Later I've used Go or Java, even with JSF(!) when that was what I was using at the time.
Mostly I try to get as fast as possible to the point were something works, then set a breakpoint and single step through it.
One favourite of mine is the good old guessing game that hasn't changed that much since BASIC on C64:
> Write a number from 1 to 100:
64
> My number is lower, Try again.
> Write a number from 1 to 100:
37
> My number is higher, Try again.
> Write a number from 1 to 100:
...
etc etc
...
You gueesed it!
This introduces output, input, loops and if-statements, and you can let the kids have fun with the debugger, looking at the secret number in memory to guess it correctly at first try etc. It can also be done easily in most mainstream languages and frameworks that you have a working environment for, from VBA through WinForms through Java or Python console apps to serverside or frontend web applications.Also FWIW: Kids around here (Norway) often have some programming at school it seems - even before grade 7. It is mostly scratch variants I think, but I'm also happy to see that at least some teachers have shown them how to open the console in the browser (Inspect Element) and have fun by "hacking" the html and css.
Daughter did some scratch and some web programming and then got bored.
Lego Mindstorms - son built through the robots that were included and then got bored.
Hour of code (both) - did some basic exercises and then got bored.
Both love to build stuff in Minecraft and enjoy making quite elaborate machines there (elaborate in the context of Minecraft).
Both are doing fairly well in school. Programming just does not seem to be intrinsically interesting to them. And that's just fine.
Basic language skills and math is far more important for professionals when they get to workforce rather than low level tinkering in the general context. If they don't show inbuilt desire to program I don't see any reason why I should push them there. I started programming only after turning 20 and have a pretty good career at it. If you love programming it's never too late to start :)
I basically let her follow her own path, I show her how I do something then if she’s keen to try it I stick her in front of the keyboard and she does it herself with me verbally guiding (but never reaching over to take control, something I personally think is important).
She loves hanging out in my workshop and watching me prototype electronics or work on my own game dev or tinker on other hardware/software projects, and she knows at any time she can have a go (and she does, regularly).
Talk to them often about code, technology etc.One thing that helped IMHO spending a lot of time in solving math problems (AOPS) , which made think through hard problems and had to grind through solutions which took time. My kids love Big Bang Theory and anything that is geeky. I talk to them about the latest things that are happening in tech like the recent hack and the malware.
I recently read this book https://www.amazon.com/But-How-Know-Principles-Computers-ebo... and sat and drew with my kids and,or , xor and nand gates.Building Mindcraft MOD can be another fun project.
Be patient and it helps a lot IMO.
Good luck :)
I've been running volunteer computer clubs at schools my daughters attend, pre-covid anyway. I've also run a summer immersion program for basic software design principles using the Scratch language for Girls Who Code. We've played with Adafruit Circuit Playground dev boards, written a "choose your own adventure" engine with Python, and added pixel graphics to some simple Javascript games, where the kids drew animation frames in a barely functional editor I wrote.
The first thing I'd call out is that 7 is really young. 5th grade is the point where kids can start to "get it" beyond basic maze problem solving things (e.g., code.org's Minecraft puzzle - hop Alex around the creeper and into the house). Since you're a dev, and he's enthused about it already, he can probably flex those muscles a little early.
Beyond age, the complexity of what you're doing matters a lot. Kids want to see something get on the screen right away, and they want to make a code change that changes what it does. Building a program from scratch is a chore, and something as simple to us as nested if statements will throw them for a loop.
The most success I had was building a simple program without them, and letting them experiment with changing values. That may sound like cheating, but it gets the gears turning, and before too long they're able to follow along with making a broader logic change, and soon enough even following along with you adding a new feature.
I was in a classroom setting with a bunch of kids, and they tended to like being in small groups and comparing notes, or play each others games.
Sideways thinking is important. For example, the main draw of Circuit Playground is making the LEDs do things, but they also have an accelerometer. A good exercise was figuring out how to read the tilt position, and figure out which light was lowest, and light up just that one. Instant fidget spinner. Building on that, I threw them for a loop by using the same principle where the tilt was input to a computer program. Suddenly the thing they were programming before to flash lights was now a game controller.
Keep it fun, let him screw around too long on things he builds instead of learning software engineering at an "acceptable" rate. He can learn fast, but complexity will probably be a struggle, so growing slowly is just fine. Encourage him to explore concepts from different angles.
Hope that helps.
It's a picture book that tells a story with C programs that represent real-life situations. It teaches C programming with the code examples that make up the story. It has full-page illustrations like a normal picture book!
I'm writing a Python version now: https://www.kickstarter.com/projects/914595512/a-day-in-code...
I hope these are fun ways for kids to get started in programming. :)
What I would say is that 7 is still very young - the important thing at this age is that they are enjoying it, which it sounds like your son is and with you as a mentor, I don't think you can go too far wrong. If you weren't a programmer, I might be pointing you in various directions but don't think I need to.
I'm mostly thinking about resources that might be helpful. It's worth being aware that on the Raspberry Pi there is a Python API which might be a good way to introduce Python for a Minecraft fan. There are some articles about in old issues of Hello World magazine (PDFs available for free here: https://helloworld.raspberrypi.org/issues). You might find the magazine interesting generally. There's also a book Adventures in Minecraft by Martin O'Hanlan and David Whale. Typing ability is one of the big issues with python at that age though I find (that and the ability to make syntax errors which you don't get in Scratch!).
In terms of Scratch, there's the Code Club curriculum https://projects.raspberrypi.org/en/codeclub which isn't perfect, but is fairly well road-tested.
The BBC Microbit is also fun and not too expensive if you are looking for something a bit different and has a visual programming interface. I prefer that to lots of the robot kits etc. out there because it's so flexible and you can extend it into electronics if you want to. Having said that Lego Boost went done extremely well with our boys and is well thought through, but not cheap.
But the important thing at this age is that they enjoy it, so I think there's an art in terms of following what interests them and encouraging them with that.
I can also recommend the classic book "Mindstorms: Children, Computers, and Powerful Ideas" by Seymour Papert, it talks about the LOGO turtle and has some really powerful ideas about empathy in general, with a special case for thinking from the perspective of a machine.
"Haaarg, world!" (writing a vampire-themed number-guessing game with a six-year-old): http://davidbau.com/archives/2005/07/29/haaarg_world.html
Madlibs with a 13-Year-Old: https://nedbatchelder.com/text/madlibs.html
He didn't seem to take much more interest in programming after mastering that, but he did eventually take interest in chess. The reason is that we borrowed a bunch of chess books from the library and he would go read them whenever he was bored, and he would play with his grandpa to try to apply the tricks he was reading about. Point being that having self-study and tight feedback loops seem to help in acquiring proficiency in a skill.
Personally, after the most beginner level, I'd start to move away from using game development as a motivator for learning programming simply because after some threshold, the math requirements ramp up substantially (e.g. implementing jumping in a side-scroller requires middle school level math at a very bare minimum). In my own journey, I've found that web development (using only the most vanilla subset of technologies) was a relatively gentle way to get into programming. The syntax is relatively forgiving, the building blocks are high level enough to allow easy creation of interesting interactive things, the built-in tooling in browsers nowadays are amazing and the tight feedback loop is there.
YMMV
The length of our sessions is two hours. The beginning of a session always starts with a recap of the previous. Asking some questions to make sure he has the correct understanding.
He always types in everything. I never touch the keyboard/mouse.
We briefly tried GameMaker Studio 2, however we had no prior experience and finding out what functions were needed or called made it a high friction experience.
He has been playing Minecraft since a young age, and creates elaborate redstone mechanisms. I like how this mixes creativity, spatial planning, and boolean logic, and doesn't require learning a new UI or language.
Most recently we tried creating a Minecraft mod in Java using Forge. I cannot state strongly enough: do not do this. The Forge architecture is fundamentally broken, whereby it adds some functionality but otherwise forces you to code directly against decompiled Java classes.
Most tutorials only work with a specific version of Forge/Minecraft. There are no release notes or documentation, because there is no API. (To be fair, the Forge aspect is documented, though I only found it useful once I already knew what it was trying to explain.)
So what started out as an exciting father-son project became something I dreaded.
My kid we played with scratch for a bit and she had fun making some games but it fizzled out after a few weeks. No real love. I gave up. Maybe I'll try again in a few years.
There are coding classes and they're all very popular but to me it seems pushy parents signing up their children, none of them seem to enjoy it.
You can't quite hook up Scratch itself to Minecraft (not that I know of, at least), but if you want to use Minecraft as a backbone for this kind of education, you might be interested in Pneumaticcraft, which includes little programmable drones that are programmed using a simple mockup of scratch (https://www.curseforge.com/minecraft/mc-mods/pneumaticcraft-...) or ComputerCraft, which tries to emulate shell scripting and lua in particular (https://www.curseforge.com/minecraft/mc-mods/cc-tweaked). In the future, if you wanted to teach him Java, you could have him develop mods himself through the Spigot, Forge, or Fabric modding APIs.
My 8/9yo daughter really got hooked, and since then I've bought all kinds of logic gates, switches, timers, flipflops etc...
I use the videos from Ben Eater as inspiration but I haven't told my daughter that you can build a programmable CPU using this stuff. I don't want to spoil the surprise.
After learning binary numbers, I asked her if she could build a circuit to add two digits. She designed her own version of a full adder, chained 4 of them together, and now has her own 4-bit calculator.
The cool thing is that she will explain it in detail to anybody who wants to listen. But she is also quickly discovering that modt people don't know binary...
What I like most about this is that she is now hacking independently, and having here own ideas. At some point I might teach her some formulas, but she hasn't shown interest there. And the occasional LED burning up isn't going to make me bankrupt (-;
Tl;dr: breadboard electronics is cool, worked with my 9yo daughter
1. where I live they were very expensive at the time and so very rare
2. Primarily I wanted to play games on them (things like Heroes II on Intel 386)
At some point I had enough of games and as a side effect I had to reinstall my system so many times (thanks to win-cih and other viruses) that I started thinking about building my own OS. Childish dreams :) but it got me to C programming and that's how it started for me.
So now, decades later, I have my own children and I think how on Earth am I going to get them attracted to technology when it's sooo mainstream that it's not mysterious anymore. It does not feel like adventure to my children, it's their environment.
So instead of thinking much I started with things I remember from my childhood - simple instruction-less lego bricks, or more modern geomag, whatever else that comes without ikea-type instruction so my children can just build stuff. I'm yet to think the step-two.
Son also recently bought with his own money a Arduino starter kid off amazon. You can get an arduino, LCD, servo, LEDs, etc. for 30-40$. We've taken it a step at a time and go through various concepts, etc. For example, I talked to him about 'rubber duck debugging' (ie explain the program to a rubber duck or plus toy line by line), semicolons, code blocks, etc. This has been great for learning real C and tinkering with electronics.
I plan to start them on basic web stuff on glitch.me sometime. That should let them build simple websites etc. for free.
He has made videos and animations and I'm most shocked by his ability to debug his programs so well. I will give him tips every now and then, especially if he runs into problems, but I largely just let him do whatever he wants.
I never forced this on him, it's something he enjoys immensely. I myself didn't learn how to program until after graduating from college, so I know how little value learning programming at an early age is, except as a form of enjoyment.
He asked to learn Python but I refused, since I find it weird that he would be learning the same language that I myself am using to earn a living! But the upside is I can always outsource my work to him while I relax. Seriously though, I will teach him when he's ready but right now there's no use case for him to learn.
I'm not good at design so I picked the bird from flappy bird and the colors from 2048. I will probably need to change that. Also I started the project in 2014 and bought the domain in 2018, but now there's a trademarked app with the same name in the app store. Will probably need to change the name too.
Too bad this thread pops up now, next week the app would be more impressive ;)
Thonny http://thonny.org is fun browser based tool for learning things as simple as turtle graphics (anyone else start with LOGO?) or even up to more fully developed programs.
My kid and some of her friends did some video game design using the "Bloxels" game, but the (free) app makes the actual box of color pixels mostly irrelevant. I think this is a great way to think of tile based gaming structure and layout in a GUI format without the burden of command line. It's the same sort of appeal as Minecraft target audiences.
So my advice: Help him to understand that when an answer to a problem is not visible, it doesn't mean he's dumb, etc. It means he doesn't have the right puzzle piece of information, and needs to find it first. (i.e. a formula, code block, etc.) Be ok with not knowing the answer, and be ok that he will need to learn in order to apply knowledge (like puzzle pieces) to the problem.
The challenge was that actually programming was apparently not his interest. He was more interested in story and puzzle design, and as he got older those interests expanded while programming just completely fell away.
Most people could program if they wanted, assuming they had an adequate teacher. But if they do not have the desire and drive, then it's not going to happen.
Edit - now I also recall that before the Python game effort, I got him started on Scratch, gave him a goal to make a simple Mario clone, and left him to it. A day later, he had made good progress but quickly lost interest and no longer wanted to work on it or talk about it.
If a kid is bored, they'll think anything is fun. Key is to have a video game schedule; before that, "technology" is off limits. But the loophole is to allow access to certain apps (blender, godot, krita, puzzles, etc) before tech schedule if it doesn't conflict with daily responsibilities such as homework. None of these were forced but encouraged indirectly. Again, if a kid doesn't get hook on instant gratification with passive consumption of entertainment, the change is big your child will turn to exploration when bored...programming might be the natural direction given light encouragement.
My older son is much more interested in mechanical engineering so I'm mentoring his robotics team for programming.
My kid is 7. He can't really code alone, but he can do nontrivial modifications to Scratch programs based on trial and error, he can create very simple but visually interesting p5js apps like this: https://editor.p5js.org/skinner/sketches/xjUwFm1pF , and he enjoys a lot being the product designer when we create more complex p5js apps like this: https://editor.p5js.org/skinner/sketches/bPh8JRHrV .
I could tell from an early age that my son wasn’t interested in coding. But still I showed him what I did and the basics of programming. In high school when he had a class that required Java programming, I helped with the assignment. But it was always drudgery.
Eventually I convinced him to look into engineering professions and he went for a year to a top engineering school in environmental engineering. But he never had an engineer’s mind.
He switched schools, got a degree in biology and now works with animals.
I knew he would most likely work with animals from the age of five. I just wanted him to see other options. He’s very, very happy in his profession and that’s rewarding to see.
I have taught my oldest son programming via Scratch, Python, a Raspberry Pi robot and bits of Khan Academy and Code.org. He started about 7 I think, but I've always been really careful to ensure that the interest in it is coming from him and not from me. He asks me to teach him and I do.
I think with all things like this, you have to ask what the opportunity cost is. What is he not learning because he's spending the time doing this?
Because of this I figured I wouldn't force him to learn programming, rather nudge him towards it. I bought him a Tynker membership and he seems to enjoy that. It seems like a fun, gentle introduction into programming.
Their video walkthroughs explain everything step-by-step. They keep it very basic and assume no prior knowledge.
Our 7 year old had a really basic Roblox obby (obstacle course) set up in no time. We played the videos on the iPad, the Roblox dev environment running on my Macbook Pro. That way he could easily go back through the video if he missed something.
The courses are worth the money.
In between unity and codeacademy I tried a bunch of books but none of them really got me to understand what was happening so I didn't learn much from them.
Sometimes putting someone in a situation where they have to solve a complicated problem is the best way to get them to learn.
and I mean wait. I have seen intelligent parents push their kids and really getting them annoyed and thus unwilling to learn stuff.
very good for questions you can not answer yourself is https://zen.coderdojo.com/find here, kids can (but don't have to) work on their own projects, ask highly qualified experts and -- even more importantly -- watch other kids working on their projects. plus: I have seen 6 year old kids presenting their project to 150 people at the coderdojo without even realizing what skill they acquired.
it boils down to 3 aspects: Mastery, Autonomy and Purpose
from my "teaching experience" with adults, giving the responsability to the learner is the important part. I hold seminars starting with an empty document. then I ask people to ask questions, otherwise the seminar would be over within the next 10 minutes. people instantly wake up and start to take responsability.
She also uses it at school, and she regularly enjoys working with it on her own.
Because she seems to go more toward the graphical creative side, I made her work on the logo of a personal project I work on at the moment, and she did enjoy it a lot.
Sometimes I ask her to edit some c++ code I work on and see how the result is when running the code from Xcode; we have a lot of fun doing that!
They talk about setting up the environment, making it exciting for the kids to come and play, creating expectations, letting kids figure out instead of always answering every question, etc.
I had a Tomy Tutor computer that I made my mom enter BASIC programs into, but she did not have any development experience.
I really like your to-do list to keep track of accomplishments and stay within scope.
It’s early days yet ;)
I'm not a parent (I just graduated) and have not tested my thoughts above. It's also not a direct response at OP, more of something I will definitely keep at the back of my mind. Empathy.
Mostly helpful was that I had a 386, QBASIC and GORILLA.BAS, but not much else. No games and no internet
Your deeply thought out discipline and equally well balanced enthusiasm is a model that instantly resonates with me. Thanks for sharing.
I'll share my thoughts, at your invitation, with a disclaimer: My fathering strategy is based largely on my lived experience - because it's what worked for me - and I'm hoping to repeat it with my daughters.
For context: I have 25 years of programming experience. Started when I was 11. My folks didn't even know how to turn a computer on, let alone enforce an educational playtime environment. But in my disk-hunting solace, I discovered that DOS 6.22 came pre-installed with this game called Gorillas, and I soon reverse engineered GORILLA.BAS in the pursuit of red bananas. Next thing I knew, I was implementing NeHe's OpenGL tuts, and by age 21, I was building database integration layers for a bunch of local companies - which over time evolved into the company I now run, which has provided my wife and I with a stable source of freedom-providing income for many years.
How is any of this relevant!?
We all want to be successful, and we all have personal definitions of success. I'm happy to be enjoying mine. And yeah, I'm a dad, so I want my girls to have that same level of success. Which in turn guides my fathering strategy.
When I first began reflecting on how to best raise them, I thought about my lived experience as a kid. I was lucky to discover my passion (Zero Cool had something to do with it), but what is important is that I discovered a passion. And then what is equally important is that I had tons of time to pursue my passion at my own pace. My folks were always right there - so I felt safe - but they never interrupted me. Then sometime in my teens I had a vision for a software company and the rest is history. Being exposed to successful and inspirational uncles from a young age helped form my world view extensively.
So back to your boy, and how I raise my girls (3 and 6): On a daily basis I expose them to as many different experiences as possible - be they arts, crafts, puzzles, and outdoor fitness - and crucially, I give them space - complete freedom - to pursue knowledge of the world around them at their own pace, based on wherever their interest leads them.
In other words my sole job is to create this safe, free, curiosity-breeding environment, and to guide them only when they have questions - ultimately allowing them the freedom to lead and teach themselves.
Oh and none of this disciplined routine stuff. This is all day. Every day. My wife and I take turns (mostly to give each other space to pursue our respective careers - she's a healthcare worker - 2020 was rough). We believe that our taking turns has the benefit that our girls get two completely different styles of parenting, which we think will help teach them to adapt. Of course we parent them together too - bath time is the most fun, and my rendition of Let it Snow is the stuff of legends.
So far we have learnt that our 3 year old is very peaceful. She's quite serious too - which I absolutely love (I've always been accused of looking too serious). She takes in her local environment with an exploration of every one of her senses, intently. Lately I've been exposing her to an abacus, which is proving to be a recurring interest. As for my 6 year old, she isn't as smart as her sister, but hearing her belt the lyrics to Frozen when I return home from my early morning row puts a joy in my step for the rest of the day that I suspect only other dads will understand. Does this mean performing is her passion? I reckon it's still too early to tell - but perhaps it is, so I take delight in listening to her sing in the car, and she takes delight in singing out the window as we drive past our eternally patient neighbours.
So may I ask you - how did you figure out that your boy's passion lies in programming? Or perhaps it would be more fair to ask, so that I may better understand your point of view - what is your goal with your parenting strategy?
If programming is indeed your boy's authentic passion, great! If not, well, you're obviously brilliant, so I have no doubt that you'll figure out his passion(s) one day. But I do think his having the freedom to play independently is critical.
With my girls, I often have to fight the urges I have to steer their learning in an effort to optimise their pursuit of each potential passion. But over time, I've become somewhat of a zen master at it. I now relish in the opportunity I have to witness them as they find themselves.
Heck, I hope it works!
Good luck with your boy. He does sound brilliant. I deeply respect the responsibility you mindfully bear.
It was very slow at first, and the key was helping him do what he wanted to quickly without having to mess around too much. He just needed a short feedback loop. His attention span was pretty small, but he was really into it. Scratch Junior on the iPad was a good way to start before moving to the computer with the mouse and keyboard. If he wanted to do something and I didn't know how right away, I'd figure it out later and then next time we sat down I could show him the easy way to do it.
After a while he started learning more and more and eventually played with every block to see how it worked. I also showed him how to look at other projects in the community. When he got farther along, this really helped him. He could see how others built platformer engines and other things, and then adapt them to his own projects.
I had the same idea as you with making a plan, writing it down on paper, and then going to the computer. This really didn't work. He just needed time to play and explore with the tools and get better and better with them until they became natural. Now, for more complicated things, he will write down notes on paper, but he still just goes at it on the computer for a lot of problems.
Finding the next step after Scratch was a challenge. We did some JavaScript together. He would understand it if we walked through it side by side. He could modify some of the code, but it's really asking a lot to get up and running with HTML, CSS, and JS along with a console, and editor, and browser to debug. It's too many moving parts.
So I worked on finding an all-in-one IDE tool for him. We tried Unity which was too complicated. PICO-8 which was close to being a fit, but a tough transition from block programming to typing out code. We tried Fuze4 on the Switch with a keyboard, but never went past the basics. Ultimately, we found GameMaker Studio from YoYo Games to be a great next step. It did take some effort, but they have block programming and some similar concepts to Scratch. It is more advanced and somewhere between Scratch and Unity, but it has stuck well. He is experimenting and building more and more complicated games. He is constantly asking for game ideas and wanting to share how he programmed one thing or another. I'll give him ideas by mixing together concepts from different games. Sometimes he'll just have fun re-implementing a game he saw a YouTuber play. Right now, he's building his own Snakebird. Listening to how he solved things really keeps him excited about it.
A couple months ago he really impressed me. He wanted to make Minecraft mods so he searched for some tools, ended up finding MCreator (https://mcreator.net/), downloaded it, and got it running all on his own. I've looked into it a little since, and this is a really great next step if your kid wants to build Minecraft mods. It's like Scratch for Minecraft mods. Block programming etc. It's open source and looking for contributors. Check it out.
He'll also get into anything that has a level editor. He loved the editor for the iPad game Badland. He is really into Mario Maker 2 now. Now that I think about it, the Badland editor probably helped quite a bit in the transition from Scratch to GameMaker.
Another tip is make sure to set some time aside for creating. We used to do screen time and off-screen time, but my kids started to just watch their favorite YouTubers or play the same games (Minecraft and Terraria). So now we have screen time, creative time, and off-screen time. During creative time they can be on the computer or iPad, but only using a subset of programs that I've deemed "creative". For my 13yo, that's Gamemaker or MCreator. For my 7yo, that's using redstone in Minecraft or other educational type content. He has some music making apps he enjoys.
My 7yo and 13yo are a quite a bit different with this. My older son got into all of it very early and really enjoyed it. The 7yo doesn't have the same interest - and that's okay. I'm not going to force it, but I will nudge every now and then to make sure we've at least tried different things.
- Scratch (https://scratch.mit.edu)
- Swift Playgrounds for iPad
- Mario Maker (Nintendo Switch version)
I haven't given my boys any pressure to code yet (they are only 8, 6, and 3) but the oldest one has a natural interest, it seems, and that seems to be making the middle one interested too.
The oldest got his start with a local after-school class where they make robots out of lego-like blocks with motors and program simple behaviors like driving around, drawing pictures. Then his brother also wanted to. The older one has now graduated to writing 2D platformer games with Scratch at that class — one day I noticed they were just logging into the regular free Scratch, and he knew his login and password, so he now logs in from home after school to work on it sometimes.
That class is still like "drag blocks around to make loops and conditionals" but he later found the Swift Playgrounds app on iPad and worked through those exercises. That is a lot more textual, and you learn basic constructs like variables, for loops, if/else, and functions.
And he learned somehow very quick that there is a high success rate of postponing bedtime by saying, "OK, but wait, just let me debug this bug in my program a bit more." ;-)
His 6-year-old brother seems to be following in his footsteps, not interested in Swift Playgrounds yet (if ever) but keenly interested in replicating and then improving on his older brother's Mario Maker levels, and he is interested in the games his older brother is making at the class (where he himself is still doing the robot making course) and he intends to do that same course next year.
The 3-year-old's programming is still limited to standing in front of the TV and shouting "HEY SIRI TV OFFFFFF!!!!!"
I'm a life-long software engineer and intend to keep doing that, so it is gratifying to see them doing this. As some other people have said in this thread, as a parent you can't (or shouldn't) try to "make them become software engineers" but at the same time, demanding basic competence in programming (e.g. being able to write a program to do some kind of calculations on a CVS credit card statement, and debug that in a graphical debugger) seems to me akin to, say, making sure your kids learn how to swim.
My kids understand (well, the older two at least, the little one maybe later) that they will be expected to be able to swim competently, read rudimentary sheet music and be able to reproduce it on a piano keyboard, ride a bicycle, safely operate an automobile, and write software programs at a competent level for their age.
They don't need to be spectacular at any of those, or pursue a career relating to them; they don't even need to be interested. But I think those are basic human competencies, and it is fine to require your kids to achieve them.
I first learned programming when I was 7, drawing a cube in Logo on a Mac Plus. I taught myself programming when I was 11, writing AppleScript to rip music from an iPod and download the Bible and Shakespeare books, and turn them into 1000-character Notes so I could share my book with classmates who forgot theirs. Yes, I used eBooks in school in 2003.
These notes are just a messy summary, which I'd like to turn into a real curriculum. Some of them were surprisingly fun for all of us (Escargot MSN messenger, binary morse code to send a smiley face using flashing lights, and drawing the result on squared paper). Now they watch a lot of YouTube, but the need to search for things on Google is motivating the 7 year old that reading/writing/typing is actually important.
Done: Google Chrome. Bookmarks. Save image. Age of Empires. Worms. Mahjong, Solitaire, eSheep, Asteroid, Alien Force, Bejeweled, stressreducers. Satellites, rocket ships, Lego. Rummikub. Connect 4. Slime, unicorn poo cleaning game. Dancing robot. YouTube Tayo, Miniforce, PJ masks, watchcar, Kaycee and Rachel. Google Images. Escargot MSN messenger server to teach typing. Anna discovered backgrounds, emoticons, nudges, fonts by herself. Your/you're. World map on paper. Maths homework +-*/, >,<,=. Roman numerals. Binary. Additive and subtractive colour mixing. Google doodle for Mother's Day. North Korea: Crossing, friends. Old photos of me, rocket designs, ex-girlfriends. NASA. Kid Pix. Birthdays, contact phone numbers in paper book. Narwhals song. Nyan cat. The Japanese Tradition sushi. Princess Bride. How To Train Your Dragon. Copyright (Charlieissocoollike magic mars bars). TPB, rar. Writing letters, making cards. Drawing stegosaurus. English jokes. External mouse. USB drive. External screen. Headphones. Power bank, USB phone charging. How networks send messages to servers (big computer, bigger than a rocket ship). Wires in walls, under roads, WiFi to space to talk to satellites. My work is building servers. Minecraft. Printing, scanning. Line rider. Pacman, snake, breakout, pinball Webtoons Custom icon design. MS Office, PS Reading on laptop screen: Comics, Bible. Chatterbox
Difference between battery and power supply. Jokes emails, short jokes Reddit. FML? TED. Weebl. Minesweeper. Pic slider with photo of me. Bluestacks. Teach Kid Pix again with printer, Paint, PhotoShop to make line drawings for colouring. Teach Logo. Play with it. Google maps for navigation, Google Earth for satellite pictures. Wikipedia about Harry Potter. Web server. Run Pingtype. Teach basic HTML. Then Wordpress.org. Perhaps PHPBB? Field trip to server farm, observatory. Rocket Lab? Build flashing red and blue lights with LEDs and put them on toys. Computer hardware repair? Fit Win7 ultimate IDE disk to desktop PC. YouTube ripping. Music in iTunes. Movies in Kodi? Or VLC? Music creation? Copying photos from phone. Organising photos on computer. KMart, eBay, Craigslist, Amazon online shops. Writing programs beyond Logo. Some JavaScript game; Python web scraping. Charities: WWF, Greenpeace, Amnesty International, UNHCR, UNICEF. Google Drive, Dropbox only after having an email account. Outlook calendar, contacts? For all Anna's animals: Reirei, Titi, Snowy, Bunbun, Koaly, baby koaly, Annabelle, Kang Karen, Liky, Kitty, Uni. Writing documents in Word and printing them. Making graphs in Excel. PowerPoint presentations: lyrics, slides, photos. Typing Chinese, Korean. Lightbulb, power sockets, adaptors. Veggietales, Sesame Street
Advanced: not just "good with computers" but actually a dev. Windows: reinstalling, drivers, certificates. Linux: ssh, nano, cat, echo, mv, cp, chmod, tar, sudo. Mac: Time Machine, AppleScript Networking: dd-wrt, ipconfig, DNS, hosts file. TCP sockets. Hardware: common voltages: 1.5, 5, 12, 220. Electroboom. Soldering. Finding V+ and GND. Tracing faults. Virtual machines. Jailbreaking, rooting. XKCD, Hacker News. IRC. YouTube uploads, live streaming. OBS. Audio feedback. Imagemagick, ffmpeg. Tableau, PowerBI
These kinds of things can be used for interviews, not only education.
Bitmap graphics A1, D1, ... smiley face Code.org is logo Morse code, binary
Numberblocks YouTube Babybus super panda youtube Toca Life for Android. Among Us on Android. WeChat. Mathletics.
I have three kids and none of them are interested in programming.
It's fine to support and encourage something your kids are interested in, and to give them opportunities to try things and discover those interests. But be careful you're not pushing them into something just because you like it. Your kids are independent human beings and may be interested in very different things than you are, or than their siblings are.