I saw the Pragmatic Wetware book by Andy Hunt. “Hmm”, I thought, “a book on the human brain and how it works. Interesting, but I have too much else to read and study.” Wrong.
Apparently I had missed the pragmatic part of that title. As I am averaging three to five technical books a month right now, an investment in becoming more efficient in my learning and study would surely pay off. So, I got the book, and I am glad I did.
Just as you want to be an efficient coder, if you are doing a lot of studying, you want to be an efficient learner. I will talk about a few of things I found over a few blogs, but I highly recommend purchasing this book and implementing it.
In the Dreyfuss model, there are five levels of progression of mastery in terms of problem solving and the mental models you form:
- Novice. They have little experience to rely on, but they can follow context-free rules (recipes) to guide them (think ISP help-desks and pre-canned scripts).
- Advanced Beginner. They can break away from context-free rules a little bit and try things on their own, but they do not have a big picture understanding.
- Competent. They have developed conceptual domain models and can work with them and solve problems.
- Proficient. They can reflect, improve, and learn from the experience of others. They can apply maxims (as opposed to just recipes) to problems.
- Expert. They work from intuition instead of simply reason and are primary sources of information.
Becoming an expert is more than just collecting a body of skills and knowledge; it is about moving to intuition-based problem solving based upon those experiences.
We have a great cookbook that my wife and I pick out a new recipe from to try each week. I take the recipe, and I follow it carefully (X amount of flour, Y amount of seasoning X, etc.). A great chef (such as my grandmother) did not follow a recipe – it was based on intuition gained over experience (a pinch of this, adjust it this much because of the humidity, etc.). I tried to ask my grandmother once how to make something, and she couldn’t really articulate her responses beyond “add a little bit of this” and “cook it until its ready but not too long”. This is the typical mark of an expert.
What does this mean in terms of coding? Well, it means becoming an expert is a little less about collecting skills and more about applying skills intuitively given a particular context. Any fool can apply a parade of various design patterns (I recall being one of those fools 13 years ago), but an expert will intuitively apply the right pattern given a particular context. That seriously shifted my paradigm when I read it.
Personally, I have a backlog of skills I am studying and investing in to increase my knowledge and skills portfolio. However, I plan to spend a lot more time going forward on context. One of the things I will soon be doing is personally reviewing my entire technical career to determine what I did and did not do right given the particular contexts I was working in. Am I repeating any poor patterns, what should I continue, what should I drop? I expect it to be a worthwhile exercise.