The article disagrees with the idea that in order to _understand_ the machine, you must _become_ the machine. But, how to understand how it works without visualizing it quite concretely...
The ability to visualize and work with complex systems entirely in your head is a skill developed by an engineering education, and presumably by a software education too.
[ aaand... AI has entered the conversation ]
> In a modern environment, memorizing the minutia of an API should be as relevant as memorizing times tables.
I'm going to go out on a limb and suggest that some things should in fact be rote memorized when learning something new. For example, I do think that the multiplication table should be memorized, at least up until ten. I've counted floor tiles and made rectangles out of them with my growing children, but I made sure that certain very small, common multiplication products were repeated often enough to be memorized. Likewise, I do bother to memorize e.g. the intricacies of %f float representation with printf(). Memorizing does not preclude understanding root concepts.This is incorrect. If an artist doesn't know what pencils are, then leaning about pencils is learning how to draw.
> Thus, the goals of a programming system should be: to support and encourage powerful ways of thinking
People can naturally think, but they cannot naturally use advanced tools. The goal of education is to acquaint people with information they are lacking. It's not necessary to tell people how to think. Surprisingly enough, when you give a person the ability to build, thoughts on how to use tools will come organically.
Two thoughts about learning:
-- Programming is a way of thinking, not a rote skill. Learning about "for" loops is not learning to program, any more than learning about pencils is learning to draw.
-- People understand what they can see. If a programmer cannot see what a program is doing, she can't understand it.
Thus, the goals of a programming system should be:
-- to support and encourage powerful ways of thinking
-- to enable programmers to see and understand the execution of their programs