The coders gene

adminguy's picture
Posted November 4th, 2014 by adminguy

"The time has come", the walrus said,
"To spill a few beans:
Of programmers - deliberate practice - and skills,
And whether programmers are born,
With a pair of coder's genes"


 
You might have heard of the 10,000 hour rule. It was first suggested by K. Anders Ericsson and colleagues in their paper - The Role of Deliberate Practice In The Acquisition Of Expert Performance, and was popularized by Malcolm Gladwell in his book Outliers. This rule which was formulated after studying several expert level performers such as musicians, sports people, as well as others (for factors which lead to their exceptional expertise), claims that ten thousand hours of deliberate practice leads to expert level performance.
 
This reminds me of a discussion I once had with a friend. He believed that programmers are born. According to him, those who become good programmers are born with an analytical bent of mind and other qualities which make people excel at programming. I offcourse disagreed. I insisted that even if a person is not born with an innate ability to become a good programmer, he can still improve his skills by practicing his craft. 
 
Epigenetics has shown that we need not be at the mercy of our genes. Another study showed how London taxi drivers had thickening in the regions of the brain involved with visual spatial capabilities. This clearly shows that driving a taxi, while keeping a mental map of the city, and making constant decisions about the best routes, lead to changes in these taxi driver's brains - something we call neuro-plasticity. 
 
What I am really trying to say is, we can all cultivate our skills by engaging in deliberate practice. Soccer players have done it, musicians have done it, so have chess players, and so can programmers. If you are convinced that practice can indeed lead to excellence, then your analytical mind might have already started asking questions such as - will any kind of practice help me excel ? Or do I need to practice in a specific way ? How should I practice ? What should I practice on ? 
 
These are all very good questions, and understanding is the key to getting the results we desire. You see, 10000 hours of any practice will not help, but 10,000 hours of deliberate practice certainly will. Deliberate practice is not just any kind of practice. I cannot stress how important this distinction is. Imagine spending 10000 hours repeatedly writing code to concatenate two strings. That will not make anyone an expert programmer (but it might give many people carpal tunnel syndrome), because it is not deliberate practice. Deliberate practice always involves effort, pain, and focus. It transforms us from a state of clumsiness and not knowing to a state of expertise (although often in a well defined skill). The trick is to practice at what Daniel Boyle calls The Sweet Spot in his book The Talent Code. The Sweet Spot is that place which is just out of your current comfort zone. It is the zone where you are uncertain, and unskilled, where you feel your brain pulling back and saying 'OMG I don't want to go there !' . This is where you should practice until you bring those skills within your comfort zone, and then you go to the next level. 
 
For example if you already know how to determine if a String contains a particular substring, your Sweet Spot would be to use regular expressions to determine if a string refers to an email address - that would be clearly out of your comfort zone, but not so out of it that it will make you freeze. If it's too easy, it's boring and you don't get better, but on the other hand if it's toooooo difficult then you won't even get started. Practicing at the right level of difficulty is the key to deliberate practice. But getting the degree of difficulty right is not the full story. Our brains are experts at forgetting. If you really want to wire something in your brain, you have to practice until you are perfect. Practice moves stuff into long term memory. So finally, to repeat what I just said - deliberate practice involves practicing repeatedly at the right level of difficulty, until you have mastered a skill.
 
As a programmer there are many ways you can engage in deliberate practice. If you are a novice programmer, we recommend  practicing with these exercises. We have created exercises for several programming languages like Java, C++, C#, PHP, Ruby, and Python. You can do these exercises in our online editor, which will help you focus on the code and principles you need to understand, instead of wrestling with setting up a local development environment. If you are beyond the novice stage - and we hope all of you will be there very soon - we recommend participating in our programming contests. Exercises focus on specific aspects of a programming language, while contests will push you out of your comfort zone to develop a small but fully functional software (some contests may also help you land your dream job !).  
 
At programmr.com we are committed to bring you opportunities to practice your skills, information to widen your knowledge, so you can become a master developer and find your dream job. We have much more to say about how to improve programming skills, and becoming a master developer. Stay tuned for more ... 
 
Have you ever spend time doing organized deliberate practice ? We would love to hear about what you did, and how it helped you become a better developer.