I love these suggestions, especially the card game and making their own website.
I had my first real dev job when my son was born and I gave how to teach him code / reading / math a lot of thought. I tried speak and spells, workbooks, little toy pretend computers that had math games etc.
In the end just giving him a raspberry pi with ubuntu, a big kids keyboard and no mouse seems to have been all he ever needs / wants. It boots directly into the Unix shell, I aliased a little speak and spell script I tossed together and some shortcuts to music on youtube. And he doesn't even really need those.
He learned the basics much faster than I expected. Opening python for math, prepending "say" to words to have them read out loud (took some tooling in ubuntu...), control + C, control + W etc all seem to make general sense. And the slowness of the pi seems to help.
Anyway he started reading before turning three and seems to be doing well enough with math and basic variable assignment for whatever that's worth. Helping him make a website and getting him using git seems like a fun next step.
Now if only I could get him to care about anything more than his hotwheels collection...
Hey now if the kid hasn't elevated themselves through 3 FANNG roles by the age of 8 how could they ever make a meaningful impact on the world of ad-tech?
Hot Wheels has cars with NFC chips in them, and they're only about $5 a car. You could teach him how to make a stats tracker to compare his favorite cars, see which are the fastest, and which perform the best over time, with a cheap NFC reader you could place under tracks. You could even get some old-fashioned character LCD displays, make a little scoreboard and teach him how to print the winners on it.
If you're willing to learn to teach him something, it wouldn't even be that hard to get into hardware a little to make programmable tracks, and that'd be a relatively cheap hobby to share with him. Some cheap actuators from Digikey or Mouser and a $250 3D printer (which is an incredible tool to have if you're frequently around children anyway), and not only is he set with skills that'll make so much of his life easier, it'll probably be more interesting to him right now than making a card game.
Remember, hacker culture and everything that's downstream of it (like the free software movement) came about not because people were trying to prepare themselves for the workforce or from ambition, but because people wanted to make their toy trains run on time.
If he likes toy cars, then please, please, please find the intersection of your love of computing and his love of cars. It's not a bad sign that he cares about Hot Wheels, that's actually amazing! There's a lot of cool ways to introduce technology to a love of cars, and the types of projects that exist in the intersection of programming and cars are incredibly useful for understanding computers on an intimate level. You can work on tracks and scoreboards like I mentioned, or you could take his Hot Wheels and help him turn his favorites into RC cars.
If you want to go big, when he gets a bit bigger there are even more projects you could do. A simple ride-on kids' car (think a Power Wheels clone) is completely doable by someone of your vocation. If that seems like a bit too much for you, then you could always help him walk through a tutorial on how to make a self-driving RC car:
I'm not hugely into cars; none of this is stuff that requires knowing about them to help your kid with. Please consider doing so; you seem like a really well-intentioned parent, and taking advantage of a kid's interests really helps when trying to teach them things. Thanks for caring about teaching him computing; genuine enthusiasm to share your love of something with a child can make a world of difference.
As someone who does this regularly as a code club volunteer I'm not sure I see much useful advice there. Honestly the biggest challenge is accepting that within a group of kids the same age there'll be enormous variation in ability and motivation to pick up learning how to code. And what I have no real insight into is whether it even makes any difference in the long run (i.e. how many of the kids that do the whole course go on to make programming a significant part of their lives, or even if they don't, have it genuinely help them in some way).
Still, I know I only got where I am today because my Dad sat down with me at age 9 or 10 and introduced me to programming - something obviously not all parents can do - so hopefully at least a few of these kids will get the same benefit.
Are you able to convey some more general or high-level understanding, such as: "A procedure has a starting point, steps in sequence, possible repeated steps, and an end point." For example, one could start with trying to describe/document how to move physically in a room to get from one place to another. Then suggest, e.g. as a bridge, most computers can only work with a written descriptions of a procedure.
The code club lessons come with fairly explicit instructions that tell the kids what they need to do - mostly they only need help from the tutors when they can't find something (e.g. a particular command in whatever IDE they're using) or work out why they're not getting the expected result (usually because they've mistyped something). The super high level concept of "you have to provide explicit steps for the computer to follow" isn't really the blocker.
A few weeks ago I learned about Hedy (https://hedy.org/). Looks pretty interesting (despite the fact that I'm not a big Python fan).
It is a programming language and a web-based environment which "grows with the user". In the beginning, you can only ask for a user input, print it out (optionally prepending some string) and do very simple turtle graphics (with only right angles). Then new concepts are introduced gradually (variables, lists, loops, conditionals etc.). In the end you have a functional subset of Python.
Also, there are quite a few premade exercises/miniprojects to explore.
Note: I'm neither the author or a contributor of Hedy, I've just learned about it and found it interesting.
I don't see it mentioned and I am bit surprised, but teaching kids how to breakdown "common" tasks into instructions. No programming language needed. Then, introducing edge cases.
I remember a programmer making a video about their child writing instructions to "make p&j" sandwich.
Did you check if you have PB?
What happens if you don't?
Did you put the bread down first? Or are you applying PB to the counter.
That's the imperative programming case. Declarative programming is about defining each part of the final result.
What's a peanut butter and jelly and sandwich (the result)? It's a slice of bread atop a layer of peanut butter atop a layer of jelly atop a slice of bread. Recursively define each part, for instance defining a layer of jelly in terms of manipulated blobs of jelly. Reverse the order of the definitions if using an early-binding language.
(setq p&j-sandwich '(bread-slice peanut-butter-layer jelly-layer bread-slice))
;; TODO work out why jelly layer isn't transferred to sandwich in one piece
(setq bread-slice (with-tool bread-knife (slice bread-loaf)))
(setq jelly-layer (with-tool table-knife (spread jelly-blob)))
...
Disclaimer: I've never eaten nor made a P&J sandwich; please consider this code experimental...
Being made to write out instructions like that sounds like total misery. Maybe not as I haven't seen the video.
I'm a bit sceptical about teaching kids to program, it feels a bit like teaching them plumbing or some or trained skill. Though I'll probably introduce my daughters to it and see if they are interested. If not we can do something else.
Plumbing skills are not a terrible thing to have actually, but I would see this more like teaching literacy and math... basic ability to manipulate data, think logically, and debug your ideas is going to be useful regardless of what field the person might end up in, imho.
Have there been any studies showing, e.g. correlation between having been exposed to programming techniques at an early age and better critical/ logical thinking skills later on in life? I'd be surprised if there were none, but equally I'd wonder how much was really cause and effect, vs kids with inherently more analytical mindsets more likely to opt for and spend time on learning how to code in the first place.
We don't need to make everything kid friendly. There were no fun algebra games, you just did the work. You didn't even understand why the work was useful, you just had to do it.
When kids have the mental faculties advanced enough to learn computer programming, you teach them just like you teach algebra.
Seeing my kid what he does/knows about numbers after watching numberblocks and playing with printouts of those little guys he’s asking for - before knowing how to read - I can’t disagree more.
The best secret of life is that you need to fall in love with practicing what you want to achieve.
There are many different paths to the same goal. Some kids are maybe better off just picking up C documentation and going straight for it. Some are better starting with some web based gamified psuedo language.
I politely disagree. I have used hundreds/thousands of times in my life the "ELI5" method to explain anything and everything from IT security to budgeting, and it helps people understand. It will bore some of the audience in a call, but it will get the job done.
There are varying degrees of simplifying things, from purposely obfuscating in order to look smart or fill out your paper to the required length, to sloppily throwing an explanation together, to carefully removing unnecessary complexity and using terms your audience is familiar with, to oversimplifying to the point where there information you're giving is actually bad. Maybe that last one is what you mean by 'infantilizing '.
Always pick the third option, regardless of who you're talking to, to maximize your chance of getting your point across.
Is it still useful to teach kids how to code? I'm genuinely asking. I am the father of two 12-year-olds and I'm teaching them how to code, but I wonder if it will really be useful in the long run, in a world where there is ChatGPT, AI code assistants, and, most importantly, everything else that will emerge in the coming decade (i.e. english to code and whatnot)
Coding is the 21st century version of what literacy was in the 19th century.
Not everyone back then knew how to read and write, but enough people did to substantially change society. If you could read and write there was work that only you could do in the new economy. At the same time, being literate did not mean you were the new Shakespeare, you were probably using it for something mundane like sending letters on behalf of a business.
Likewise with coding. There will be loads of jobs that only a code literate person can do. It's also quite possible that you don't write any large or important piece of software, your whole life's work might be a bunch of python scripts that glue together other people's contributions.
Knowing how to code is also similar to literacy in another sense. The literate will be the first people to access new ideas. Want to read Das Kapital? Gotta know how to read. Want to know how an AI assistant works? Gotta know how to code.
That's a strange way to frame it. Every skill is useful in some context. As a parent, I think a more productive way to think about it is to ask whether teaching kids anything is in line with your values. For me, I'd prefer if my kids were well rounded from being exposed to many different things, so they can make informed decisions later in life. That means they have lego mindstorms, but if they say they like tennis or they spend time drawing sidescroller games and not twirling to nutcracker ballet videos, then so be it. For some parents, laser focusing on something might be considered preferable.
I'd like to add Robozzle as a suggestion, a robot (turtle like) programming puzzle game, available on both Android and iOS. While simple in operation, the puzzles quickly become very challenging. Stepping through the program execution, with the ability to set breakpoints on the playing grid, feels a little bit like debugging.
Just anecdotal but, some of the 8-10 year olds I know are way into Roblox. When I mentioned I make computers do things some of them jump right to: can you make a game in Roblox. So there's the spark right?
Wish I knew how to build the fire. Is Roblox today like the BBS I was playing with in the 80s?
A solid list, bookmarked. For me, the main challenge is getting kids interested in coding and not discouraging them as they learn. (I have a tendency to correct them too frequently.)
I think some "old-school" games are good for that, cause usually these games are simple and only home one skill at a time, eg: mancala, senet, backgammon, pachisi, mills. Even chess/checkers. Gentle problem solving, some math some resource planning, some chance. Important life fundamentals.
I had my first real dev job when my son was born and I gave how to teach him code / reading / math a lot of thought. I tried speak and spells, workbooks, little toy pretend computers that had math games etc.
In the end just giving him a raspberry pi with ubuntu, a big kids keyboard and no mouse seems to have been all he ever needs / wants. It boots directly into the Unix shell, I aliased a little speak and spell script I tossed together and some shortcuts to music on youtube. And he doesn't even really need those.
He learned the basics much faster than I expected. Opening python for math, prepending "say" to words to have them read out loud (took some tooling in ubuntu...), control + C, control + W etc all seem to make general sense. And the slowness of the pi seems to help.
Anyway he started reading before turning three and seems to be doing well enough with math and basic variable assignment for whatever that's worth. Helping him make a website and getting him using git seems like a fun next step.
Now if only I could get him to care about anything more than his hotwheels collection...