Good to see you around here.
We're certainly including the ideas behind both Colvin's Talent Is
Overrated and Gladwell's Outliers. This is mostly the work of K.
Anders Ericsson. The best introduction to his work is:
However I like to think that we're less interested in how to become
the next Tiger Woods or whatever the equivalent would be in software
development. After all there's a lot of value in merely helping people
gain access to the tools that will let them make themselves better.
There's also the problem that Ericsson's research seems to suggest
that being world-class requires a supportive (some would say
oppressive) family environment which provides you with access to high
quality coaching and training materials from a young age.
I tend to think that practice itself is not enough. You have to be
able to maintain multiple levels of awareness whilst practicing. On
one level you're solving the same problem in 7 ways in 7 languages in
order to find the optimal implementation according to various
objective metrics. But on another level you're watching yourself to
identify which techniques flow more naturally and which cause you
difficulty as well as trying to understand the relationships between
all the solutions.
In an ideal world we'd have someone around who understood this stuff
on a much deeper level and was able to measure your progress, spot
deficiencies and set new exercises designed to correct your
weaknesses. Sadly the world we live in is one in which the only book
that actually attempted to explicitly bring the notion of practice to
mainstream software developers (Charles Wetherell's Etudes For
) has been out of print for several decades. It took me several years
to find a copy but it was definitely worth it. Here's the opening
"The difficulty with teaching programming is that it cannot be taught.
The difficulty with learning programming is that it is so much work. A
teacher can help, lecture, criticize, guide, smooth the path. A
student can take notes, memorize, read, pass tests, discuss until two
in the morning. All this effort will be meaningless if the student
does not practice by actually writing programs, because programming,
like other skills can only be acquired by practice. Furthermore, the
practice must be on "real" programs and not on the simplistic material
found in most programming language manuals. Noodling away at
Chopsticks will not make one another Rubinstein--no more will noodling
at APL make one a master programmer. So we provide this book of
sizable problems that are suitable as training projects for the novice
programmer who wishes to become first a journeyman and then a master."
Wetherell wrote those words in 1978. But very little has changed. His
etudes range from calculating the yield on an investment to maze
building to finding patterns in primes to playing the game of Owari.
All that's changed is that exercise he thought would take a couple of
weeks are now the work of hours because we have more powerful
languages, sophisticated libraries and faster computers.
One of the tangible things I'd like to see come out of the software
craftsmanship movement would be sets of exercises designed to
strengthen particular facets of a developers skillset. Then when we
meet at conferences we'd be the folks who gather for a couple of hours
to practice our skills and gain feedback from each other on our
progress. Identifying those facets and the exercises that can
strengthen them is likely to very rewarding.
I think that, to paraphrase Richard Sennet, we'll find that there's a
lot we can learn from problem-finding as well as problem-solving.
There are some existing books that provide interesting material we
could use to derive exercises. Even if we don't yet have ideas for
exercises I'd like to collate source material:
- Wetherell's Etudes For Programmers
- Mark Jason Dominus's Higher Order Perl is even more valuable if you
don't know or like Perl because you'll have to reimplement his
examples in your favourite language in order to deeply understand
Are there others?
2008/12/21 Mark Needham <m.h.n...@googlemail.com