Why kids should learn to program computers

Flattr this!

I believe that children should be taught computer programming at school and they should be taught it early on. There are arguments against this. Who needs to program a computer, anyway? When will the average person ever need to do that? That’s technical stuff. No normal person is interested in that. It’s for nerds.

Or is it?

Modern civilisation lives on knowledge. Information. Information is everywhere, in everything that we do. We learn, we write down what we have learnt; we create art, and store it, copy it, distribute it. We do newsworthy things and we broadcast news. This is the information age, and it runs on Information Technology.

In this information age it is vital that we can all produce, modify and access information and that means using computers. There are not all that many jobs that do not involve a computer in some way. Few people would disagree that using a computer to access the internet, produce documents and so on should be taught at school but I think it should go further than that. I think that children should be taught to write computer code; the lists of instructions that tell the computer how to do everything from adding up the numbers in your spreadsheet to moving an alien across your screen. (Not such different tasks as you might think!)

There is logic to my thinking. To the average person, a computer is a mystical object. It has, they think, a mind of its own. Computers DO things without reason or maybe just to spite them. Except that is not true, but without knowledge of what goes on inside the computer it seems like it.

Programming isn’t creating the computer, it’s operating it. It’s like driving the car rather than building it or being a passenger. Creating a computer program gives the programmer an understanding of what computers really do. Once it is understood how a list of instructions can add two numbers together or draw a picture on the screen it starts to become easier to work out why the computer always pops up that incomprehensible message when you try to do something that it doesn’t like. It is not just that learning programming makes it easier to understand computers either. Britain was - is - very good at creating computer software. When manufacturing has all moved to countries with cheaper labour, creating new computer software and games might be one of the few areas where people can make a living. Like all languages, learning to speak to computers is best done at a young age and those that do so find it easier to write software later in life. Then there is the joy of actually creating something yourself, and the convenience of creating something that works the way you want it to instead of the way that some distant programmer wants it to. There are plenty of jobs where it would be useful to be able to tell the computer what to do instead of waiting for someone else to tell it. Scientists need to store and analyse data from their observations and experiments. Sales managers need to be able to extract meaningful information from customer databases. Both of these situations could be speeded up by knowing what the computer can do and how to do it quickly.

A BBC computerSo if programming should be taught to enable people to make the most of the information age, how should it be done? In the eighties every school had a BBC microcomputer. Homes had Sinclair Spectrums, Ataris, BBCs and C64s. The important thing about those computers is that the first thing we saw when we turned them on was an empty screen waiting for computer code to be typed in. Sure, the first thing many people would do is type LOAD “” to fetch a game from cassette tape, but everyone would eventually get around to typing 10 PRINT “Steve is great” / 20 GOTO 10 and from there people would often become curious about what else they could tell this computer to do. The current batch of programmers in their thirties and forties are good at what they do because of early exposure to simple computers that practically demanded that the end-user programmed them. Modern computers just don’t present the same opportunity to program them. To program a modern computer you have to realise that you want to program the computer, and then find out what you need to install to help you do that before you can even get started. Free software is available on the internet to get people started but hardly anyone knows that it is there.

This is why I think that programming should be taught very early at school. Children can sit down at a computer that already has what they need to program it and can be guided through the steps. Some children might not enjoy it but they will at least have encountered the basic ideas that make a computer function, and have some understanding of why things work the way they do. Other children will discover a talent for programming that they might otherwise never realise, and they can go on to produce great things.

As well as teaching programming early on, I also believe that concepts like web browsing and word processing should be taught at a young age. These things aren’t optional, they are used in nearly every other subject at school. As using a computer is a fundemental skill to be taught to everyone anyway, I think that the IT GCSE must allow thost that are interested to go a lot further than that. A GCSE in IT should teach advanced programming and computer science, not things that everyone should already have been taught like how to make a Powerpoint presentation.

I realise that there are other demands on time in schools and also that many people will not be interested in computer programming. I should point out that there are plenty of things that people might not be interested in but should still learn the basics, for example, cooking. I’m not calling for years of lessons on the subject of programming. What I would like to see is just a few lessons somewhere between the ages of 7 and 14 (preferably nearer 7) which take children through creating a simple game. Just enough to capture the imagination and explain simple concepts. Children at that age would hopefully still be curious enough to be interested.

Apart from teaching programming in schools, there should also be more opportunities to learn at home. One intriguing project that might help with this is the Raspberry Pi project. Raspberry Pi is a tiny computer the size of a credit card which will connect to a TV just like those eighties computers and will have all the tools necessary to learn programming already on board. It should be a case of plug in and start writing code. The best bit, though, is that the Raspberry Pi is expected to cost about £15. These things should become ubiquitous and everyone should have the chance to program a computer.

  • http://www.facebook.com/indigojo Matthew Smith

    I had a Sinclair Spectrum back in the early 1980s (I had the 48K model then the 48K Spectrum+) and I was exposed to Acorn/BBC machines as well, and although I learned some basic programming (which did prove useful when I got an Amstrad PC in 1989 and started learning C — I always thought the perception of C as a difficult language was overrated), most people who had these computers used them either as gaming machines or as educational toys, or both. Nobody else in my family really learned to program although my Mum sat with me while I typed in listings from magazines (anyone remember INKEY$, which I always pronounced “inky dollars”, leading me to think it must have been a Sinclair in-joke?).

    The funny thing about today’s programmers, even though they did cut their teeth on 8-bit, sub-128K machines (or even 16-bit DEC mainframes, they didn’t have a tenth of the power of today’s entry-level PC), is that they have let efficiency go out of the window despite learning in an age when clock cycles were precious. I recently had to implement a text editor widget and had to override the default paste behaviour by trapping Ctrl+V, so that I could edit out things that newspaper websites insert when you Copy. To do that, I had to set up an “event filter” on the whole widget, so that another object knew every mouse move and keypress, and a whole lot more besides. It would have been so much more efficient to just program a way to disable that keystroke.

  • http://twitter.com/baldywilson John Wilson

    Hear, hear! I’m one of those computer programmers in my late thirties that first learned programming on a ZX81 when I was 7, starting on BASIC, then later learning Z80 on the Amstrad CPC 464. Got my first programming job at 16 because I already knew how to write software, so converting from BASIC and Z80 to Pascal and C (and later 68000 assembly, Forth, C++, Ada, Java, and god-alone knows how many other languages I’ve used over the years) was relatively straightforward.

    I’d add to basic programming skills teaching kids (perhaps in senior school) about TCP, UDP, IP and how their e-mail and web sits on top of those, to give them an understanding how their electronic world works. It’s a sad state of affairs when the world depends on a technology that is relatively straightforward, but seemingly understood by so few people.

  • http://godlessfaith.blogspot.com/ Sam Barnett-Cormack

    I completely agree. What I’ve been wondering about is what programming language and environment will have the greatest pedagogical value. Old school Basic? Modern, visually-oriented Basic languages (like *shudder* VB)? Classic teaching languages like Pascal? Languages of popular utility, like PHP? Problem with PHP is that the web paradigm is too disconnected, IMO, and Basic and Pascal are too text-oriented for the modern child, who’s experience with computers has been pretty much entirely visual. I’ve heard of so-called graphical programming systems, which allow the program to be ‘written’ with GUI tools (not the UI, the program itself - presumably UI as well, though, potentially), though I’ve no experience with them, and that might be the way forward for initial programming education for kids. It ought to give them the insights into how computers work, and the broader pedagogical benefits, without dealing with the cognitive overload of a textual language and syntax errors and so forth, because the graphical tools wouldn’t allow syntactically invalid constructs. I’m tempted to work on something like that, with a purely pedagogical motivation, when I somehow have the time and energy.

  • david.gillon

    I’m going to be a dissenting voice. Certainly my sister has had her class of 7yos doing much of what you suggest, but having progressed from programming a ZX-81 to programming Eurofighters, I’m not convinced that everyone needs to know the basis of programming. It’s the difference between knowing how to drive your car, and knowing how to service it, and not everyone wants to get their hands dirty under the bonnet. There’s a danger of turning people off IT entirely if we push too hard into levels of detail that don’t interest them (cf problems with girls in maths), whereas showing them how to use typical apps so that they’re able to go out, find the info they need and put it to use (planning and booking a holiday, for instance, or chasing down a problem at your local council), is more clearly applicable to their lives. You can show them how programmes are put together, how that technology builds layer on layer to fuel the world around them, I think there’s a clear role for that, but the primary focus of IT teaching, particularly at primary level, has to be producing a society that is comfortable with technology and able to exploit the tools it provides; producing the smaller subset of society who are able to build those tools is a secondary aim focussed at a narrower subset of pupils and IMO that’s more appropriately elective instead of mandatory.

    • http://godlessfaith.blogspot.com/ Sam Barnett-Cormack

      To me, it’s not about teaching them any actual practical programming skills, though it can serve as an opening towards that for those who are interested. It shows people how logic can work, it teaches an approach to problem-solving that, while not universal, is a very useful part of one’s cognitive toolkit.

  • Pingback: Eposode 144: Hacked school bus | Epo's Chronicles | computer hardware stop()

%d bloggers like this: