|
|
From Apprentice to Journeyman :
Dave Hoover : Home
|
Context: You have developed a deep understanding of Your First Language and are walking comfortably on a plateau of competence. Your colleagues recognize your abilities and call on you to help them solves problems in your area of expertise. You have pride in your skills.
Problem: You are struggling to learn new things and it seems somehow harder to acquire new skills now that you have the option of Retreating Into Competence. The pace of your self-education seems to be slowing down despite your best efforts. You fear that your personal development may have stalled.
Solution: While retaining the confidence you have gained through your learning, set your previous knowledge aside as you approach new situations. As Yoda so wisely puts it, "You must unlearn what you have learned."
Wearing The White Belt is based on the realisation that whilst the black belt knows the way the white belt has no choice but to learn the way.
Part of the approach Dave took as a family therapist included maintaining a not knowing stance. Families in difficult circumstances were experiencing a unique reality that, despite his training, Dave could not fully appreciate. While he acknowledged his skills at facilitating constructive questions and conversations, Dave was taught to refrain from believing that he had any expert knowledge into the realities that these families experienced. While this appears to be counter-intuitive, in reality it fosters an attitude of respect and curiosity that opens up unforeseen possibilities and solutions. Rather than pushing solutions down on the family, a not knowing stance helped the family and Dave collaborate to find solutions as a team.
Taking this approach to learning new technologies accelerates the learning process tremendously. Training yourself to suspend the use of your customary programming idioms allows you to discover new possibilities. Yet, as a programmer finally feeling proud of achieving a significant level of expertise, taking a step toward your ignorance and allowing yourself to look foolish can be painful. But consider the words of George Leonard from the final pages of his book Mastery:
We have to be able to put aside our past experiences and preconceptions to allow in new knowledge. This is especially difficult when trying to learn your second programming language because this will likely be the first time that you will have to sacrifice productivity in order to improve your skills. Previously you would have looked at problems with little in the way of experience about "the correct way" to solve them. Now you must learn to avoid trying to synthesise new and old knowledge until the new knowledge has had time to sink in.
One of the benefits of adopting this mindset when learning a new language, tool, or business domain is that you are open to learning how to express yourself idiomatically, thus smoothing your communication with existing experts in that field. By avoiding the old problem of "writing Fortran in any language" you gain a far deeper understanding of new tools which means that when you eventually reconcile new and old knowledge you are better placed to develop productive insights from both fields.
Take the following Java code as an example. It generates random numbers for the United Kingdom's National Lottery. It does this by printing a set of 6 distinct numbers from 1 to 49 inclusive.
public class Lottery {
private static final int NUMBER_OF_RANDOM_NUMBERS = 6;
private static final int MAX_RANDOM_NUMBER = 49;
public static void main(String[] args) {
SortedSet randomNumbers = new TreeSet();
Random random = new Random();
while (randomNumbers.size() < NUMBER_OF_RANDOM_NUMBERS) {
Integer randomNumber = new Integer(random.nextInt(MAX_RANDOM_NUMBER) + 1);
randomNumbers.add(randomNumber);
}
System.err.println(randomNumbers);
}
}
If you were asked to reimplement this in a language like Io you could reuse a lot of your Java knowledge and write it like this:
list := List clone while (list count() < 6, n := Number random(1, 50) floor if( (list contains( n ) ) == Nil, //true if list doesn't contain n list add( n ) ) ) list sort print
But when you are asked to implement it in a very different language like J you will find this approach doesn't work. Only by Wearing The White Belt, accepting that in a language that doesn't have loops there must be a radically different but nonetheless valid way of solving problems can you make progress. So in idiomatic J the answer is:
sort 1 + (6 ? 49)
Complementing Wear The White Belt with Practice Practice Practice and Reflect As You Work will allow you to appreciate the deeper commonalities between the different sets of knowledge that you possess.
Home : Dave Hoover
: From Apprentice to Journeyman
| Copyright © 2001-2012 Red Squirrel Design, Inc. All Rights Reserved. |