Linus Torvalds |
|
|
|
|
|
|
figure 4
figure 5 |
So, a successful
product is something that evolves and carves out a niche and survives.
This is how I largely think of software development. The important
part is the evolution of the product, of the program. It happens
to be true, I believe, in many other engineering areas too, but
I'm going to talk mainly about software.
Figure 4
When you talk about evolution there are four basic notions. Depending
on which biologist you talk to these may slightly change, but these
are the four I picked up off the Internet.
One, the most obvious one and the one that everybody is familiar
with, is the notion of mutation, the incremental small changes over
time that happen when anything evolves. It should be noted that
the mutations aren't always good. In biology the mutations are fairly
random most of the time, but even when they're not random and directed
by, hopefully, intelligent human beings, the mutations or changes
can often be detrimental. A very intelligent person does make mistakes
and he may not see how the user actually uses the program, so you
have to keep that in mind.
The second part that is very important to any product is cross-pollination
or recombination, what biologists call "sex" -- the notion that
you not only have variations of a theme but you also combine these
different variations, and this is how a lot of new ideas happen.
You have two existing ideas, you put them together, and suddenly
you see that together they actually create something bigger and
better than they were on their own. This is how you get the leaps
in development.
This is very important in software, too. No piece of software or
product stands alone, and, in fact, the goodness of any program
is really measured in how well it interacts not just with the user
but also with all other programs around it, and those other programs
can be on other machines. In order to improve the working, you need
to have cross-pollination between the other pieces so that all the
pieces understand each other. The most important part is the competition
and the selection of the winner (or winners) because both mutation
and recombination can make the program worse. You have to have some
method of selecting which changes are good and which changes are
bad.
It's very important to realize there are two levels of competition.
There is competition within the program to drive the development
of the program on its own, but there is also competition on the
level of the whole ecosystem where some programs die. Both of these
levels of selection are needed.
The third part is that a major feature of evolution is that it is
massively parallel. It depends on trial and error, another favorite
biologists' term. You know that you are not always going to be right
and to counteract the fact that sometimes changes are bad, you make
a lot of changes at the same time. The bad ones die out and the
good ones are the ones that survive in the long run. The important
part here is that there must not be a single point of failure. If
you make a bad mistake and you only have one generation of products,
you are not going to be around for the second generation, so the
parallel part is actually very important when you start thinking
in terms of risk.
Figure 5 |
|
|