The idea of breaking programs into functions was taught to some of
us with the metaphor of "divide and conquer." That is, make several
smaller problems and solve those instead.
This approach is now so deeply ingrained that I can just think
"partition and solve" which is of course a much more positive and
accurate description.
One might think of the "partition your program into functions"
principal as "the divide and conquer" principal. But of course, they
are both instance of the more general "partition and solve". I dare
say that "partition your program into functions" is even a more pure
and accurate instance of the principal.
Evolution may also be an instance of the principal. Different
species evolved to solve different problems, or to solve the same
problem (survival) in different ways.
Of course, when you partition a program into functions, you also
define those functions' relationships to each-other. Just because
you're partitioning doesn't mean that the problems are not related.
When people see several competing projects in the "free software
community" trying to solve the same problem, some might say, "Good.
We have divided them, now we will conquer them!" In their marketing
material (or more likely press-release ranting) they will say that a
house divided against itself will not stand [1].
Such people are probably purposefully ignoring the "partition and
solve" principal. They ignore the fact that different projects have
chosen different paths to solve different problems. They ignore the
relationships between the projects, and that we feed each-other much
more often than we actually compete. But no good programmer will
ignore the relationships between her functions.
Even within the Debian project
we have lots of different goals. A truly gifted project leader will
hopefully not see Debian as a house divided, but rather a very ripe
partitioning looking for someone to define the problem that we solve
together. A leader should help to define, create, or encourage the
relationships that make that solution happen.
peace,
isaac
[1] Oh no, I've contradicted the Bible and praised evolution in the
same essay! Well, not really. The fallacy is not with the Bible's
assertion about the house divided against itself, it's in the
interpretation of "the free software community" as a single house.
And also, I believe God created evolution :)