Resources to encourage children to learn to code
jamilhallal.blogspot.com
jamilhallal.blogspot.com
So far it's going pretty well, the concept introduction and presentation seems well done and paced. He understands what we are doing and how it's done and naturally experiments by changing parameters and graphics. So he's learning and we are having some fun times.
I have not any special desire nor dislike about him becoming a full on programmer, but I keep seeing people around me in all kind of jobs that would be quite better off if they faced some of their tasks with a bit of a "programmer's stance" or could even write simple small scripts to automate stupid chores.
I have a 7yo that is starting to show interest in technology, and I'd like to do some visual scripting with her. I have laptops and raspberry pis (though no dedicated monitor for a pi), and she has a chromebook from school that may or may not allow application installations.
Do you sit side-by-side? Who drives? Those are the sort of details I'm curious about.
When we sit together on a laptop someone seems always frustrated by screen angle or lack of control, and that friction is something I want to minimize as much as possible.
I'd suggest you each have a laptop so you're not constantly stealing the control to demonstrate. When I'm teaching my kids on a laptop specifically, if there's only one laptop it always feels like I'm removing autonomy when I take the laptop from them. ("No, you need to click the touchpad like this, then hold them like this" and "oh, hm, i forget where in the navigation that feature is, give me the laptop.")
It breaks the flow and encourages them to mentally coast ("if i struggle, dad will take the laptop and do the heavy lifting for me").
I would definitely let the child 'drive' and I would possibly sit nearby at the start but very much take a back seat as much as possible. I haven't investigated it properly myself yet, but in your situation I would look at Code Club World: https://codeclubworld.org/
At the Code Club we used these resources: https://projects.raspberrypi.org/en/codeclub though it depends how good your child is at reading. We start Code Club with 8 year olds I think for that reason as well as the ability to follow instructions semi-independently, but some younger children are fine and if they have one-to-one help that sort of thing is less of an issue.
This was to make it easy to get through a whole tutorial and remove barriers to entry. Then after they enjoyed that, I’d sit at a desktop with them while they drove and help them switch from tutorial to scratch.
Then when we wanted to do something non tutorial based I drove first while we made up what to do - then they were able to start doing it themselves.
Now they’re so into it we got them double monitors so they can easily watch tutorials alongside implementing (or like my own process make notes on one screen, implement on the others).
It's a really flexible sandbox that can be used to make decent-looking little minigames (both 2D and 3D). Really nice tutorials and puzzles. It's a great introduction to modern game programming concepts like entity-component systems and 3D geometry.
Downsides:
- It's purely visual programming with no useful abstraction or reuse mechanisms, so you rapidly hit the limits when trying to build complex logic (although there's a community of players who enjoy working around the limitations in creative ways).
- The tutorials are really verbose, with lots of banter among the different characters (very much like a console RPG), so children who aren't strong readers will find it difficult to follow.
In the coding game, you get a set of magnetic command bricks (walk, jump, grab) with modifiers (number for length, direction) as well as a loop meta-brick.
It works amazingly well and teaches a lot of elementary reasoning skills to younger children.
[edit] I should have mentioned: I have two girls and they both like it, so that's my N=2 positive experience.
These allow you to create relatively complex systems with emerging constraints and they often need to be debugged. In the case of Boomtrix, the system starts to degrade with use because the trampolines may move as the balls bounce. This need for adjustment and/or tolerance in design informs more physical sciences as well.
But I'm not sure about programming before the age of ~13 or whenever something like algebra shows up in school.
A few things we've done are Exploding Dots Machines [0] and stories about functions and boolean logic. [1] Peter Rowlett tweeted about a little sorting algorithm activity he did with his 6yo, which I've been meaning to try. [2]
Another idea I want to do sometime is a "Robot Mommy" game where the kids give me instructions and I interpret them super-literally (kind of like those "how to make a PBJ" games). I can see this one going in a lot of different directions, but I'm thinking to start by being a human Logo turtle and let them control my steps and turns.
I'm always on the look-out for more of this kind of thing, if anyone has any suggestions or recommendation!
[0] https://bancosparenting.wordpress.com/2021/07/14/exploding-d... [1] https://bancosparenting.wordpress.com/2021/05/08/pickle-and-... [2] https://twitter.com/peterrowlett/status/1479857933202739209
Another option is if you play games at all, introduce your kids to mods. At that age, I played video games with my dad/watched him and doing things like silly graphics mod replacements (turn Mario's sprite into the poop emoji!) help instill the concept that tech is built out of systems and components that you can change to get the results you want. It's just that since they're 3 and 5, what they want is likely to be quite silly.
Introducing my 6 year old to CodeAcademy is not something I would ever consider doing. I think the target audience is at least a decade older than that...
Botley the coding robot has been a fun introduction in my house. https://www.learningresources.com/media/botley/
The biggest roadblock is that we’re non-native-english so there’s few resources that are age+language appropriate. Few programming languages have been translated! The only one I know about is Excel/VB.
- Entertainment. My computer did not have games, so coding was the next closest thing. Type in a game from a magazine, or make a lookalike game.
- Showing off to peers. It was fun to show off to friends what we coded up. Where we grew up it was a thing to make paint programs. UI state management, the trick with XORing lines until ready to paint it in.
- More entertainment. Later when computers got better and had more games, it was fun to pirate and crack them. And again share with friends.
Partly the problem with today is that there is so much easily available entertainment that you hardly need to do anything to fill your time with games and videos and then some. But, the peer factor is still there where you can show off a custom Roblox or Scratch game or something. So the trick is to find that peer group for your kids. How do you all deal with this?
I have huge FOMO living where we live that all the neighbors are going to be jock types that won't be such a peer group. And it's not exactly like you can go interviewing potential neighbors/students in the local school before you move some place - instead I'm in a situation where I will just need to move and cross my fingers.
I was thinking of using some kind of meetup site like nextdoor or facebook groups or something in a local radius to put together a crafting group where nerd-minded kids would meet maybe once or twice a week in our garages and we would leave them hands-off with a bunch of tools, supplies, and computers and just be around to answer questions. I wish there was a makerspace near our town because those seem like exactly the kind of environment I would like to foster.
This really was the key for my development into using the computer as a tool instead of as a device for consumption. Some very nice, and patient, developers on IRC took me under their collective wing at about 12. A few years later I was freelancing for several of them.
These experiences greatly changed the way I approach life, problems, and learning. I am forever grateful for those people and attempt to emulate their attitude and decorum when I am helping others learn.
I rather have my kids play outside, enjoy the nature and our beautiful planet.
This is, of course, a projection of my dissatisfaction with the industry as a whole, but I think it's still valid.
However, if you look at where most kids spend their time, a lot of it would be in front of the TV or watching online videos or playing games.
I think the people who want kids to code, want coding time as a replacement for watching mindless videos, not as a replacement for outdoor time.
So your kid plays outside and then comes in and instead of watching another toy unboxing video, codes up a simple game they can play by themselves or with their friends.
Simply telling your kid to limit their use of a device only goes so far.
My four year old said she wanted to make a game with me because she loves games (and dad's a programmer). So I started a project in Scratch and told her a little about the blocks and we got something moving on the screen in an afternoon.
It was magical for her to have an idea and see it come to life, just a little bit, on the screen. Yes, I'm doing 95% of the work and I know most of the programming concepts are lost on her, but even if she's picking up a tiny bit of logic it's worth doing with your kids if they're interested. It still feels like quality bonding time.
But your right. IMHO Nothing beats a hike in the woods, or better yet learning to build something from raw materials found in the woods (which in turn could have the same effect).
I don't think kids, in general, should be learning to code. Most of them will hate it. But to some, coding is like piano, ballet, or painting: a form of art and of play. Those kids will need resources the most; and they need to enjoy their time spent programming while childhood lasts.
If I lived in the same part of the world as them, I’d definitely be playing with them outside too :)
[1] https://snap.berkeley.edu/
[2] https://arcade.makecode.com/
[3] https://www.adafruit.com/product/3333
[4] https://makecode.adafruit.com/
Also check out this tiny old book suitable for a total noob to computers:
The Pattern on the Stone - The Simple Ideas that Make Computers Work by W. Daniel Hillis
https://www.amazon.com/Pattern-Stone-Computers-Science-Maste...
The game is odd but in a cute and charming way; it heavily incentivizes logical and out of the box thinking without looking as dry and austere as real programming; it is challenging, but with a well adjusted difficulty curve; and all in all it is a very fun game, whatever your age.
I bought it for my sister (around 10) and she's had a blast! I don't think she's particularly interested into getting into programming, but I think any children growing up to be programmers would reflect fondly on this game.
By the 90s, there was a fruitful current of research around end user programming and the psychology of programming that offered principled insight into what would make a good programming language for learning [2]. Python and Javascript were designed before most of this work, and I strongly doubt much effort was directed this way regardless. Indeed, PL design seems to be driven by whimsy and intuitive notions, which we all know makes for a terrible user interface.
Add in the fractured and complicated environments in which programming takes place and I would argue that broader participation in programming is hampered by this unintentional form of gatekeeping. Somehow I began programming in C++ - I’m sure many, if not most, members of this community learned in as harsh an environment. This is a great flex but it also contributes to programmers being a sort of priestly class that can speak the magic of the machine. The future of computation that I am drawn to involves everyone, or at least as many as possible, being given the power to solve their own problems with computers, not just wait for and depend on someone else.
1. https://www.dgsiegel.net/files/refs/Kay,%20Goldberg%20-%20Pe... 2. https://home.cs.colorado.edu/~ralex/papers/PDF/VL98-scaffold...
But seriously; I'm not planning to teach my kid to code unless he is really interested in it by himself. I rather have him play outside.
By saying "teach my kids to code", I don't imply "forcing my kids" into it. Just introducing, letting them experience and know it exists, what it's for, how it works.
If I don't expose them to coding, how could I ever know they're interested or not?
A tangent:
The two generations before mine worried too much about letting children "just play". Life was too tough on them when they were kids. And they went to the opposite extreme: made life too soft for me as a kid.
I grew up with a completely wrong vision of life and the world. I entered youth totally unprepared. It's anectodal and I bet there are people who had a too soft childhood with only play and managed it differently, but I'm going to find a better balance for my kids as they grow.
I want to smoothly and gently introduce pieces of adulthood to them, so that when they reach maturity, they're better prepared to be happier, more confident and independent.
> If I don't expose them to coding, how could I ever know they're interested or not?
About this one; programming nowadays is not some obscure niche thing that it's impossible to come by unless introduced by someone else. I started my programming career (being paid to do) when I was a teenager. There was no-one using computers around me let alone knowing what programming is to introduce it to me. I believe nowadays everyone in a somewhat developed or developing country will have the opportunity to choose whether to learn coding or not.
There is no obvious way an avid user of an iPhone or iPad might be exposed to anything resembling programming without seeking it out.
The same is more or less true with desktop os
In the 70s/80s home computers dropped you into a programming environment immediately or a programming-like environment (the shell or command prompt). In the 90s this was less true, but it still wasn't a huge distance from launching to accessing a programming environment (and on Linux and BSDs you still typically started in the shell). In the 00s and 10s, on macOS/Windows/Linux you can still get to a programming environment or shell easily enough (and macOS and Linux generally come with a basic suite of programming tools like compilers and interpreters), but the "distance" for the user has been increasing. If you want even some common tools you have to download them instead of having them immediately available, or in macOS you have to know that there is a terminal which provides better access to the supplied development tools.
Mobile devices have always been behind on this, but they've become an increasingly common first computer for many which skews the relationship that people have with computers away from seeing them as tools to manipulate (via programming and scripts) to appliances. They have more in common with embedded systems like the Tivo or video game consoles than with PCs, providing users with a preset script on how to use them and not the more open-ended model of PCs.
Not debating you but I find it interesting how both your comments _differentiates_ "learn programming" vs "playing with toys".
When I learned coding at age 11, "programming a computer" _was_ "playing with a toy". Programming wasn't an "adult" job that grownups did. Instead, programming was like playing a music instrument or painting art with brushes.
That said, I agree that not all kids exposed to programming will think of it as play.
Just like there's recreational mathematics, a lot of programming can be "recreational", something for play not for "serious" work (even if it happens that the serious bits follow from the play).
edit: just to add, they still do lots of outside stuff, but it's not like before.
Rules and limits are important and I agree the screen offers quicker gratification, so we as parents must set and enforce those rules.
That said, this changes the subject a bit, as we were talking about learning to code.
That's empathically not an instant gratification and we should not equate time spent in front of screen with time spent learning, expanding understanding of logic, cause and effect, structure, etc. And while kids are happy to spend hours gaming, I haven't seen many (in my social circle) that would be happy spending hours debugging some Python, Lua or Sketch code.
Presumably the alternative to teaching them programming, is spending time with them some other way.
Exposure to things is key.
Yeah, we bought him a nintendo whatever-they-were-called when we got home.
My two kids self learn all sorts of interesting skills via youtube videos... obviously I keep an eye on their sources and content but to date its been a fantastic tool for them. My 13 yr son is churning out c# in unity for game making. Entirely self taught.
My daughter is learning drawing skills and is doing quite well.
pro parenting tip: make the google account for your kids, and then subtly choose what they subscribe to (and unsubscribe) without letting them know. its a great way to guide their way through the cesspit that you tube can be (oh and a premium subscription is a must, or they get inundated with horrendous adverts)
(if you just want to get rid of ads you can use ublock origin instead of buying premium if you are just concerned about ads)
At school they teach Scratch and Blockly.
https://education.minecraft.net/en-us/resources/computer-sci...
A friend of mine had a child recently was looking into this I also suggested scratch/this baby book on circuits.
Also curious the future of development I mean things take work to build but some YT channels hand wave it/make it seem easy. I guess with tools like co-pilot maybe NLP/STT/No Code will be faster/easier to make things.
I don’t know what I’d do if I could just YouTube any topic and get a meaningful answer 30 years ago, it could be incredible? Would have made things faster but maybe that’s not the point? I’ll find out I guess with my son, it will be interesting.
It's far more frequent, now, to come across people in their early 20s who have been programming since early childhood. The resources are in far greater abundance and the opportunities continue to increase.
It's amazing how many variables had to align to make my early experience possible versus what kids grow up with normal access to now.
Cody Block is a Montessori inspired, screen-free wooden toy for children 3+, introducing the basics of computational thinking through tangible programming.
[1] https://teachcomputing.org/home-teaching [2] https://www.computingatschool.org.uk/teaching-resources/home...
Some of them are worksheet based and help kids learn critical thinking , logical reasoning. I liked a activity to make the kid draw different houses he/she sees around and group it based on some characteristic.
or give your e-mail at https://www.distributedcomputing4kids.com/ :)
Learning to code is a really useful skill in almost all employment opportunities where technology is involved.
And for you and member otys nearby: learning to code is learning a skill - you build your own tools -, which like all things, the earlier it is learnt the better.
Not the OP, but when I started coding this morning, the temperature of "open air" was 4°C. Now it's 10°C. Still, typing (without mittens) would be hard on the body. Some jobs are inherently more in the "open air" and much less static.
«It's all the rage», but mind you: not here. There's no human presence to bring it.
Example: right now, here.
I'm not really sure how much this applies to coding really. There are things like music or drawing or handwork or mathematics where you can refine your skills indefinitely, and starting early does indeed help get your 10000 hours sooner. But in programming it seems to me there is only that much you can learn - and people normally grow their careers by acquiring domain knowledge and/or business skills, not refining their coding.
To me, programming is as much a skill to me as learning music or writing is.
Sure, in industry some domains are learned/appreciated with age but that's considerably easier to pick up once you've mastered the abstract skill of programming.
To draw analogy - composing for a genre/or emotion is a lot easier once you've mastered composition. Similarly, once you've mastered scales, arpeggios and rhythm becoming proficient in pop, jazz or classical will be comparatively painless.
There are many difficult programming domains that people can get pretty good at well before they reach adulthood. Game design can span logic, rules, systems, product, testing, performance, graphics and physics.
Compilers and programming languages can be grokked before uni too.
Crypto also provides a gateway to web and distributed systems.
Having met people who have compounded their life by learning programming XOR music (two skills I have personal experience going deep in) it is hard to comprehend how vast the difference becomes until you've seen it firsthand.
At the extremes you have mozarts who compose from age 5. But even less extreme you have people like Zuckerberg or lexi-lambda building impressive programs by adolescence or Justin Biebers making music around 12.
In any case, I'm also pretty confident domain acquisition can start young given that I've met people who were trading from young teens.
Ultimately, school curriculums and age-based learning doesn't cater to individuals and can be artificially limiting of potential. Everything I've seen suggests that coding can be acquired from a very young age and then frees the individual up to learn all the ancillary bits as they grow up.
What's unusual is we live in a time where there exists a vocational profession that pays well and isn't locked down by accreditation. (compare that with law and medicine for example)
Computational thinking and systems thinking are applicable to all aspects of life. The things taught in early coding activities are the building blocks of those domains.
Or the whole shipping container complex.
But coding is perhaps the purest manifestation of CS in all its glory where the feedback loop is tight and the scale of system can be borderline infinite for very little cost.
Coding is a life skill, since most of us will need to use a computer for work in some capacity, what's the downside to teaching kids how to actually use it?
There might have been good reasons to believe this 20 years ago, but today's computer users may not even know (and not need to know) where their files are located in a file system or whether they are on their local disk at all. I think we are at a point where you can use a computer without knowing pretty much anything besides what UI designers choose to present you.
You forgot formulating - writing essays -: an absolute game changer, one of the most important exercises in primary schools (in some systems).
> be it in math, French or others, kids just need to "fill in the blanks" or worse, check-boxes
This is absolutely criminal in many ways: they will not get scholarized with that. In math, we had to show that we can find a solution and show the steps; in language, you have to exercise sound thought; in notions, you have to show not just that you have them, but that you can use them. The problems with citizens wasting parts of their formative years will be socially massive.
It's not about having the answers, it's about developing the skills... The answers /may/ reveal the skills.
Although I think woodworking would be a nice skill to teach kids too.
(And «focus» does not mean neglecting the rest.)
That's what Logo offered starting back in the 60s. Exploring different problem domains with programs. Converting some kinds of math/geometry problems into computational problems with the turtle (and, later, turtle graphics on the screen). Language problems were similarly addressed, but most people just remember the graphical parts.