At the beginning of the personal computing revolution, several pundits suggested that “in the future, schools will teach programming skills the same way they teach reading, writing and arithmetic.” Well, yes and no.

Yes. Many schools are teaching programming skills the same way they teach reading, writing and arithmetic. Badly. (Ask anyone who has taught college level courses for more than two decades about the deteriorating levels of skills we’re seeing from high-school graduates. Of all the dangerous trends in this country, that one has to be the most terrifying.)

And no. Nobody is teaching programming skills as an equivalent to reading, writing and arithmetic, which was what the original assertion predicted. For the average person, programming remains an arcane craft.

Because I’ve had some experience in code wrangling, I regard programming as one of the most profound of all skills a human being can learn, because it’s thinking about thinking. It looks like it’s about code, but on a much deeper level, it’s about the way we think about problems.

Code isn’t just a list of specific steps to take to get from hither to yon, it is the hands-on application of an algorithm. An algorithm is a specific methodology. It is not necessarily the only applicable methodology, and sometimes it isn’t even the best or most appropriate methodology; that depends on the programmer. But if it gets you from hither to yon in a reasonable amount of time (instantaneously), that’s an acceptable result to the user.

In the hands of a skilled visionary, an algorithm becomes a place where philosophy, invention, discovery and sometimes even sheer artistry get mashed together in ways that produce wondrous results, things that not only were not possible just a couple decades ago, but weren’t even conceivable.

The essential building block of an algorithm, the single most important part of any algorithm, is this: If…then….

All programming depends on this single statement. An algorithm is a decision tree, and the if…then... statement is how it makes decisions. Add the ability to do loops, and you have the two essentials necessary for a programming language. (Everything else is procedural mechanics.) While…do… and do…until… lets you drill down to specific cases of if…then…. This was the essence of BASIC.