Remote teamwork anecdotes

Ed Leafe ed at
Thu Mar 23 14:17:31 CET 2006

On Mar 20, 2006, at 9:51 PM, Alex Martelli wrote:

> While what *I* want, ideally, is pair programming -- somebody sitting
> right at my side, alternating with me in controlling keyboard and  
> mouse,
> and in verbalizing what he or she is coding -- that's part of the huge
> productivity boost I observe in a co-located team... that pair
> programming works SO much better that way, that even with the best
> remote cooperation tools (subethaedit onwards).

	I've often noticed that programming for me is akin to composing  
music. Now let me start by saying that while I can hum pretty well,  
I'm not a musician of any sort, so this is based upon the experiences  
related to me by others who are (btw, there seems to be a very large  
overlap between programmers and musicians...).

	I can be mulling over a particular problem for hours, sometimes  
days, and do nothing but write some pseudo-code or a couple of trial  
programs that don't really do what is needed. Then, at some  
unpredictable point, clarity sets in and I see the solution. After  
that, it's just a matter of transferring that into code (for which  
Python is by far the best language, as it doesn't get in my way).

	The people I know who write music tell me of a similar process: they  
play a few bars or write a few words, but it doesn't feel quite  
right. Then either a particular musical hook comes to mind, or a set  
of words that solidifies the image of what they were feeling, and  
after that the song is written in their head and just needs to be  
transferred to tape (or bits, as is more common these days).

	I can't wake up one day and plan my day like this: 9-12, write some  
killer algorithm; 12-1, run errands and eat lunch; 1-3, add algorithm  
to existing code and refactor; etc. Nor can the musicians I know plan  
of writing the first stanza of a song in the morning, the second  
after lunch, and the chorus in the evening.

	The other similarity is that some musicians tend to be more creative  
when off by themselves, while the rest seem to feed off of jamming  
together with others. Most of them strongly prefer one or the other;  
rarely do they employ both. The comparison to programmers would be  
that I seem to resemble the former type, while you seem to resemble  
the latter.

	I strongly agree on the benefit of code review, though, especially  
in my case where things tend to get written more or less  
unconsciously. While the main problem may be addressed well, there  
are either side/end cases that still need to be addressed, or there  
is an opportunity to refactor to make it fit in much better with the  
project as a whole. A partner who is not emotionally immersed in the  
code can usually see these things better than the person who created  
the code.

> Wanna talk debugging?  I think solo debugging is even worse than solo
> programming -- when I just CAN'T have a debugging partner for a
> sufficiently nasty bug (race conditions are the worst, but there are
> many other categories vying for that title;-), I'll turn to one of my
> beloved plushies (I'm firmly convinced the baby tiger is by far the  
> most
> effective debugging partner for most bugs, though Tux the Penguin  
> has a
> knack for helping spot bugs that aren't MY fault but rather the
> compiler's &c -- since I've been using Python for most of my coding  
> for
> years, poor Tux hasn't seen much action recently) -- I talk out  
> loud to
> the plushy-partner to make narratives out of expected and observed
> occurrences.  But a *LIVE* partner, actively checking out the  
> coherence
> of my narratives and challenging them and proposing alternatives,  
> is 10
> times more effective... the plushies don't even talk back (except in
> debugging sessions that have gone on for *FAR* too long;-).

	OK, we part ways on the plushie thing, but here I have to agree with  
you: a second set of eyes (and brain patterns) helps immeasurably  
when debugging. I think the key here is having to explain what you  
did and what you thought the code should have done to someone else  
clarifies the problem, whether it's explaining it to someone else in  
the room, or trying to explain it in an email to a list like this. I  
can't even begin to count the number of times that I've been stuck,  
and decided to post the problem to a list for help, and in the  
process of composing the email, figured out what my mistake was!  
Those netiquette guidelines for posting intelligently aren't to help  
the readers of the post; they're to help you form your scattered  
thoughts into a coherent picture, and more often than not, if it's a  
bug that I've created rather than a gap in my understanding, the  
process of writing the email is all I need.

	I guess if there's a point to all of this, it's that good  
programming is a creative process, and that you need to identify what  
works and doesn't work for you. There is no one-size-fits-all  
approach that is the "best".

-- Ed Leafe

More information about the Python-list mailing list