In a previous Meta post I made, someone replied that I seem to be pessimistic about teaching anything to anyone. This is true, but until I read something recently, I could not explain why. Since this is a site about teaching Computer Science, and I have taught programming in the past, I wanted to provide the information I came across so that perhaps we could address it in our approaches to teaching.
In the book The Righteous Mind the author explains that we hold most of our knowledge in a vast unconscious and non-verbal repository of experience, and that our conscious-verbal reasoning is almost entirely "explanations after the fact". This makes sense, and it explains why people learn by doing, not by listening or reading. At best, taking in distilled knowledge from others gives us a way to recognize patterns that arise when we have a new experience. It does not and can never replace experience, because our minds simply don't work by indexing words and concepts verbally. That is the slow boat that arrives long after we have determined the answer, usually in less than a second, without any idea how we made the leap.
Programming is fascinating to me, and has been since 8th grade long ago, because it is a cooperative enterprise between my experiences of working on difficult (for me) programming problems, and gradually comprehending an answer from a series of prompts and forays by my unconscious mind, provoking little moments of recognition in my conscious mind. It is like riding a horse through difficult terrain: both have essential knowledge and expertise, both are needed to get the job done.
You can't teach the unconscious experience, each person has to acquire it for themselves. This is no different from any other thing that humans do or teach. Welding class consisted of some brief lectures, and hours of making steel melt. Back and forth, around and around. There is no MOOC welding class.
Most of my early learning in programming was ideas I came up with myself, that I skipped lunch to try to get working on a PDP-11 terminal.
The book says that the unconscious experience is not accessible, not amenable to reason. It stays put even when we see it proven wrong. We see this in unconscious bias and racism issues. People can add a layer of temperance, but they cannot uproot their experience from childhood.
It seems fascinating that the brain works like a gigantic neural network, coming to conclusions that we can never understand and probably cannot really alter. Narrow training sets produce poor performing neural networks, and over-training is a bad thing. Some day we will have an AlphaGo of programming, and then we won't even have to have the experiences anymore, the same way most people could not ride a horse if their life depended on it. But I think it is still a good idea for some people to understand, in depth and in detail, how computers actually work. Heaven help us if we finally lose that knowledge.