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...
he's a kid, es supposed to care more about that than anything else.
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.
https://en.wikipedia.org/wiki/Tech_Model_Railroad_Club
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.
https://hackaday.com/2020/08/12/scratch-build-of-this-tiny-r...
https://hackaday.com/2021/04/23/modding-a-hot-wheels-car-int...
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.
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.
https://hn.algolia.com/?dateRange=all&page=0&prefix=false&qu...
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.
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...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.
I would also add to this list: controlling room light colors or modifying websites you visit.
For people new to code, seeing results immediately is very important. All the theory, printlns, etc, it can be hard to see how it's useful.
When kids have the mental faculties advanced enough to learn computer programming, you teach them just like you teach algebra.
The best secret of life is that you need to fall in love with practicing what you want to achieve.
There is no better way than through play.
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.
Al Sweigart wrote a nice tutorial here: https://github.com/asweigart/simple-turtle-tutorial-for-pyth...
Turns out that pyturtle has a nice beginner friendly interface with global functions (I overlooked it at first). The library makes this on the fly with a nice trick: https://github.com/python/cpython/blob/f978a79130133de1cf264...
they make a global function for each of methods of the turtle class by means of eval.
Wish I knew how to build the fire. Is Roblox today like the BBS I was playing with in the 80s?
the ablenton learningmusic is also a good resource: