Subject: Re: How accurate is Metcalfe's law? (Was: Ximian software)
From: Ian Lance Taylor <ian@airs.com>
Date: 08 Jan 2002 12:55:22 -0800

"Stephen J. Turnbull" <stephen@xemacs.org> writes:

>     Ian> But I think most good programmers would think that they could
>     Ian> implement Windows, with a sufficiently large team and enough
>     Ian> time.  There is no secret which needs to be discovered.
> 
> Not any more.  But how many people have reimplemented Unix, more or
> less by themselves, now?  Does that mean that all the accolades that
> Ritchie and Thompson have received are undeserved?

No.  There are diamonds out there.  But I don't see any reason to
believe that they are common, or that new ones are required for good
programs.

There are some great ideas which have been extensively mined:
Unix/Multics, the Xerox Star, Visicalc, Xanadu, public key/RSA.  But I
don't think there are all that many.

Let's turn this around and think about what technological ideas
Microsoft, as the canonical example of getting value from software,
has pioneered.  DOS came via CP/M from TOPS-10 and others, and Windows
came via the Mac from the Xerox Star.  Here are some ideas which I
think Microsoft may have invented (but they may also be borrowed from
others):

* use of the right mouse button to bring up a context-specific menu
* consistent support for mouse-less operation in a windowing
  environment
* different modes for menus from novice to expert
* the software wizard, Bob, the dancing paper clip

I'm sure there are more.  But are these diamonds, or are they garnets?

My point is not that there are no diamonds.  It is that most software
development occurs without finding any new diamonds at all.  Moreover,
of the five great ideas I listed above, four came out of pure
research, rather than development (the exception is Visicalc).

> What Apache/Emacs/GCC/GNU system/Linux kernel (as a "boxed set" :^)
> have proved is that free software beats the tar out of licensing for
> _maintenance_ of a certain class of existing ideas.[1]

I would argue that Windows and MS Office are also maintenance of a
certain class of existing ideas.

> There are huge differences in
> productivity in programming; I suspect it has a lot to do with
> differences in diamond-finding ability at various levels of abstraction.

I don't think so, although I don't know how to prove the point.  I'm
considered to be a highly productive programmer.  But I've never found
a diamond in my life--and you can verify this by looking at my code.
My productivity is mainly the result of applying the same old tricks
over and over, plus I never get stuck, and I don't make very many
mistakes (when I program, not in general).  I also happened to start
programming in machine language pretty early on, so I got a good
understanding of all the layers--new programmers who start with Java
have a different view of the system.

I've worked with many good programmers and many bad programmers.  If I
were to pick one characteristic of a bad programmer, it would be that
they work on things without fully understanding them.  A good
programmer is someone who understands the system at hand well enough
to get the job done, and recognizes when they don't know something
they need to know.  Therefore, I would say that a productive
programmer is someone who is able to quickly develop a high level of
knowledge of a programming system.

> [1]  AFAIK the biggest software innovation of any of them is the Emacs
> idea of writing a whole editor in a real programming language.  The
> others are definitely incremental processes.

The basis for Emacs is arguably TECO.

Ian