Reading and signing the Manifesto of Software Craftsmanship is a piece of cake, but how can one actually get there? Continuous learning is key to achieve excellence in any kind of discipline. How can that be practiced efficiently?
A common way of looking at the matter is: as one gets more practice, more experience, he/she will get better along the way and the amount of improvement is more or less proportional to the time spent on practice. I think such a one-dimensional explanation is not even close to reality. It doesn't explain why there are senior professionals with decade(s) of experience who keep repeating junior mistakes or why there are juniors progressing and performing brilliantly.
The most relevant pattern I recognized to explain these differences is not necessarily amount of initial theoretical knowledge or even intelligence but generic attitude toward the work. The cause of this may be very simple: completing a task to one's best knowledge only uses current knowledge. New knowledge is not gained, only by coincidence. Efficient learning requires a little bit more: critical thinking, constant evaluation of the solution and active effort to find improvements. Enthusiastic people often do this naturally. The improvements - however tiny they may be - accumulate and eventually make the difference.
Generic principles can be very useful guides for beginners and experts alike. This one I've read in a chess book and seems to apply to this topic fairly well: "Always look a little deeper, than it seems to be necessary".