When I recently visited home in Florida, my mom asked me to go through some old boxes of books left over from my high school days. I got a real kick out of finding the two original manuals for an Apple II which my parents bought for me when I was 12, in 1979. This wasn’t cheap (I think the computer was $2000+ back then) or even obvious (hardly anyone had home PCs at that time). But it was formative for me. Seeing these old manuals brought back happy memories of nerd-dom and reminded me of what a great learning experience it was to develop basic programming skills; they’re skills that I still find valuable today.

Computers are fun!
I think for some reason computer programming is often miscategorized as a discipline to study or a class to take that’s only relevant for aspiring software engineers. I’ve often heard the argument of “Why would I need to learn to program computers? I’m not going into that field, and besides, I know how to use computers just fine.” This misses the point.
We don’t expect that every student who takes a chemistry course becomes a chemist or that every high school foreign language class is going to produce a group of comparative lit. majors. Yet we value these disciplines as part of a broad and well-rounded education. I’d go so far as to say that basic programming skills are even more valuable and more broadly applicable than many of the other skills and classes we routinely demand of high school students, yet we don’t treat them as such.
Teaching you How to Think and Problem-Solve
Computer programming teaches structured thinking and an approach to problem solving that’s incredibly valuable in many situations. Programming in high level languages generally requires you to think about breaking tasks down into discreet & sequential sub-tasks, which is a great way to solve complex problems in many other disciplines. Programming challenges you to think about developing solutions which are general and flexible rather than overly-specific and limited. It encourages you to look at the big picture and solve the main problem, but also consider all the exceptional and outlying cases. And it demands that you be precise: there’s a real sense of accomplishment in fixing all those syntax errors until a program actually runs and does what it’s meant to do.
In college I continued my interest in computers, majoring in Electrical Engineering with a Computer Science specialty. For a while I actually did think I would become a practicing engineer, but after interning for a couple of big companies I decided otherwise, and instead took a meandering route through strategy consulting and marketing. So was my expensive degree a waste? Hardly. Even if I hadn’t ended up in online marketing, my CS background helped me in many ways and nearly every day throughout my career to date.
Teaching Powerpoint Skills Is Not a Substitute
I think it’s great that kids are being exposed earlier and earlier these days to technology in general and computers in particular. What I question though is the heavy emphasis we place on teaching kids and adolescents basic computer application usage rather than programming for critical thinking development. Teaching middle school students to use Microsoft Office apps actually will (it pains me to say) make their potential desk jobs easier (and will certainly make Microsoft happy). But in many ways teaching apps is passive and overly-directed learning, along the lines of: “Operate this program under its existing constraints, learn its features, produce what it’s capable of producing.” Replace “program” in that previous sentence with “machine press” or “lathe” and you see how much this actually sounds more like teaching a trade. There’s a reason they’re called “Applications” and this is no substitute for the critical thinking skills developed by learning real programming.
More and more high schools are offering a variety of computer science electives these days. That’s great, but in my opinion it doesn’t go far enough, because for many students it’s not obvious what benefits these classes would bring them. Requiring high school students to take a basic programming class would equip graduates with important critical thinking skills that can greatly benefit them no matter what they ultimately pursue down the road.

Steve & Steve (and mom and dad) gave me the tools to program 30 years ago.
I can hear your Dad laughing right now!
I’m glad I saved those books for you.
Strongly agreed. Great analogy to Chemistry.
Awesome article. I’m actually going to cite this article for an Intro to Programming class I’m taking in college. I totally agree with your assertion and only wish that Computer Programming had even been offered as an elective in my high school period (I’m only 21, so this wasn’t so long ago).