|You could same the same thing for any subject.|
I don't think so. Take for example metalworking. Yes, part of the skill cannot be taught and has to be learned by practice. For example, how to strike the metal accurately and consistently; that's basically muscle memory. But a lot of it comes down to just having the right techniques to treat and manipulate the metal to achieve the desired effect.
|Somewhere I read an article by a long-time college CS professor who said that, after several decades and just about every teaching method and technology that he could find, he'd come to the conclusion that some people just don't get programming.|
Just to be clear, I'm saying something different. I'm not saying some people just cannot
program, period. I'm saying no one can be taught
how to program. You either have an intuitive notion of how to do it already, or you don't. Furthermore, there are no pedagogical techniques (that I know of, at least) to bring a student from not having that intuition to having it. If I'm wrong, I would love to hear about one.
I would almost liken it to being taught how to walk. You can have the biomechanics of walking and the neurological details of how the brain communicates with the muscles explained to you, and you may very well understand the explanation and how it would apply to your body, but if the best you can get your legs to do is flail about with no coordination you're just not going to walk.
Obviously the analogy isn't perfect because translation of intention into movement is a basic neurological function, while programming is, IMO, mostly a matter of structuring thought in a particular way. They're similar in that they're not "knowledge-based" functions, so to speak. Knowing how to program is not like knowing how to bake, I'd say.
EDIT: Actually, it's interesting to compare programming to speaking a second language. While learning a second language, the student goes through two distinct stages. The first one is when he knows the grammar and some vocabulary or the language, but needs to expend conscious effort in order to use it, both to understand and to express himself. The second one is when the language has been "acquired" and the effort happens unconsciously and automatically. The first stage is what I would call "knowledge-based". The second one is what I would call "intuitive", and happens only after new networks have developed in the brain. Come to think of it, the distinction is somewhat analogous to software and hardware.