I touched on this yesterday, writing about Cosmos and evolution, and how I had the feeling that I wanted to “Do that!” — when thinking about evolution. I know this may sound weird but I think we’re not just subject to evolution, but we are also agents of evolution. In other words, evolution acts through us. Things we do intuitively are in the service of evolution. It’s obviously true for some things, like sex — that to us seems like an act of pleasure, at another level it’s about procreating, and at yet another level it’s about competition between our genes to form or influence the next generation of humans. But I think there’s an even higher level of service, that our intellectual creativity is an evolutionary process as well.
But there’s another reason for a language to make small evolutionary changes relative to the languages that came before — it’s because they arrive in an environment that must be ready to use them. Languages that depart radically from prior art will have a hard time getting uptake because they are familiar to no one. That’s why change is necessarily gradual. It’s why we still use QWERTY keyboards instead of a superior design.
One of the most striking ideas in Cosmos, and a new one to me, is that evolution never goes back and re-invents something. Once there’s a basic design for an eye, Tyson teaches, all eyes from then on work that way. This was less than optimal, he says, because eyes evolved when animals only lived under water. Because our eyes are largely made of water, there is distortion when they’re used in air that isn’t present in water. Basically fish have better vision than birds, reptiles and mammals. Why can’t evolution go back and re-do the design of eyes now that they are used in air? I don’t understand, but I find the idea fascinating.
It would all work better, imho, if we used natural evolution to form basic principles for software evolution. That developers not place so much emphasis on changing the world, and more on careful and thoughtful evolution. Only steal from the best, is a very good design principle, imho — as well as Postel’s Law — strive to interop, of course, but also strive to make interop easy.