Struggling for Competence

The Dreyfus Model

Recently I read Pragmatic Thinking and Learning, by Andy Hunt. One of the early chapters deals with the Dreyfus model of skill acquisition, and applies it to software development.

the dreyfus model of skill acquisition

The Dreyfus model identifies 5 skill levels:

Hunt makes some observations about how to progress towards higher Dreyfus levels:

There are several things about the Dreyfus model which resonate with me, as someone round the advanced beginner/competent level of software development. I certainly have a problem distinguishing between relevant and unimportant details when looking at other folks code. I am poor at applying design patterns, because I don't know them very well and have not practised them. I'm still quite rule based about what I do.

Much later in the book, Hunt discusses how to practice, and makes a particularly important point; you have to have a safe environment in which to experiment. There are two aspects to this. You need to make your coding safe with source control, unit test and build automation. These practices should be applied to your learning projects as well as professional work. (I need to set up build automation for my learning projects). And secondly it has to be OK if you fail - you'll never try anything new unless it is.