I used to study Tai Chi. My teacher recommended I read the Tai Chi Classics, which is a collection of poems written by Tai Chi masters over the years. I read a lot of it. It was very poetic and abstract, but mostly it gave an air of mystery to the art. I didn't understand any of it. Later, as I practiced and developed some skill, I reread parts and they suddenly made some sense. They mapped to my experience rather well.
A lot of what I needed to learn was the jargon of Tai Chi. But there was still a lot other than jargon that I didn't understand. Things were happening in my movements that I couldn't sense. A whole world waited for me to explore with its own logic and internal consistency. As I practiced, I tuned into it, and with a lot of guidance I started to discover it.
Over the years I've been exposed to many new fields, and my experience is always the same: meeting an expert is like meeting a mystic. To explain their process is to get a description of a world I can't even see. Expertise sounds mystical.
The frustrating part is that these fields aren't mystical at all. They're highly technical. They require years of study, experimentation, and practice. There are two unfortunate parts to this apparent mysticism. The first is that someone talking about something they're good at is nearly indistinguishable from bullshit and quackery. The second is that someone who really wants to learn the skills can get frustrated because there isn't enough information in the mystical-sounding speech to learn it. As Kathy Sierra puts it, so much technical writing is technically correct but only clear if you already understand it. It's not just engineers. Tai Chi masters had this problem, too.
So much of learning a skill is learning to perceive. You need to discriminate things that were not in your awareness before. Your neurons need to see the patterns many times before they make the necessary connections. These things take time.
How many hours of playing scales do you need to become a musician? How many things must you cook before you start to understand the subtleties? Those skills combine physical skill (finger dexterity, chopping skills) with conceptual skills. Programming doesn't have much physical skill involved (matching braces?) and is mostly conceptual.
It's a huge advantage for piano. As a beginner drills the finger exercises, they are also building the groundwork for the conceptual skills. Programming, however, is almost entirely conceptual and there are non-linearities at every turn. A sort algorithm that works fine for small lists may take forever for large ones.
I wonder what physical drills would look like for programming. "Turn this nested conditional into a single if-then-else-if-else." "Inline this function." "Convert this iterative function to recursive." By doing that, would the apprentice gain deeper insight into the nature of code?
Lots of challenges await us as we learn to teach programming. But it will be necessary to overcome them. Our civilization is becoming more computerized and more dependent on good software. Just like we are dependent on literacy, we will need to program, even if it's only casually. I hope that we can figure it out. Necessity will guarantee it.
PurelyFunctional.tv is the best place to learn functional programming. At least that's what I'm trying to make it. And I need your help! I need other teachers who want to share the great ideas of the past 50 years of programming and get paid to do it. If you're interested, please watch the invitation video.