Why you’d want to and how to get started early.
I’ll begin this on a personal note. I learned to program when I was 9 years old. It didn’t seem a big deal at the time and the programs certainly weren’t rocket science (despite being on a machine similar in power to the Apollo guidance computer) but it was fun, in the way that solving puzzles is, and useful. Just about that time, way back in the early 1980s when CDs were enormous and went round at 33 RPM, computers were introduced to schools in the UK and children were taught how they worked. Not just how to use them but what went on inside and how to program them.
By the time I reached 16, I was able to sit a new GCSE in Computer Science which included those technical elements. The subject wasn’t mandatory, but a bunch of kids chose to take it and passed. As the Computing at School Working Group put it recently “That generation grew up to make the UK a world leader in computer related technologies.”
When I started work in my first professional IT job in the early 90s, the average age of technical (programming) staff in the office was around 25. Since then a gradual change has happened. Twenty years later, that average age seems nearer 40 and I think that tells it’s own story. The UK had created a generation which could code, design and create computer-based products but then somehow lost the ability to keep that up. We lost the plot.
In schools, a change that had started a couple of decades back with a reasonable enough aim to arm young people up with general skills in using computers had somehow not moved with the times. Frankly, it looks like some parts of IT teaching had eventually become a GCSE in the digital equivalent of colouring in without going over the lines and holding scissors properly. Basic computing use is a primary school skill in 2012 and our teenagers were quite rightly bored with going over those basics in the classroom.
Over the last few years it’s become increasingly hard to recruit young people with technical IT skills and yet at the same time unemployment for under 25s has risen to real problem levels. Our 16-18 year-olds deserve better.
Google’s Chairman, Eric Schmidt picked up on this in his McTaggart Lecture in August 2011 and said that the UK was “throwing away your great computer heritage”.
“I was flabbergasted to learn that today computer science isn’t even taught as standard in UK schools,” he said. “Your IT curriculum focuses on teaching how to use software, but gives no insight into how it’s made.”
The surprise was that this seemed a real shock to folks setting education policy. It seems to reveal that somehow the problem was previously invisible, or maybe just not seen as a particular priority.
The really good news is that the issue has now been recognised and is being actively tackled. A Department for Education press release calls the current curriculum ‘harmful’ and describes how it will be dropped this September in favour of more ‘rigorous computer science’. The ongoing challenge is that real, meaningful change will take time. There is momentum and resistance in the current system and it has taken a couple of decades to reach this point. That won’t be corrected overnight. But as the Chinese Proverb says: “The best time to plant a tree was 20 years ago. The next best time is now.”
In the meantime, while the education system gets geared up to the modern age, there are plenty of things that you can do if you’re a parent to help your own kids right now. I’ll share a few experiences of things that have worked for me and my two daughters.
The tips here are aimed at primary school age upwards. Some of the simpler concepts are understandable with a little help by children as young as six or seven years old. Some of the more advanced ideas will definitely need a little more maturity than that. All kids are different though and really I’m looking to give you a toolbox of ideas to pick from as you find appropriate.
First of all, I’ll kick off with my top three programming environments for kids. Rather than being based on my own assumptions, these are the ones that have actually caught my own kids’ attention most and that I’ve had similar feedback on from friends. Here goes:
This is definitely my top choice for younger kids. It’s easy, it’s fun, it’s visual and it’s free.
Scratch was developed by the MIT Media Lab with the specific aim of creating an environment in which young people can explore programming and creative ideas. I first tried it with my oldest daughter when she was about seven years old and she got it completely, quickly creating some little animations.
One of the powerful aspects of scratch from a learning point of view is that the programming statements themselves are visual blocks which you can drag into place, making it much clearer what will happen. At the same time, they reflect the normal programming constructs such as sequences, loops and decisions in a way that almost subconsciously teaches those concepts.
It’s interesting that Massachusetts, where scratch was created, came out in a recent International Comparison of Computing in Schools by the National Foundation for Educational Research as having the lowest age for introducing use of ICT (age 6) and also introducing kids to the technical ICT aspects (age 12) of any region in their survey. People in the area clearly have an interest in building a next generation of technical skills and it’s easy to see how Scratch could fit with that bigger picture.
Cost: Completely free.
Where: Download from scratch.mit.edu
Runs on: Windows, Mac, Linux
Mindstorms is based around the popular Lego contruction toys and centers on a programmable ‘brick’ which can control up to three motors based on the input from four sensors. Instructions for creating a number of ‘robots’ comes with the set and that makes it pretty quick to get up and running with.
The sensors include some fun options such as proximity sensing and colour recognition which can make for some creative machines. It’s clear from the creations produced by the strong online community of help and ideas sharing around Mindstorms that a high proportion of it’s fans are not actually children (admission: I bought my first Mindstorms set when I was 27), so if you’re a parent who enjoys contruction sets, this could be for you. Just remember to let your kids have a go now and again.
The programming environment for Mindstorms is in some ways similar to scratch in that it’s a drag and drop environment based around visual elements which can be placed in order and within loops to create your program. In this case, the visual blocks are specialised and geared towards reacting to sensors and moving motors. In that sense, I think Mindstorms is less of a step towards general real world programming than scratch. However, it is fun to build and program, the community around it is great and it makes a good rainy day project which can be re-built in seemingly endless different variations.
Cost: Around £200 for the Lego Mindstorms NXT 2.0 kit.
Where:Lego shop, online and offline toy shops
Runs on: Windows and Mac (Sadly no Linux support from the manufacturer which is a little disappointing given that a large part of their target audience is likely to be parents who like tinkering with technology. There are various ways to program Mindstorms from Linux but they don’t seem very child friendly so you might prefer to look at Scratch or Arduino if this is an issue to you).
This is probably the hardest to get started with on my list of three here but on the scale of things not that difficult to learn and it has the advantage of being able to create some real world, useful projects. Far from being a toy, Arduino is a fully fledged prototyping platform backed by a programming language which has syntax similar to many used in business environments (such as ‘C’ and Java) and a small number of instructions to learn. The instructions are text-based rather than the visual programming which Scratch and Mindstorms use.
The ability to put together something useful very quickly can get quite addictive and it doesn’t take much of a leap to start creating little Arduino-based gadgets for your own life. Recently, I built a controller for my camera to help shoot timelapse videos and my kids made a disco for their toy cats – each to their own.
The best place to get started is the Arduino website itself, where you can download the environment, find some useful getting started tips and ask questions of the Arduino community. If you prefer something on paper, the book ‘Getting Started with Arduino’ by Arduino co-founder Massimo Banzi is a big help with the basics, and ‘30 Arduino Projects for the Evil Genius’ takes things to the next level if your kids fancy themselves as mad scientists and/or megalomaniacs with secret lairs.
Cost: you can get an Arduino Uno board for under £20. The software is free (and open source). Unless you already have electronics bits and bobs to use, you’ll probably want a selection of LEDs, resistors, buttons, etc. One simple way to get all this stuff is to look for a starter kit (just search for ‘arduino starter kit’ and you’ll find plenty). Around £50 total will get you going and after that it’s just a case of whether you want to invest in more components to build extra hardware. The programming aspect costs nothing.
Where: Mainstream and hobby electronics suppliers (search for ‘arduino uno’). Getting started guides, tips and help are available from the Arduino website.
Runs on: Windows, Mac, Linux
What, no Raspberry Pi?
The reason this is in almost as an afterthought is simply that I haven’t managed to get my hands on one yet. When I do, I’ll give it a go and write up my first thoughts.
Top tips on how to help
So you’ve downloaded scratch or your Arduino starter kit’s just arrived. Now what?
Do your own learning first
There’s nothing more frustrating than being on a training course where the instructor seems to be just reading from a book as they go along and can’t answer questions, so you don’t want to be that instructor in front of your kids. If you’re going to try something you haven’t done yourself before, work it out on your own first, otherwise you could end up with a fragmented, boring experience for your otherwise enthusiastic pupils. (Obviously teaching troubleshooting is an important skill too, but that can come later).
Look for ways to apply existing skills before teaching new ones
There’s a lot you can do with simple top to bottom sequences of instructions before you need to reach for loops and make complex decisions in your program. Simple sequences are understandable, reliable, low on the frustration scale and easy to play around with. There’s no harm in letting this be explored to it’s full potential.
Create projects which are important to your kids, not to you
This isn’t the time to try to create some new artificial intelligence based stock market predictor. Let your kids be the lead and if they want to create a project which seems, well, childish, what does it really matter?
Join in the fun
All parents know that kids want to spend time with them, so join in the projects, muck in and help out but…
Don’t take over
Remember you’re a helper here. To be honest, this can be one of the hardest things. It’s just so tempting to create something you want to rather than what your kids are building. You can do that, but do it in your own time.
Give them space to surprise you
The things they figure out on their own are often the real gems. Give you kids a bit of space to learn for themselves and just try stuff out. You might be surprised at the results.
None of this is a substitute for going outside and experiencing the world
I spend my working life with computers and really enjoy it but when home time comes there’s nothing I like more than just getting outside. As far as possible, free time is spent in the hills, down the park with the kids, or just in the garden. There’s a balance to be had and I certainly don’t want to teach my own girls that sitting in front of a screen all the time is the future.
So will my kids be able to do anything useful with this?
(other than get a job and earn money)
It’s easy to see the value of being able to program purely in a commercial sense but it’s much wider than that. Often the more immediate benefit is that you can simply build stuff which helps you out, even if that’s nothing more than a few scripts to automate tedious stuff in your day to day job. The end result of this is that more of your human brainpower can be used for what it’s best at, i.e. – dealing with more creative and unusual work instead of repeating the same thinking time after time. That seems a genuinely handy life skill to me.
Another benefit is that even if you don’t end up coding much yourself, being able to converse with the techies on some common ground is a useful business skill. It helps you describe your problem and understand the answer, much in the same way as a basic understanding of car mechanics helps you out when it’s time for a visit to the local garage. It also means that when your kids think up that idea for the next big tech startup in ten years time, they’ll at least be able to give it a bit of a sanity check.
I’ll finish by stressing that teaching my own kids some simple programming isn’t about some kind of pushy parenting for me though. At the end of the day, the best you can do is simply to create opportunities and possibilities. In this case, they’re opportunities that have been largely missing in mainstream education recently but that thankfully now seem to be gradually returning. In the meantime, you might just help the next generation of technical innovators get a little step ahead and create some fun projects in the process.