This article touches on something close to my heart: helping students get beyond the gap between just knowing a bunch of things and acquiring the “mind of the developer” (borrowing a phrase from an anthropologist friend) – the point at which the person shifts from just collecting knowledge, skills, and facts to having the mind-set of how best to apply them, when not to apply them, know which ones apply, and so on. In another analogy, the jazz musician who knows when to lay out, when to not play the note, how to phrase, and produce jazz, not just strings of notes.
the place where the intermediate programmer tends to get stuck (and many end up stuck there for life) is thinking that the difference between a beginner and an expert can be measured in how much stuff you know. That’s only half correct, and it emphasizes the less important half.
This is where proficiency comes in. And at its essence, proficiency is about “why you do things a certain way”—It’s the difference between understanding each of the parts of a problem individually, and understanding how the parts fit into the whole.
The gap between competence and proficiency may explain why so many people struggle with high level programming ideas
Not everyone gets there, but I think most who try can eventually get there. I’m still not sure what part we educators play in this, other than give encouragement and provide a rich environment for learning.
Proficiency is learned, I feel, in the doing of something, with the guidance for introspection and reflection.