Be a good lamarckian froggie!
Introduction
It has been said that while evolution in nature is Darwinian, evolution in culture is Lamarckian [1].
If that phrase has no meaning for you, then you are missing on something important. Specially if you write software.
Here's the short version of the Darwin/Lamarck argument:
Lamarck said that environment modified you (an acquired character), and then you passed those modifications to your children.
Darwin said you changed at random (mutations), and if those changes are a good match for the environment you live in, you can afford to have more children than if it is a bad match. So, in the long term, more children share traits that are a good match for the environment.
Everyone knows Darwin seems to have gotten it right [2]. The sad thing is Lamarckian evolution should be much faster than Darwin's.
So life is mostly Darwinian. Culture, and technology, are Lamarckian. Novelists do inherit the traits of previous novelists, who get them from the environment. You can tell that by reading 90% of the books around.
There is, every once in a while, a Darwinian writer, who has something inside unlike any other, and when he publishes, he can sometimes achieve huge success, because his trait is a good match for the current conditions.
Of course most usually fall with a thud, and everyone says they suck. Usually, mutations do suck, regardless of what the X-men may tell you [3].
But then Lamarck takes over. A bazillion copycats will show up in the time it takes to hack a book together. Sure, 99.99% of the copycats are much worse than the original, but they have an atenuated version of the trait, which makes them fit their environment better.
All this goes double for software. And squared for free software.
The awesome speed of Lamarckian evolution has allowed the technological explosion of the last 2000 years. If we had a Darwinian technology drive my guess is we would still be chipping flints.
Lamarck's frogs
How did the science community reach the consensus that Lamarckism is wrong? It was a sad incident involving frogs and Indian ink. You see, Lamarckian theory predicted that frogs subject to certain conditions would develop what's called "nuptial pads". They didn't. So Lamarckian theory (later a part of Lysenkoism) was wrong. That's science.
But think about software. In software you, programmer, are the DNA. You breed programs. You spawn them.
If you had to write a frog, and you saw nuptial pads were useful, you by damn would provide your frog with nuptial pads, and make sure every version from then on would have nuptial pads just in case [4].
Your software is a Lamarckian frog, not a Darwinian one.
How can you make it be a good frog? Good in the sense of evolutionay success, that is: fertile, breeding, expanding.
Expose it to multiple environments
New environments mean more chance to find traits that may be useful. You take your email program, and you try to make it thrive in a home environment. You find that cute handling of multimedia attachments is a good trait.
Then you try it in a corporate environment. Now the good trait is corporate LDAP addressbooks.
And then a cypherpunk environment: support for every kind of crypto plugin known to man.
So, the larger the installed base, the better for the frog. And the better the frog, the larger the installed base. That's why 99% of free software projects die, IMO, they don't have enough users to push for features, or they start so weak they die from competition, they get shot out of their niches.
Be a copycat
Yes, copying features is good. If a feature is useful, then by all that's holy go and steal it. One big difference between software and frogs is that you can copy other programs, but frogs can't copy, say, lizards. I bet they would find scales useful, but they just can't do it.
In my book, if someone says they dislike something because it looks (or works) much like something else, he is being stupid. If you hate it because it works badly that's a reasonable thing. Hating it because it looks like windows, that's stupid.
Infect yourself
Get yourself DNA from other programs. If frogs could do that, they would be jumping with joy [5]. Viruses can do that. They are doing well.
Prostethic limbs are good
Use libraries. If you are doubting between writing a piece of code and using a library, usually it's a better idea to use the library, unless said library sucks badly. In which case, the good idea is to write a library that doesn't suck. [6]
Small eggs are better
Are you thinking of spreading your programming DNA? There's two routes. You can have a few carefully attended babies. Or you can have a million babies and not care about them.
Flies do one thing, whales do the other. And although I can agree I'd like whales better than flies, I have never seen a save the flies poster. So believe me, small eggs is usually smarter.
Write small things. Lots of them. And if you are careful, maybe a bunch of them can someday coalesce into an evil swarm that will eat whales. Ok, maybe that's overextending the analogy.
Abandon your babies. Maybe eat them.
Eating your own spawn is a common trait in nature, on species that have a big number of children. Since almost all of them are going to die anyway, and the parent can produce another million in two months, he can eat a few thousands, and it makes almost no difference.
So, if you see one of your projects is losing momentum, and working on it is no fun, please drop it. Or shelve it for a while. Maybe later you can eat pieces of it to produce a better thing. Of course this only applies if you are using the small eggs path. Elephants don't eat their kids!
This may seem weird, but it will probably make you a happier programmer, even if your production as a whole goes down. And happy programmers write free software. Sad programmers write CRM extension modules in VB.NET.
Comments for this story are here:
http://www.haloscan.com/com...
Genial :)
I liked the article a lot :) I'll try to keep it in mind if I ever go back to the developing path some day :)
Muy bueno! sirve muy bien para la reflexión.
I can't imagine abandoning a baby. But I get the point. Now I will run out and code me up a quick lil baby.
I'll back again for sure, thanks for great article :D
Hi very nice article