Home > management > Skills Acquisition

Skills Acquisition

This post is a work in progress for an article about how people develop and acquire skills and what skills are particularly important for software developers…

Before we start with the specifics it is useful to examine the higher order ideas of skill acquisition and then apply those to the skills germane to software developers. A useful framework to describe this process is called the Dreyfus Model.

This model segments up the different stages of skill acquisition into distinct levels: novice, advanced beginner, competent, proficient, and expert. As we progress through the levels of capability with a given skill we move from having our analysis and actions governed by rules, to using nuanced conditional rules, to using varying levels of pattern matching, to finally fully internalizing our experiences into invariant mental representations. Experts then match these patterns against what they observe and then intuit the correct action.

The result is that experts develop an intuitive understanding of a given skill and corresponding domain. One of the interesting consequences for domain experts is that they often have difficulty explaining why they know what will happen and why they should do what they are going to do. This difficulty is caused because experts use their intuition to both understand and solve problems. Experts are often struck by certain knowledge that what they are going to do will work, but not know why. A second notable byproduct of increased skill maturity is an increase in the practitioners sense of inborn responsibility to their craft and the job at hand. True experts can usually be recognized by both their sense of responsibility and their intuitive understanding of their craft.

It is also important to recognize that experts are often the worst teachers of novices. Both novices and experts process information in very different ways: novices need rules, experts need concepts and contexts. Techniques that work when teaching a novice are maddening to an expert, and vice-versa.

The five skills or domains used during the development of correct, quality software are: analysis, specification, design, implementation, and testing. Three additional skills crucial to working in a team are: communication, documentation and planning. Growth in each of these areas is required to mature developers from novices to experts and should be used to measure the progress of developers as they expand their responsibility and influence within their teams and broader organization.

In conclusion we must focus on specifying experiences, capabilities, and responsibilities which will implicitly cross cut against the skills we desire and which we believe will have inculcated the level of maturity needed to perform the job being proffered.

  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: