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..
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).
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.
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.
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.
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.
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 ")
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.
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.
In my opinion, it's the best introduction to computer science for children.
We play Minecraft on a local server, and sometimes try and build large structures that take a lot of work - I showed her the /fill command which got her interested in the command line.
She is a bit young to understand Cartesian coordinates to use it without help but was very impressed with the automation side of things - it got her interested to look up other commands (she has far too much fun with the /kill command but that is another story).
I made a Python package to automate the building of castles (https://github.com/acutesoftware/worldbuild/tree/master/scri...) so getting her learning Python will be the next step.
Then you have some options to program minecraft.
I wrote a client in python which you can look at to see how to call commands. https://github.com/tonetheman/mctony
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.
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.
* Teaching a 10-year-old Haskell
Thanks for this question which made me to think this idea. Will start working on it soon.
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.
The target age group indicated on the box says 8-adult, but I suspect it's quite likely that younger ages can also play along, with some help or guidance.
I haven't played or looked at them in depth, but from a superficial overview, these do look quite beneficial for understanding some of the core concepts.
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.
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 also show them what I'm working on for fun and invite them to help with parts of it. Usually Arduino and 3D printing/modeling. We've started (but not finished) a few web-based games together. I don't know if either of them will ever catch "the bug" like I did at their age (9 and 11 now), but I want it to be an option for them if they do.
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.
Ask them to write down all of the steps required to to make a peanut butter and jelly sandwich. For example, a student may come up with the following solution:
1. Get the peanut butter and jelly.
2. Spread on bread.
3. Put other bread on top.
1a. Walk to cupboard from table (i.e. the peanut butter is stored somewhere; we need to go there).
1b. Pull out peanut butter and jelly (we need to acquire the goods).
1c. Walk back to table.
This comedic, adversarial process between the students and the teacher continues until the students land upon an imperative, explicit way to make a peanut butter and jelly sandwich. Breaking down problems into imperative, unmistakeable steps is exactly the kind of skill which is used in programming, as computers lack linguistic pragmatism.
The lesson here is that computers are dumber than we think, and programming is the art of making them smart. The instructor plays the role of a dumb computer acting out the students' instructions. The students quickly get the point: their instructions aren't good enough for a computer, even if they are good enough for a human, and it's not that hard to be explicit if you take some time to think about it!
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
Another 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.
here is a incomplete list of my findings:
soft skills list:
* don't push;
* accept if they are not (yet) interested;
* support emotionally ;
* trust your kids;
be patient even if it looks like bullshit;
even if you know the solution, wait for the question;
* guest net;
* don't try to create a website whitelist;
* buy / borrow hardware they like to try out;
* watch spin offs;
some remarks might need explanation.
if you do, any kind of motivation will turn to become the opposite.
one of the differences between adults and kids in terms of learning is how to deal with ambition. kids might start to cry or get aggressive when things don't work the way they planned. dealing with ambition is part of the learning process.
the best answer for your kid might be non-technical, just hugging.
even if you know the solution, wait for the question:
you can only learn when it feels like you have control on how to do it. if it's not yet time for the answer, there is no problem and no learning motivation.
look it up and discover how kids learn programming. best to wait for your child to discover projects of other kids.
separate your internet from your kid's internet. the risk of viruses or exploits caught from discovery journeys on the internet is extremely decreased.
don't try to create a website whitelist:
I tried to maintain a whitelist of allowed websites and waited for requests to come. after less than a week I gave up. same is true for search platforms or websites designed for children. trusting your kid looks like the better choice to me.
buy / borrow hardware kids like to try out:
we are buying heaps of hardware (raspberry pi / arduino / camera / smartphone), most of which financed out of our child's pocket money. his decision.
spin offs are the most interesting discovery to me.
my kid writes short stories to be integrated into his self created apps, so he can share them with other kids.
math is easy if it is related to solving computer problems (compared to torture if the only reason is memorizing unrelated stuff)