Ask HN: How do you teach you kids about computers and coding?
Please share what tools & approaches you use - it may Scratch, Python, any kids specific like Linux distros, Raspberry Pi or recent products like Lego Boost... Or your experiences with them.. thanks.
70 comments
[ 3.5 ms ] story [ 140 ms ] threadAnother alternative, and I think a strong curriculum could be built around this. Is an intro to systems via Nintendo GameBoy and GBA. Using emulators and custom ROM development. A few college level courses already experiment with this route.
I approached it this way, I bought a book on Scratch Jr so I could get up to speed on it. I walked her through a few of the basics, and then I just let her take over after that.
One other programming related activity we have done is the Learning Resources Code & Go Robot Mouse Activity. She has a lot of fun with this as you have a small mouse you program with simple directions to navigate a maze to find the cheese. It uses a set of cards to help then grasp the steps needed. I switch to not using the cards after a while. We now just step the mouse through the maze manually adding steps as we go.
One other activity to consider is the robot turtles board game. This teaches some basic logic concepts needed in programming.
For an older child, I did help my nephew to learn programming in Python when he was a freshman in high school. I took the approach of having him type in games from the free Python book. I have always though this was a good approach for older kids to get the familiar with the syntax.
Something else I would consider would be a robot that can be programmer with Scratch. While I have not done this yet, I think for kid seeing the physical results of programming via a robot is a powerful way to capture interest.
It feels like a nice mix of Kidpix and Flash, both of which I spent a lot of time with as a youngster (obviously much less of a youngster during the Flash time).
https://boardgamegeek.com/boardgame/18/roborally
The key is fun. The focus is much more on 'building something together' than 'I'll learn you how to code'. I'm pretty sure that if I were to press them into learning how to code it will only put them off. Sometimes we go for weeks without building on the robot, and all of the sudden she will ask me to work on it with her again.
But the most important thing however is to keep it fun. Let the kid choose his own path. ("Eclipse?! Really?! But Vscode is.... Oh well ")
you might want to check out "coderdojo" at a place near you. usually other kids are better teachers to your kid than you are.
your best instrument to teach tech is to wait and take your kid's questions seriously. patience pays.
what age am I talking about? my child wrote programs and apps long before he was able to read or write. pushing as a motivation killer also applies to adults. so I guess, this "advice" is universal.
Also, a day back, Woz made this comment:
"Woz advice on coding for children. Meanwhile, Wozniak cautioned parents to not force coding skills to their wards until the age of 12. He explained that the first 12 years are pivotal and crucial in shaping cognitive and thinking mind. “Coding is very important. It doesn't need to be taught before 12 years."
I'm seriously looking for some thoughts to validate my idea that coding could be started from Kinder garden (as young as when they learn to count numbers)
I was a bit older than 12 when I learned programming with AutoIt, Ren'Py and Blender, but I would absolutely have enjoyed it if I had found out earlier. I didn't learn those because some adult told me to, I found out about them through my friends.
AutoIt is a programming language geared towards automating interaction with GUIs. A friend of mine was using a program written in it to bot in some MMORPG, and being able to control the mouse pointer also lent itself to prank programs we'd send each other. I learned quite a bit just by modifying that original program, and later implemented Gaussian elimination in AutoIt to take care of my math homework.
I learned Ren'Py when another friend showed me a simple visual novel he'd written in it, and I got inspired to write my own. For some aspect of it (I think it was to keep track of health points?) I needed to use Ren'Py's Python scripting, and so I ended up learning a bit of Python.
Later, I was doing a stop-and-go movie with Lego figures together with that same friend. We really wanted to have awesome 3D effects and had heard that it was called animation or something. So I googled it, downloaded Blender, and went through the tutorial on modeling. I mean, how hard could it be, right? I think Blender is somewhat renowned for the complexity of its interface, but at that time every interface was complex for me. After weeks of painstakingly remodeling Lego pieces down to the little notches, we finally had our space battle with lasers, and it was awesome. Later, I repurposed those models for a game using Blender's built-in game engine, and it was easy in comparison (although I still don't fully understand how rotation in 3D space works).
In all of these cases, programming was something I lucked into as part of some other activity. I wanted to do something else, and writing code happened to be easily available as a solution. So I think what a parent can do is give their children the opportunity to play around with lots of different things, and when something they want to do requires a little code, show them how to do it.
Although in the most abstract sense programming is just thinking about what effect a certain sequence of commands has. Like with all kinds of abstract reasoning it can be a good idea to encourage kids to play around with it.
However it's possible that some kids aren't ready, or don't have the motivation, to learn those concepts; and forcing them will only make them hate it more. In that sense programming and mathematics should be considered the same.
I then set up my old Mac with Love 2D and Atom, but he wasn’t interested, because he’d also have to learn about files, directories and the command line.
He spends a lot of time on the iPad, so I recently bought Codea. With a bit of help, he was able to write code to draw some shapes and became very excited about it. I evaluated it myself and was able to make Pong in a few hours. It has loads of examples and can actually be (and has been) used to make quite sophisticated iOS games, right on an iPad. It helps to have a Bluetooth keyboard so the on-screen keyboard doesn’t occupy half the screen.
https://www.kickstarter.com/projects/871405126/turing-tumble...
He was also introduced to QBASIC at school (a year later), and he loves it. There are no INTs to declare, etc. Just your program. And graphics, sound, etc. is so easy to program.
I've recently installed the Lightbot app on my phone for them, and they like it too. It's a series of programming puzzles using a block language where you need to program a robot to move around a circuit and do some actions. It introduces programming concepts (subroutines, loops...) progressively and seem quite fun and challenging.
A few months ago, I let them play with Human Resources Machine, another similar game, but slightly more abstract, and with dark humoured theme. They didn't get the humour, but enjoyed it nonetheless. However, it was a bit too difficult for them, and I had to do most of the challenges for them.
When they get older, I hope to find a way (via emulation?) to have them play Robot Odyssey (cf. http://www.slate.com/articles/technology/bitwise/2014/01/rob... ), though I'm not sure how today's kids would react to a game made in the 80s.
https://argumatronic.com/posts/2016-02-29-child-learns-tuple...
* Teaching a 10-year-old Haskell
https://argumatronic.com/posts/2015-04-08-Haskell-to-10yo.ht...
On the Java version of Minecraft you can get it with the Raspberry Juice mod for bukkit: https://github.com/zhuowei/RaspberryJuice
On the Android version of Minecraft you can use the Raspberry Jam Mod https://play.google.com/store/apps/details?id=mobi.omegacent...
The Minecraft version for the Raspberry Pi is very limited, unfortunately.
https://teachcraft.net/
They run on my NAS so not available to the Internet. I try to teach different things to each of them and hopefully they'll start copying and pasting.
I also created the "guess a number" game in Java with my oldest (~10 y.o.) recently. We started by writing comments explaining what would happen, then I filled in the code and we ran it and single stepped our way through it a few times.
I love the debugger as it helps new coders get a feeling for how the computer "thinks".
Java might seem like a weird language to teach kids but for all its verbosity and comments it ended at less than 50 LOC, is extremely readable and has really good support for single stepping, peeking into variables etc.
They get Scratch in school (and like it), so I wanted to dip their toes into 'real' programming. I thought a lot about it, but decided to start with the interactive shell of Python and let them do basic calculations, variable assignments, etc.
I then went on to simple scripts such as "What is your name?" input, with a print of "Hello <name>"
Next up with be the guess a number game, and go on from there. I want to end up with programming games of course :D
Even back then, other machines did more to push kids into programming. Turn on a C64 or TI-99/4A (what I had) and you were in a BASIC interpreter.
I think reading ability and keyboard skills make a difference to what is possible as well as the stage of cognitive development. Typing is hard even for a kid who can read well - it takes my 7 year old forever to find keys on the keyboard and although it's good for him to learn, I think python would be frustrating for him at the moment (and I know the indentation makes it hard even for older children!) We've had fun making stories in Scratch though and he made a game of his own design with some help from me on the harder bits. We played quite a lot of the board game Robot Turtles when he was younger too, so that's worth looking up for smaller kids, although I have to admit that as an adult I never really enjoyed it massively.
Back in the day, we had no choice: you learned BASIC, and when you realised it was too slow, you learned assembler. I was shown my first ever BASIC program on a Commodore PET by a sixth-form student when I was about 13 or 14. There was no-one to teach you, so you were pretty much on your own. I swear that experience of learning Z80 assembler by typing in the hex or decimal opcodes (I couldn't afford an assembler), was the single most important event of my programming career.
With my kids I was pretty hands-off. Pushing them too hard would probably result in rebellion. But when my son started asking what language he should start with, I found it very hard. We tried Minecraft modding, in Java. Then some Python, which he took to fairly quickly (age 12 or 13). Now he's well into C#, which is a language I'm not even fluent in, because they study it in CS at school. He launched into it full throttle in his spare time and now he's developing a game. He occasionally asks me to help with debugging a tricky problem, which is where I think I'm most useful now.
My daughter is now 12 and she's also interested. She pretty much exhausted Scratch in primary school. I'm trying to introduce her to Python and then Arduino - she wants to build some colour-changing lights for her bedroom, so it's an ideal Arduino project.
I'm trying not to go down the whole pink, let's-make-it-fun, girls-can-code-too stereotype, but since she genuinely wants to build this project I can't really refuse.
The key thing is wait until they feel the need - don't push it onto them too young. There's a whole world of non-programming stuff they need to learn first!
I eventually graduated to doing the same thing - in my case writing out assembly programs on paper, putting the decimal opcodes next to each instruction.
Once the main program was "assembled" you'd then go put in the jump targets - which had to be calculated last, as you didn't know how many bytes each instruction you'd used was until that time.
All my programming started by accident, as the family-computer arrived as a Christmas-present one year. The tape-deck didn't work, so we couldn't load any games, and I was "forced" to read the manual instead. At least back then computers had decent manuals..
When I was in school, I was passionate about Chemistry, fascinated with the idea that how proper composition of chemicals could produce useful compounds until I got to play with actual physical instruments in the lab when I reached high school. I'd decided that I was going to become the best mechanical engineer to ever live (you know childish talks).
Alas, however, I started loving computers more than ever and now they are my life. My point is, Focusing on coding inflates the importance of finding the “right” method to solve a problem rather than the importance of understanding the problem.