“Learning is not compulsory… neither is survival.” (W. Edwards Deming)
I was inspired by the book “Pragmatic Thinking and Learning” by Andy Hunt that I’ve read not so long ago and so I decided to write this post which you may say it is almost a review of this book. My intention with this is to show you how you could improve your ability of learning, which is required specially to software developers considering that we need to learn constantly not only technical stuff but also problems domains, and doing this is extremely hard and tiring. I personally think that the common developer (and may not be only developers) overlook this topic. Learning is a skill as programming and riding a bicycle is and so it deserves attention, training, reflection, etc.
First of all we need to understand our behaviour, and a good way of doing it is to go through a model of expertise: the Dreyfus model. It proposes a skill acquisition model and a way to move from beginning levels to mastery of a skill (aka being an expert). After that, we need to understand better our mind to then be able to find ways to learn effectively and catch cognitive biases. Even though I’m not an expert I’ll try to write about how our mind works (and how it doesn’t), learning techniques and ways to improve usual activities like reading. With time I’d like to have here a nice list of techniques, tips and habits about learning.
The Dreyfus Model
It is a model of how people acquire skills through instruction and practicing. The model, developed by the brothers Stuart and Hubert Dreyfus in 1980 (original report here), proposes that a student normally goes through five developmental stages from novice to mastery. It argues that any training procedure must acknowledge the student skill level to address it appropriately, and so, enabling faster progress. Below is a list of the five stages.
A novice has little or no previous experience in the skill area. Novices don’t know if their actions will reach the desired result, and they don’t necessarily want to learn; they just want to accomplish their tasks. Although vulnerable to problems, a novice can be relatively effective if he or she is given a context-free set of rules to follow; they need recipes. Novices can be good with rules, but they don’t know which rule (or rules) is relevant in every scenario; they can’t see the big picture and take the context into consideration. Recipes have the problem that it is impossible to specify everything, so then doubt will appear in complex scenarios (and even on simpler ones!). Recipes can’t take you very far.
After tackling with some real problems and situations, an advanced beginner (or competent according to the original report) is able to recognize and cope with situations that he or she has already faced before, without context-free rules. An advanced beginner can try tasks on his or her own, but difficulty with troubleshooting is still a constant. An advanced beginner usually wants information fast, like someone scanning a new language documentation looking for some method, but unable to understand details of how that anonymous function works or what “passing arguments by reference or by value” means. An advanced beginner doesn’t want the big picture and would probably dismiss it as it is irrelevant to his or her task.
By facing more problems and real world situations, a practitioner becomes competent at something. The relevance of situations is perceived regarding the long-term goal. A competent practitioner can break free from the context-free rules and can start to troubleshoot problems on his or her own. They also can effectively apply expert’s advice. Competent practitioners are great people to have on your team and are usually found on leadership roles, however they still face context analytically and not holistically. Because of that, they have problems facing situations that they’ve faced before if tackled through different perspectives. According to Andy Hunt, they can’t effectively apply agile principles in the ideal way – there is simply not enough ability for reflection and self-correction, and this is a major consideration.
Proficient practitioners make a major breakthrough on the Dreyfus model: they can self-correct. They can reflect not only on their previous results but also on others’ results and experiences. Someone at the proficient stage starts to take context holistically, seeking to understand the big picture. He or she can troubleshoot effectively and perceive deviations from the normal patterns and handle different perspectives of a problem. A proficient practitioner can apply software patterns effectively and he or she is also able take full advantage from agile practices. The proficient level is hard to reach - someone here is more like a junior expert than an advanced competent. It takes a lot of deliberate practice to be proficient at something.
This is the end of the line. Experts are the primary source of knowledge in any field. As modern wizards, they apply pattern matching and make decisions based on intuition (grounded by a vast array of experiences) instead of analytical thinking. Because of that they can’t explain their thought processes – it’s almost as they don’t know how they do it - it just feels right for them. Experts are extremely rare – statistically, less than 5% of the world population is expert in a field.
The path from novice to expert is long and complex and a lot of things change as your skill increases, but there are three major changes important to note:
- Moving away from reliance on rules to intuition.
- Taking context in consideration, therefore seeing problems not as a collection of bits but instead as a whole.
- Start to see ourselves not as detached observers but instead as part of the system.
Below are two tables made by Dr Stan Lester with characteristics of every level.
As showed in the Table 2, people from different skill levels must be treated differently. An expert needs details and can’t take constraints, but novices should be given context-free rules and are disastrous when not supervised. Treating everyone in the same way isn’t a wise decision - Andy Hunt gives us a nice analogy about that: it’s like “herding racehorses” when applying iron-clad rules to experts and “racing sheeps” when you send novices to face a problem on their own.
The model is also important when studying on your own: it makes no sense to tackle big and difficult problems when you have a skill at a level below proficient - challenges must be carefully picked in order to maximize the learning process. In the next post (that hopefully will be ready in a week) I’ll write about the best way of improving a skill on your own that is through deliberate practice. Besides that, I intend to write about how to enhance sensorial input and I’ll also try to explain how to improve common learning methods (like reading) as well as some not-so-common learning techniques like mind maps.