Monday, 6 July 2009

10,000 hours and the Scientist-Programmer

[caption id="" align="alignleft" width="240" caption="Photo by ** rosa **"]Photo by ** rosa **[/caption]

The concept of 10,000 hours effort as a benchmark to become an expert has recently become pretty well known.  The idea is this:  experts are made and not born, and the way that they're made is to accrue 10,000 hours of hard work at the subject in question.  This sounds to us like somewhat of a rule-of-thumb, but it's interesting in how many areas of human endeavour it seems to crop up.  Sportsmen, musicians, certainly scientists and programmers (and Scientist-Programmers) and many others seem to require of order 10,000 hours experience to reach the top of their game.

In this article, we're going to consider how the idea of 10,000 hours relates to you, the Scientist-Programmer.

What is an expert?
The circular definition is "someone who has at least 10,000 hours experience in a given field".  But obviously, that's not very helpful :-)  We suspect you can define "expert" in all sorts of different ways, but for the Scientist-Programmer it is someone who who routinely produces high quality code and does so efficiently.  We're not aware of any studies of programming productivity in science, we suspect that expertise helps a lot and for the Scientist-Programmer, this translates directly into generating more and better science.

Which hours count?
High-quality ones.  The ones where you're pushing yourself.  Nice, gentle, unchallenging work/learning doesn't generally help you develop a skill.  To do that, you need to be pushing yourself, finding your current limits and learning how to go that little bit further.  This is good news, because it aligns nicely with working hard to produce well-crafted code.  Consider the example of an object method that's a bit messy and ugly, because it's complicated.  If you spend the time to figure out a more elegant way to code it, you've not only streamlined the code (making it less bug-prone, easier to work with and perhaps also better-optimised), you've also learned something from putting in that extra effort.

The guru in the corner...
We bet you have some 10,000-hour experts in your department/university/company.  Think about the resident guru for a given technology.  For example, is there someone who you know is great with C++ and whom you know could help you out if you got stuck?  Is there a local Linux or LaTex expert?  These people are gurus because they've spent 10,000 hours working with that technology.  They are always trying to find better ways to do things, they keep up-to-date with the latest developments in the area, they have even read the manual "to learn a bit more".  Often, the guru can seem to have an almost-unattainably high level of skill, knowledge and proficiency with that technology.  And that is because of their 10,000 hours.

In academia, this is epitomised by the emeritus professor.  You know, the guy who potters around the department doing whatever research they like and who, when you talk to them, turns out to be razor sharp and vastly knowledgeable about just about every aspect of the subject.  That's what 40 years of work (80,000 hours or more) of work can do for you...

Where would you like to be in ten years time?
To accumulate 10,000 hours typically takes a decade (there are about 2600 working days in a decade, so 4 hours per working day will do it).  So, if you'd like to become an expert in something in ten years time, you can do it by working hard on it during your working days, starting right now.  We really like this as a way of thinking about professional development - learn by doing!  It's also a nice, simple way of planning your career.  Think programming will be more and more important in your scientific career?  Work hard doing it day-in, day-out and ten years from now you'll be pretty awesome at it.

In conclusion...
The Scientist-Programmer spends a lot of time programming, as well as doing science.  By working to a high standard and always learning to be better, you can accrue 10,000+ hours of experience and become a real expert in both your scientific field and programming.


  1. You can become a very good python programmer (an 'expert') in at least half the time.

  2. Totally agree!
    "10,000 hours" is definitely an order-of-magnitude thing. It would be interesting to think about whether certain disciplines/skills were easier to learn than others (eg. Python as compared to assembler :-) ). I suspect some things are more efficient to learn than others...

  3. That is some great advice to follow. And the benefits start even early than 10 years. Even if you are not an expert, you will definitely be on the path and will be a much better programmer than you were earlier.

  4. [...] 10000 hours and the Scientist-Programmer | Programming for …Jul 6, 2009 … The concept of 10000 hours effort as a benchmark to become an expert has recently become pretty well known. The idea is this: experts are … [...]