We can’t solve problems by using the same kind of thinking we used when we created them.
Wouldn’t you like to be the expert? To intuitively know the right answer? This is the first step of our journey together along that road. In this chapter, we’ll look at what it means to be a novice and what it means to be an expert—and all the stages in between. Here’s where our story begins.
Once upon a time, two researchers (brothers) wanted to advance the state of the art in artificial intelligence. They wanted to write software that would learn and attain skills in the same manner that humans learn and gain skill (or prove that it couldn’t be done). To do that, they first had to study how humans learn.
They developed the Dreyfus model of skill acquisition,[4] which outlines five discrete stages through which one must pass on the journey from novice to expert. We’ll take a look at this concept in depth; as it turns out, we’re not the first ones to use it effectively.
Back in the early 1980s, the nursing profession in the United States used the lessons of the Dreyfus model to correct their approach and help advance their profession. At the time, the problems faced by nurses mirrored many of the same problems programmers and engineers face today. Their profession has made great progress, and in the meantime we still have some work to do with ours.
Here are some observations that ring true for both nurses and programmers, and probably other professions as well:
There’s more to skill levels than just being better, smarter, or faster. The Dreyfus model describes how and why our abilities, attitudes, capabilities, and perspectives change according to skill level.
It helps explain why many of the past approaches to software development improvement have failed. It suggests a course of action that we can pursue in order to meaningfully improve the software development profession—both as individual practitioners and for the industry as a whole.
Let’s take a look.