Teaching computational thinking

I spent several days last week at the strategic planning retreat for the Georgia Tech College of Engineering. I was asked to prepare some thoughts for the group, elaborating on what I perceived as the deficiencies in my undergrad experience at Georgia Tech. Along the lines of my previous post about the sad state of computer science education for engineers, I lamented the fact that most graduate students and engineers I know can’t program.

It’s not that they don’t want to. Most honestly wouldn’t even know where to begin if they recognized the need. Give one of our graduates an interesting problem to solve, and they will likely fire up an Excel worksheet. There are certainly many situations where Excel is the best tool for the job—but its rank as the default has led to its application in many cases where a better tool or algorithm would be obvious to anyone with a bit more imagination.

Anyway, imagine my enjoyment when Profhacker linked yesterday to the following blog post from the blog Quantum Progress. Here’s a great quote:

Students must learn how to think computationally and algorithmically so that they fully understand what a computer can (and can’t) do, and then be able to instruct it to do so.

I say think computationally, and not program for a reason. Thinking computationally is about learning when to use a computer so solve a problem. It’s all about identifying when and where computers will be useful in helping to solve a problem. Thinking algorithmically is about translating the problem into an algorithm that you use to direct a computer to solve the problem. Programming is the more mundane task of turning the algorithm into a machine readable set of instructions for the computer to carry out. My claim is that we spend far to much time teaching people to believe that the incredibly exciting field of computer science is all about programming, when in reality it is about thinking, and this turns off most students, and prevents them from ever seeing just how a computer could transform what they are able to with their interests. [Read the full article]

This is what I was trying to get at in my comments at the strategic planning retreat the past few days. It’s exactly what I see lacking in my generation of engineers—technologically advanced yet cognitively dependent. Engineers need to leave our schools with advanced computational frameworks in mind. They shouldn’t just be using black box engineering tools—they should be creating them. Program or be programmed, as Douglas Rushkoff argues.

When all you have is a hammer, everything looks like a nail.