From: johnson@cs.uiuc.edu (Ralph Johnson)
Subject: Re: Will we keep ignoring this productivity issue?
Organization: University of Illinois, Dept. of Comp. Sci., Urbana, IL
Date: Thu, 19 Nov 1992 09:49:26 GMT

ghm@sserve.cc.adfa.oz.au (Geoff Miller) writes:

>I think you have misunderstood.  Sure, you can teach people to do 
>something well, but there is a difference between "good" and
>"great".  You can teach someone to play the trumpet  -  can
>you teach them to improvise like Miles Davis?  You can teach someone
>to write English  -  can you teach them to write something that will
>match Faulkner or Steinbeck?

I don't think I misunderstood.  I disagree.  

Sure, some people that you teach become much better than others.
But *everybody* who has skills learned them.  *Somebody* taught
Miles Davis to improvise, even if that somebody was himself (which 
it probably was, in part, but he could probably tell you the many
people who helped).  The claim that the main reason why some people
do better than others is because some people are geniuses and other 
people are not is sheer mysticism.  I bet Miles Davis is not a
genius on any standardized test.  

How does one gain this sort of ability?  Genetics certainly has
something to do with it.  If Miles Davis had been born deaf then
he would not have become a musician.  I don't know whether tone
deafness is innate or acquired, but there are probably some other
genetic features that influence musical ability.

But genetics is much less important than experience.  In particular,
musical skills at pitch matching depend on hearing a lot of music
in the first few years.  Musical families beget musical children,
but it is environment that causes it, not heredity.  Finally, music
lessons help a lot, but nothing can replace practice, practice, and
practice.   Of course, given a bunch of people raised from birth in
musical families and given good lessons, all of whom practice 5
hours a day for twenty years, some will be better than others.  But
this difference is probably not as great as you might think.  In
practice, some children realise they are not in the top half of their
peer group (and no more than 50% can be above normal, of course :-) )
and decide to take up programming or cheerleading.  Others get distracted
by TV or school and only practice 2 hours a day.  The people who truly
love to play music, who would rather practice than talk to their girlfriend,
are a rare breed who are probably to be pitied rather than admired, but
who are naturally going to end up better than others who have similar
genetic gifts.

This doesn't explain a true prodigy like Mozart, who was an accomplished
musician before he was a teenager.  However, it explains most of the top
people in their fields today.  It especially explains the difference
between programmers.  People who like what they do practice more, and
so get better at what they are doing.  People who have encountered good
teachers learn faster, and are more likely to like what they do.  Childhood
experiences are also important, because geometrical reasoning seems to be
helped by playing with blocks and mechanical toys at an early age.

We don't know how to teach programming very well.  That doesn't mean that
programming can't be taught.  If we knew how to teach it better than more
people could become competent programmers and the ones who already become
good programmers would be even better.  I don't think that the problem
with software today is primarily because of teaching.  However, I do think
we can figure out what makes a superior programmer good and teach it.
Of course, this will help the superior programmers, too.  For example, I
saw a study of how good debuggers work, and one of the amusing things is
that they talk to people more than they look at source code.  This particular
system was very large, and it was impossible to figure out what it did by
looking at the source code, so the good debuggers knew who the experts
were and would ask them.  This has helped me a lot.  If the normal techniques
don't work, I am quicker to ask questions from experts.

The differences between the best and worst programmer in most programming 
groups is much larger than the difference between the best and worst player
on a typical NBA team.  One explanation might be that software engineering
is more like (American) football than basketball; there are many specialties
and people do not have to be good at all of them.  Someone who is good at
documentation or at finding out what the users *really* need is going to
be valuable even if he or she is not very good at debugging.  But another
explanation is the one I gave; management usually can't tell who is good
and who is not.  Thus, lots of people end up on the team who should have
been cut.  People end up as programmers who should really be salesmen or
(for the really big money) electricians.  

In summary, I have been talking about several things.  I agree strongly
that there is a difference of several orders of magnitude in the performance
of programmers, and this is a real difference, not because some people do
quick-and-dirty programming and the others do a careful job.  Further, I
agree that management should pay more attention to this fact than they do.
However, I think that this difference is due in part to the immaturity of
the field.  We don't know what it is that makes one person a better
programmer than another.  I think that it is possible to find out, and
if we knew that then we could figure out how to teach it.  Of course, it
is not possible to teach everything to everybody, but we could do a much
better job than we are now.  Some programmers would still be better than
others, but all of them would be better than they are now and the difference
would be smaller.

Ralph Johnson -- University of Illinois




Newsgroups: comp.lang.c