Understanding programming

What kind of thought process do you need to understand programming?

Alan Kay - Have designed a few programming languages

Even if you are programming in a declarative language, you are organizing a structure of interacting relationships whose realization on a computer will cause desired effects to happen.

The next levels of thinking can feel very different, and to such a point that many “programmers” only choose a few ways to think. For example, classic imperative data-structure-munging programming thought is very different than classic recursive “Lisp-type” programming thought — the first is very direct, and straightforward, and also prone to many kinds of errors — the second is “strategic”, subtle, but also far fewer wrt bugs. “Real OOP” design and programming is rather different from either of these, but most good versions of it resemble the second.

However, for the purpose of this question, I think the simplest dimensions to ponder are (a) the one that stretches from the tactical to the strategic, (b) the one that stretches from “tinkering” to “real engineering design”, and (c) the one that stretches from the ad hoc to the mathematical.

A much more subtle, and ultimately all important, dimension is

(d) the one whose rich direction points to “real science”. This is where the kind of thinking can be done that leads to “real inventions” and “really new perspectives” on what programming could mean.


Links to this note