This is likely to be the first of a few posts on this theme.
One of the common memes going around the tech industry at the moment is "Kids don't get to do programming, oh the horror!". There's a petition to start teaching programming in year 5 at primary school (9-10 year olds for those without a small child). There's been various comments lamenting the death of the BBC Micro in the eighties and a lot of rose tinted glasses about what it achieved, and why. To that end some people think that lack of hardware is the problem, and have started a project called raspberry pi to try and make some affordable hardware. Heck, even hoaxing hoaxing a receptive audience (and a non-receptive one) about a BBC codelab has happened, as a means of trying to get something started. Lots of people think "the BBC should do something". (Consider "why?" for a moment...)
Getting my cards out
I don't think this lays all my thoughts on the table, but it's a start:
- I agree that programming - or more generally computational thinking needs to be on the curriculum more . (much more)
- I've signed that petition - you should too. It's something that is a very good idea.
- The Raspberry Pi is in my opinion misguided, but I'm glad they're trying. Geeks like to throw hardware and software at social, political and economic problems. That rarely works until you've solved the social, political and economic issues. However, I concede some of these things are chicken and egg, and if you can't make an egg, maybe try making a chicken.
- The hoax thing was a huge mistake. I've told the hoaxer this directly, but also encouraged him to keep going and that I'm sympathetic to his ideals. Anyone who cares that much is my friend as far as I'm concerned.
I don't think people have thought about the why, nor the what hard enough though. (Let alone the who, where, when or how)
Myth: There's no programming in schools
After all, it's a myth that kids don't do programming. Geeks latch onto this, very easily, and then say "it's all bad". However, children do do a little programming, and then they stop, which personally I think is a bad thing. Indeed, the way computers in school appears to be taught is as follows:
- Infant school, in year 2, they learn to control a basic turtle type robot using either buttons + memory, or a cutdown version of logo.
- Secondary school, they get taught to use some office applications
- Sixth form, depending on which one you go to, you may get taught to program a spreadsheet or database.
It's very easy to attack this, but counter productive. After all, do you want to get rid of:
- Infant school, computers are used as a tool to explain geometry
- Secondary school, they're taught essential life skills regarding using a piece of technology. This is akin to being "taught" Art but not taught to stretch your own canvases, nor make your own paints.
- Sixth form, advanced usage of applications for automation of basic tasks
I'd expect your answer to be "no". So rather than jump straight in with "how do we get more coding in the curriculum", let's consider:
- Why did kids in the 80's really start coding?
- Why did coding drop off the curriculum ? Why was there a change from "Computer Studies" being about building things (~'88/89) to being about using computers ?
Programming is Hard
Programmers really like to say, a lot, that programming is Hard. And yes, that's Hard with a captial H deliberately. If you're in charge of setting a curriculum, and you know there's university courses where people start there and learn programming, you might reasonably go "well, we don't teach rocket science to children, nor mathematical analysis from formal axioms and formal proof to kids, so leaving programming until later makes sense". So given that, why the outcry from many a developer?
After all, you can't have it both ways you say. People simultaneously make these two comments:
- "It's difficult, really difficult, listen if you think it was difficult to program your microwave oven to roast a chicken, boy let me tell you how hard it is to write a program that goes ping"
- "Why isn't my 8/9 year old being taught to write programs?" (When their 8 year old doesn't yet know their times tables, how to spell properly or basic punctuation...)
Otherwise rational and skeptical programmers will miss the logical schism between these two points.
Why am I, as a parent of 2 children (girl and boy, 8 and 9) anxious that they should understand the fundamentals of programming? Passionate about the subject even ?
Well, for pretty much the same reason we teach children about action and reaction, the same reason we teach children about soda bottle rockets, the same reason we teach basic maths, basic maths principles, the core ideas of science, the basics of artistry, the basics of poetry, how to structure stories, essays and so on - because these become the cores of tools that enrich the lives of our children.
Ask an 8 year old that if they could build anything on a computer, what would it be and you'll get a dozen different answers. However, some commonalities I've noticed:
- I want to write a game - like those on titter.com, or the BBC website .
- I want to share it with my friends
- I want to have my own social network, just like Club Penguin or Moshi Monsters .
If shown that hardware can be played with:
- I want to make a games console (then describe something like a DS)
- I want to make a robot cat
- I want to make a robot that can bring you cake. (When confronted with a robot hand)
Reality : Children are taught computers, but only at a crippling level of use
I think the reason why geeks really get annoyed that kids don't get to learn to write code, isn't because they expect all kids to write code. It's because we're teaching them to be cripples. We're teaching them that these exciting, magical devices are non-exciting black boxes and all they can do is edit documents, play with existing apps and play existing games, and chat to their friends.
Computers, at their best, act as intellectual augments. They augment our intelligence as a means of allowing us to make better predictions. They augment our abilty to create through the wave of a mouse, a swish of a gesture, through typography, through mixing, through doing and undoing, through being able to play with ideas in ways undreamt of 100 years ago. They allow us to create amazing films which would take a cast of thousands or hundreds of thousands to act, or years to animate by hand. They allow us to replicate our intelligence into devices so that we can do many things at once. They allow us to share our thoughts, feelings, our loves, our hates, in ways that enable us far greater support and sympathy from people we could never have known otherwise.
Not only that in order to write code, you need to be able to understand how to break a problem down into manageable chunks. How to delegate behaviour and actions in replicable ways. In short, you learn the tools for solving problems. You learn tools for understanding, really understanding a system. You understand how to pitch ideas at a level that needs to be understood. The reason for that is because you constantly do that when writing code. You abstract this concept away to this. Generalise a principle of behaviour to that. Question assumptions to get to the core of an idea. How do i understand the brain? Let's model a neuron and find out what happens using many.
Simply learning to use applications is the same as learning how to add up, subtract, multiply and divide. It's like learning how to write words on paper, use adjectives,ad-verbs, nouns, sentances. For many in the world those are the basic core skills. However, learn to use a spreadsheet properly, and you can juggle household finances, or count calories. Learn to use a database and you learn more skills. Rather than just use a blog, you start being able to script the blog, so the computer starts doing the work for you. Start teaching the computer to do things that you know how to do, and you start freeing up your own mind for other, more interesting things.
The real motivation
Teaching kids to code gives them tools to augment their own intelligence and intellectual capacity. It allows them to solve problems in more refined and mature ways. It allows them to experiment and create things their grandparents could only dream about. It allows our kids to have a better life than those of either our parents or hopefully ourselves.
It's as vital today for children to learn to create code now as it was a pre-industrial society to know how to grow your own vegetables, how to fish for fish, how to bake cakes, how to make a chair, or bed, or table.
Without learning these skills, they'll be left at the mercy of those who do have them, and in a world dominated by code for getting our food, for transportation, for managing the economy, for sharing information, for protecting privacy, for creating art, films, entertainment, music.... in a world where in a "free" service, the consumer of the service is the product, do you really want your children growing up simply to be products and consumers of products, or the builders, thinkers, dreamers, makers, lovers, entertainers, singers, educators and creators ?
I'd hope for the latter for my children and I suspect many others would too. In the coming age, being able to code - to be able to create controlled automation of intellectual tasks - is going to be a vital skill. In the past intellectual augmentation simply wasn't possible, now it's critical, in the same way that education became 100 years ago.
It's also fun.
That's my motivation, what's yours ?