November 28, 2013

This is Why Kids Need to Learn to Code

Category: Digital Learning
colorful stacked spools of thread

Proclamations like ‘kids need to learn to code!’ may be accurate but, without some context and conceptual unpacking, they can be rather unhelpful. Thankfully, fellow DMLcentral contributor Ben Williamson has done a great job of problematising the current preoccupation with coding by asking questions like: “What assumptions, practices and kinds of thinking are privileged by learning to code? Who gains from that? And who misses out?” In many ways what follows builds upon these ideas so it’s worth reading Ben’s article first if you haven’t already.

Along with the landscape issues identified in Ben’s article there’s a couple of additional procedural issues that need addressing with kids learning to code. The first is what we actually mean by ‘coding’. While I’m a big fan of productive ambiguity in providing a space for creativity to flourish I suspect that, collectively speaking, we’ve done a poor job of defining what ‘learning to code’ actually involves. Once we’ve gained some clarity on that, then (and only then) do we find ourselves in a position to outline reasons why learning to code might be important.

What Do We Mean By ‘Coding’?

I say ‘coding’, you say ‘programming’. He says ‘scripting’, she says ‘developing’. Does it matter? Well, while there are technical definitions and nuances that can be identified here, in practice these terms are used almost synonymously – at least by a general audience. In addition, there are many different machine languages that can be used by the people involved in these practises, from Ruby on Rails to Objective C, from Python to JavaScript. And what about pseudo-code like HTML and CSS? It’s a minefield.

What I suggest is that we treat the learning of machine languages much as we treat the learning of human languages. Coding means the ability to read and write a machine language. Just as some human languages are more difficult to learn than others, some machine languages involve trickier grammar or more complex syntax. The test in both cases is whether the language learner can create something that makes sense to others. I’ve written something that looks to me like Spanish but can a native speaker decode what I’m saying? With machine languages there’s actually two levels of testing: is the code structured in a way that another human (who understands that language) can understand? and when you compile the code does the machine run it in the way you expected?

Learning a machine language differs from learning a human language in many important ways. One of these is that speaking and listening are not an important part of machine languages whereas they are crucial to human languages. That is to say, coding is not usually performative. Another difference is that human languages are chronological and tend to be structured on a sentence-level basis. Many machine languages, on the other hand, do not require everything to be written in strict chronological order and include loops, arrays and other devices not used in human languages. Coding means the ability to think computationally.

Why Is Coding Important?

Now that we’ve defined coding as the ability to read and write a machine language and think computationally, it’s worth turning to the ‘so what?’ question. Why do we need the general population to be able to do this? Why not leave it to a subset of very highly-specialised individuals and teams who can do this on our behalf? After all, we need roads and buildings but we don’t require kids to learn civil engineering and architecture.

Leaving to one side the top-down argument that it’s ‘good for the economy’, I’d argue that there’s at least three important reasons why kids should learn to code: They are: problem-solving, (digital) confidence, and understanding the world around them. I should re-emphasise that by ‘learning to code’ we’re talking about skills and competencies that people can be better or worse. The important thing here is the attitude and approach of the individual, not necessarily how polished their outputs are.

1. Problem-solving
Writing, debugging and remixing your own and other people’s code are fundamentally problem-solving activities. Whether it’s code that won’t run because of syntax errors, something working differently than you expected, or figuring out how to do something cool, these are all things that involve lateral thinking. And often this problem-solving involves working with other people – either in real-time or following tutorials, blog posts and howtos (and then sharing back).

2. (Digital) confidence
Literacy often leads to an increased sense of confidence. Not only confidence in terms of social interaction but also a sense of agency in shaping the environments in which people find themselves. In digital (or blended) environments, this means people not only being able to decode what they see, but encode it too: reading, writing and thinking computationally instead of merely elegantly consuming what others have produced.

3. Understanding the world
There’s a wonderful segment from a video interview with Steve Jobs in which he talks about the importance of realising that everything around you has “been made up by someone who was no smarter than you.” Realising that you can not only change and influence things, but build things that other people can use is, he says, “perhaps the most important thing.” In a world where almost everything has either a digital component or is somehow digitally mediated, being able to both read and write our environment is more important than ever.

Conclusion

Coding is the ability to read and write a machine language as well as to think computationally. Learning to code can lead to outputs valuable in and of themselves, but the process of learning to code also develops problem-solving skills, (digital) confidence, and helps young people understand the world around them. In many respects, we should encourage kids to code for similar reasons to those we give for encouraging them to play sports and learn an instrument: it’s good for their development.

If you’re interested in getting started with this then there’s plenty of places you can dive right in. I may be biased, but I find Mozilla Webmaker a great place to start in learning the building blocks of the Web – HTML, CSS and JavaScript.

Banner image credit: funadium https://secure.flickr.com/photos/funadium/2386379965