Everyone Should Learn to Code?

DZone 's Guide to

Everyone Should Learn to Code?

Politicians, programmers, and celebrities have said it. Are they right? And furthermore, are they right for the right reasons?

· Java Zone ·
Free Resource

Politicians, programmers, and celebrities have said it. Are they right?

It irritates me. It annoys me. It outrages me. People with very little understanding of schools try to dictate what we do. This is a good example. ‘Everyone’ doesn’t mean eighty-four-year-olds in dementia clinics. It doesn’t mean successful sole-traders. It means children. It means students. It means schools finding time in their curriculums.

Is learning how to program important enough? Schools are constantly pushed to teach all sorts of things from first aid to fractions, environmental awareness to citizenship, birth control to biology. There just aren’t enough hours in the day. Is learning to code a priority or a luxury?

It’s important for you to know where I’m coming from: I’m a full-time secondary school teacher and a part-time programmer—educational software and phone games. I don’t claim to be an expert software engineer, but I know more than the celebrities who probably think that Agile practices have something to do with yoga or aerobics.

Firstly, arguments about whether learning to code will make the individual or the country richer are as irrelevant as talking about the economic value of studying poetry. Surely PE lessons are about encouraging fitness for life rather than churning out professional sports men and women.

It doesn’t belong in a school just because it supports capitalism. Of course teachers want students to get well-paid jobs and qualifications that count in the business world, but that is different to deciding to teach, or not to teach, something because of its potential economic worth. Only ignorant politicians want schools to just be about producing economic units of value.

As well, I’ve heard it argued that the way schools teach programing means students learn bad habits. Unless they are taught professional practices from the start they won’t be any good as an adult. This ignores most of what schooling is about: when I teach a Drama lesson I’m hardly going through the same routines adults would in a professional theatre. Instead I’m trying to teach a particular skill, idea, or process that may, or may not, be something a professional knows and uses.

But this argument also ignores something very obvious in the computing world: things change. For example, I studied FORTRAN 77 at university, taught Logo and Pascal in my first job, used BASIC here and there, worked with HyperCard in the 90s to create some software, and now use Java. I moved on. In schools we teach something and try to enable students to adapt when it changes. Of course we try to prepare them for the world of work, but also recognise that the way things in the ‘real world’ are when they are eleven isn’t going to be the same as when they are eighteen.

I want now to consider some of the benefits of learning to code.

It is, I think, undeniable that learning to program requires people to use and then develop analytical and problem solving skills. It must be admitted that just solving one problem after another doesn’t necessarily make me better at solving them in general. If I complete the crossword in a local newspaper each day it doesn’t mean I will become good enough to solve The Times Cryptic Crossword, though I may improve.

However, the nature of coding is different. You push yourself to solve harder and harder problems (you move on from ‘Hello World’ to writing a simple game) and you look at how other people have overcome difficulties. You should become better at analyzing problems, diagnosing faults, testing hypotheses, and specifying requirements as the complexity of your programs grows.

This leads to a second major benefit: learning how to learn. Of course, direct instruction and classes have their place, but part of learning to code is using other resources: online courses; books; tutorials; the help menu of an application; forums; sample code; etc. If you are going to get anything worthwhile to run you have to find things out and that develops your ability to learn independently. In an age where it is said we spoon-feed students, it is essential they learn how to teach themselves. Sites like Stack Overflow reject questions where people just want an answer to their difficulties, but love a chance to help someone learn.

While learning to code, students also develop literacy skills. There are the technical documents such as APIs and tutorials to read, but students can also be encouraged to read widely to improve their coding skills. Look at the popularity of books like The Game Maker’s Apprentice. How many teenagers can claim to have read another non-fiction book that thick?

Writing instructions about how to play, backstories, dialogue between characters, plans, and other texts associated with games is surely going to improve a child’s writing skills. This is particularly so because there are real audiences for these texts, not just a teacher who will mark it.

The above reasons are good ones, but for me the most convincing arguments revolve around the fact that coding is creative—people make something when they write a program. I want students to be more than consumers; I want them to be producers. Don’t you want children to experience the excitement and sense of achievement that comes from bringing something into existence? Have you looked at a young person’s face after they have succeeded in making something?

But there is even more—producers are critical consumers. When you have struggled to plan, develop, test, and polish any product, you can better critique the results of other people’s labor. We can make young people more discerning by getting them creating.

Of course there are difficulties and of course there are exceptions, but it is clear to me that in principle every child should learn to code.

coding, education, school

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}