I've just read The Government wants to teach all children how to code, Here's why it's a stupid idea by Willard Foxton on his Telegraph technology blog. I found the article incredibly short sighted and full of bad stereotypes that miss the point of teaching children to code.
I'm not going to pick apart the author's points, from the looks of the comments section on the post I think that's easy enough for anyone to do. Instead I'm going to give 3 positive reasons that we should be teaching children to code from a young age.
Britain's teaching quality is not very good when compared to countries like Sweden, Finland, and some countries in East Asia, and the reason usually cited for this is that we tend to teach children facts to pass exams rather than ways of thinking that they can apply everywhere. This is the driving reason behind many recent changes to the education system, particularly those around the ways exams are done.
I think one of the most important aspects to learning, is learning to solve problems. This means taking a high-level question like "Does the Higgs Boson exist?", and breaking it down into elements like "How can we detect it?" and "What confidence do we need in order to assume it exists?". Children are already taught some elements of how to break down a question and design a scientific experiment, but it's often very basic.
In programming however, this breaking down of problems into simpler elements, and composing multiple parts to form a solution, is arguably the most important aspect. People talk a lot about teaching 'algorithms', but I see this as just a special case of learning about abstraction and composition. These skills are applicable in so many areas: science, technology, engineering, mathematics, economics, business, art and more. They don't have to be taught through programming, but I think learning to code is the quickest and easiest way to learn it.
It's not up to volunteers and organisations like Code Club to teach children essential life skills, that's what school is for.
Programming is not just for programmers. When I graduate I will become a software developer, and my career will probably involve that for quite a few years so programming is clearly very important for me. However it's also applicable to a wide range of subjects. My friends who study Physics learn Python in order to more efficiently solve problems they encounter, those who study Maths often learn Matlab so that they can apply complex theories they learn to real world examples, even my friend studying Geophysics has written C Shell (yes, really) code to automate the processing of large datasets to generate useful graphs of seismic activity.
If you want a really high paying job coming out of a computer science degree, you go and work in finance. If you can come up with a mathematical model for some sort of market force, that's really useful to the banks. But if you can write that model up into a piece of software that they can run thousands of times a second in order to do high-frequency trading, you're worth millions in revenue, and are far more useful.
One of my friends at university, Philip, is doing a PhD in Chemistry. As a part of this, his supervisor gave him and two others some spreadsheets with large amounts of data in to use in their calculations. The supervisor estimated it would take around 2-3 weeks to process manually in Excel. The other two students got stuck in and I'm sure had a very boring few weeks, but instead Philip fired up Python and wrote some code. It took him about 2 hours to get it to the point of being able to process a single result when the others were already much further in, but the value of programming a solution is that once you can run it once, it takes no effort to run it many times more. Philip finished the 2-3 week assignment in under 3 hours, because of the automation he could apply to the task.
Even a field like sociology would probably benefit in some ways from a knowledge of programming. Do you want to understand friendship groups? You could survey a few thousand people and get a basic understanding with months of effort, or you could use the Facebook graph API to traverse social groups and have a sample size of millions of people in much less time.
Unemployment on my course at university seems to be nearly unheard of. We are very lucky to be in high demand, and demand only appears to be increasing. As our problems get increasingly more difficult to solve, and the data we are using gets bigger, more and more jobs are going to start requiring programming experience. Already, in scientific research, the applicant who can write up their solution in code so that it can be run on a supercomputer is at a huge advantage over the applicant who can only use Excel. And those who work in business development and market research are at an advantage if they can write SQL database queries, because they can extract more useful information from the data they are given.
Of course many people still won't need to be able to write code in their jobs, but at the same time many people won't need to perform practical science experiments in their jobs, yet the importance of doing them in school isn't questioned.
Those who can code will be more employable in so many types of job in the not too distant future, and if we aren't teaching it to children then they are going to lose out to people who grow up in education systems where they are taught to program.
“We shouldn’t teach kids to code as they won’t all become coders” “We shouldn’t teach kids to write as they won’t all become writers”— Martin Pilkington (@pilky) October 24, 2013
Our problems are no longer simple, we've become too advanced. In the past we used to be able to answer questions with a few measurements and some mathematical knowledge, but we have so much more data now. In order to effectively measure population demographics, we need to use datasets with millions of people. In order answer the tough scientific questions we need far higher precision than we can deal with manually. To understand economic forces we need to be able to look at market data every 10 milliseconds, and to look at how the web, possibly humanity's most important resource, we need to survey billions of websites a month.
These problems are only getting bigger and more complex. We are just not able to understand data on a large enough scale without computers, and those who can't make computers do what they need are going to be left behind.