A few weeks ago I read a blog post by Jeff Atwood about this topic. You can probably guess by the title of the post, “Please Don’t Learn to Code” that Atwood would answer “no” to the question I’ve posed above. I’ve thought about Atwood’s article for a few weeks, and I’ve come to the conclusion that I disagree. I think it’s important that everyone should know how to program. Having some programming experience is a valuable tool in our modern world, where computers are ubiquitous.
Atwood starts by ridiculing NYC Mayor Mike Bloomberg’s 2012 New Year’s Resolution to learn coding. Atwood is absolutely right here; this is a dumb resolution. But that’s not because programming would be something useless for Bloomberg to learn. It’s because there are only 24 hours in a day, and the best use the Bloomberg can make of them is to learn things that will help him do his job better. If Bloomberg were, say, 15 years old again and he had a ton of free time on his hands, it would probably be worthwhile for him to learn programming. Not right now though.
Atwood then says, “I would no more urge everyone to learn programming than I would urge everyone to learn plumbing. That’d be ridiculous, right?” Plumbing is an interesting choice for comparison purposes. Just like computers, we interact with plumbing every day, although perhaps not to the same extent. But you know what, it’s not ridiculous. I think that everyone should know some plumbing. I think that we all should know enough so that we’re not completely helpless if the sink is blocked. I’m not saying that we all need to know enough to become a professional plumber; there’s nothing wrong with calling a plumber if you have a big plumbing job. Even if your big job is something you could fix yourself with sufficient expertise, it’s still fine to call a plumber. I probably could replace the motor on my sump pump if it fails, but I’d much rather pay someone to stick their hands into smelly pits and I’d much rather be absolutely sure that the job is done right. However, with something easy and simple like plunging a blocked sink, I think you should know how to do that yourself. Furthermore, it’s a good idea to have a basic idea of how the plumbing in your house works; this helps prevent you from doing dumb things like trying to flush your garbage down the toilet.
With programming, it’s the same sort of thing. I don’t necessarily think that everyone should major in computer science in college, but if they have a basic understanding of programming, it should help them feel more empowered when they need to figure out how to do something, and it might help them understand why some things don’t work the way they think they should.
Atwood writes, “Don’t celebrate the creation of code, celebrate the creation of solutions.” I agree completely. Teaching someone how to program should not be a matter of getting them to memorize keywords and syntax, just like teaching someone mathematics should not be a matter of getting them to memorize formulae and tables. An introductory programming course should be primarily about teaching students how to solve problems, teaching them how to think logically, with the language syntax being secondary. (This is what mathematics classes should be about too. All too often they aren’t, though, but that’s an issue for another day…)
In a world where computers will very shortly be pervasive, it is important to have a basic understanding of how people get them to work. I think that the best way of getting that understanding is to do a bit of programming. Not everyone should become a programmer for a living; far from it. But having an idea of how it’s done will be invaluable in the world of tomorrow.