Everyone needs to know how to program, or not

A common refrain I’ve heard over the years is “everyone needs to know how to program”. Computers are pervasive in both work and leisure. Knowing how to make them do what the humans want is valuable both from a practical standpoint and from a financial standpoint. But does everyone really need to know how to program?

This topic has been on my list for a long time, but I got a convenient nudge on Twitter earlier this week. My friend, speaking about science communication, exactly captured my feelings:

The spectrum of computer skills is very broad. At the high end is computer science (which doesn’t necessarily translate to practical computer usage skills). As my friend Dave describes it, CS “is a branch of mathematics built around complexity.” This is clearly beyond the level that everyone needs. At the low end is basic computer literacy like using standard desktop software. That seems to be a safe bar for “everyone”.

So we know the high end is too high. The low end is a bare minimum. Where’s right spot in the space between those two extremes? I’m inclined to lean toward the low end. Programming, and thus automation, has applications in almost every profession. But that doesn’t mean it’s a key skill for every profession. In my current job, I have almost no need for programming skills. Basic use and troubleshooting of the applications I use is all I need. I wouldn’t tell someone looking to get into product marketing to not learn programming, but I wouldn’t say they have to in order to be successful in the role.

I’m generally skeptical of using the education system as vocational training. Especially in fast-moving fields like technology, curricula can’t keep up with the changes in the field. How much of what you teach a 7th grader about programming in a particular language will be relevant by the time they enter the work force? At best, you can teach broad concepts.

If you asked me what’s driving this push for coding in the classroom, I’d say it’s two things. First, policymakers who don’t understand technology themselves see this as a way to drive economic growth and help the fortunes of their constituents. Second, technology companies are seeing a shortage of workers with the skills they want and so are looking to get the public to fund their job training programs. I don’t see similar efforts to teach electrical or plumbing work to everyone, even though they’re both well-paid and also highly practical to those outside the profession.

So let’s put more computer literacy into the curriculum. But let’s not assume that means programming. If anything involving computers and education needs to change, it’s that computer science and programming curricula need to include ethics courses.

Sidebar: one area where programming in education may help

The main area I see a true benefit for adding programming into primary and secondary education is helping under-indexed minorities get involved. Tech has more than just a “pipeline problem”, to be sure. But while the cultural problems are worked on, it can only help to get more under-indexed minorities interested. If nothing else, it will help dilute the bros.

Online learning: Codecademy

Last week, faced with a bit of a lull at work and a coming need to do some Python development, I decided to work through the Python lessons on Codecademy. Codecademy is a website that provides free instruction on a variety of programming languages by means of small interactive example exercises.

I had been intending to learn Python for several years. In the past few weeks, I’ve picked up bits and pieces by reading and bugfixing a project at work, but it was hardly enough to claim knowledge of the language.

Much like the “… for Dummies” books, the lessons were humorously written, simple, and practical. Unlike a book, the interactive nature provides immediate feedback and a platform for experimentation. The built-in Q&A forum allows learners to help each other. This was particularly helpful on a few of the exercises where the system itself was buggy.

The content suffered from the issue that plagues any introductory instruction: finding the right balance between too easy and too hard. Many of the exercises were obvious from previous experience. By and large, the content was well-paced and at a reasonable level. The big disappointment for me was the absence of explanation and best practices. I often found myself wondering if the way I solved the problem was the right way.

Still, I was able to apply my newly acquired knowledge right away. I now know enough to be able to understand discussion of best practices and I’ll be able to hone my skills through practices. That makes it worth the time I invested in it. Later on, I’ll work my way through the Ruby (to better work with our Chef cookbooks) and PHP (to do more with dynamic content on this site) modules.