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).
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..
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.
https://education.minecraft.net/support/knowledge-base/conne...
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.
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...
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.
[0]: https://www.thinkfun.com/learn-coding/ [1]: https://www.thinkfun.com/
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.`
That's a nice idea.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.
As the instructor, you must "break" their solution with a funny skit (as opposed to being pedantic). Try to do step 1 in front of the class: You flail your arms around like an absolute madman, reaching for the peanut butter, but you cannot reach it. Eventually, the students realize step 1 isn't clear enough for you. They come up with: 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.
If you think about step 1b, you can see a potential problem if your hands are full. So, you proceed to get the ingredients with full hands, only to drop the jelly on the way back to the table; you didn't have enough free hands to get the jelly! At this point the students are facepalming you, which is good, and it encourages them to be even more explicit in their instructions; perhaps they include a check to make sure your hands aren't full before getting the ingredients.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
https://www.kickstarter.com/projects/871405126/turing-tumble...
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;
tools: * coderdojo; * guest net; * don't try to create a website whitelist; * buy / borrow hardware they like to try out;
misc: * watch spin offs;
some remarks might need explanation.
don't push: if you do, any kind of motivation will turn to become the opposite.
support emotionally: 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.
coderdojo: look it up and discover how kids learn programming. best to wait for your child to discover projects of other kids.
guest net: 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: 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)
comments welcome
i am
* Are you trying to teach your kids simple blinky-light programming? * Maybe you want them to develop into C++ coders? * Do you want your kids to understand underlying computer architecture constructs (bits, bytes, cores, caches, etc.)?
I learned LOGO as a 7 year old & Lisp shortly thereafter. Later we got a TRS-80 w/ a built in BASIC interpreter and out of a mix of necessity and curiosity taught myself Z-80 Assembly and eventually started playing around with ALUs & 7400 series logic on breadboards.
My offspring isn't interested in the low level details, but was VERY interested in making art on the computer. We started with MS-PAINT-a-likes, moved on to Gimp & eventually to Blender, using Python to automate some processes.
So... my advice is to think about what you're trying to accomplish. If your kid is interested in low level stuff, maybe start with a soldering iron. If they like art, think about the tools they'll use to model the abstractions they want to work with (Gimp, Blender, Maya, Adobe CS, etc.) and then look at the languages that are easy to integrate w/ those tools.
Also, remember that modern spreadsheets are a powerful data-flow modeling system.
Modern educators tend to follow the Constructivist model, a simplification might be: "Give your kids some tools and see what they do with them, possibly nudging them towards techniques or solutions when they identify a specific intent or goal." Constructivist educators would probably tell you the interaction between the learner, the educator and the tool is probably more important than the specific tool.
Constructionalism takes constructivism a bit further and seeks to support the creation of mental models and abstractions by the learner. LOGO, eToys & Scratch were built by teams that were largely influenced by Seymour Papert & his constructionalist ideas. In education circles, there's a little bit of debate over constructionalism, but it's definitely produced some great tools. And heck, I've had a pretty decent career as a software engineer, so learning LOGO at MIT as a 7 year old in the early 70s seemed to have worked out well for me.
I'm personally less of a fan of Scratch than I am of TI LOGO running on an old TI-99/4, but that's probably because I find Scratch MUCH too cluttered. But YMMV. Scratch is definitely worth checking out.
So to sum up my advice:
* try a bunch of things to figure out what your kids interests are. * understand the tools you present your kid(s) with so you can help solve problems when they're blocked. * show your kids a few simple things and let them discover the rest (and then unblock them if they get in a jam) * if your kids are mentally checking out, it's time to try a different approach. * don't be afraid to let your kids "waste time" on things they enjoy, even if it doesn't immediately seem like they're learning something (my offspring knows boolean logic ONLY because we found some youtube videos about redstone circuits in minecraft.)
Also, you can buy a copy of Papert's "Mindstorms" book online (or heck, it might be available as a free download by now somewhere.) It's a tiny bit controversial in education circles, but it's relatively short and it's a decent intro to Constructivist ideas.
So... all that being said... I was pretty impressed with how cheap & fast it was to set up Scratch on a RasPi w/ Raspbian. Under $200 even with a new mouse, keyboard & video screen.
The LEGO Mindstorm products all seemed to be a little overpriced to me, but if you don't want to spend the afternoon hobbling together a cheaper educational robot system, they're probably not that bad. Seymour Papert was really big on getting kids to interact with physical objects, so if you buy into Constructionalism, this is definitely the tool for you.
I'm a fan of the LittleBits electronic toys. My offspring ignored them after five minutes, but I've seen other kids spend hours putting blinky light creations together w/ them.
If you're handy with a soldering iron, it's a snap to put one of these pencil circuit tools together. I personally love it. My offspring liked it for a while before disappearing into the purple cloud of sullen adolescence. It was also a bit of a hit w/ my niece.
https://makezine.com/projects/build-electronic-audio-game-pe...
I tried to make sense of the Dash robot, but honestly, I couldn't figure out how it was supposed to be educational. YMMV.
Ditto for Cubelets. At $26 per cube, they were a little pricey for a system that seemed to come with waaay too few instructions.
I really want to try the makeblock drone airblock system, but I'm probably projecting my own desires on this one. Still, I used an early version of the makeblock neuron system and it was at least as good as the littlebits (though littlebits in-box documentation was better.)