Information Technology Blog

Saturday, September 03, 2005

Dawkins' Selfish Gene, Intentional Programming, Java, C etc. http://www.edge.org

Just found a great site and can't stop reading articles from it. I haven't seen anything of the kind before. The site covers a wide range of topics on science and technology.

Interestigly enough there is a article that links together two topics I was pondering about last week which I thought had nothing to do with each other: biological evolution and programming languages. Bizzare? Read on ...

... Programming languages are really just vehicles to supply abstractions to programmers. People think of programming languages as being good or bad for a given purpose, but they are really criticizing the abstractions that a language embodies. The progress in programming languages has been incredibly slow because new programming languages are difficult to create and even more difficult to get adopted. When you have a new programming language, the users have to rewrite their legacy code and change their skills to accommodate the language. So, basically, new programming languages can come about only when there is an independent revolution that justifies the waste of the legacy, such as Unix which gave rise to C, or the Web which gave rise to Java. Yet it's not the languages that are of value, but only the abstractions that the languages carry.

It's very much like Dawkins' idea that it's the genes, not the individuals, that are important in evolution. And, in fact, what's being reproduced are the genes, not individuals. Otherwise, how would we have worker bees and so on. We are doing the same thing; it's abstractions that matter, not languages. It's just that we don't think of abstractions without languages, because languages used to be the only carriers for abstractions. But if you could create an ecology in which an abstraction could survive independent of everything else, then you would see a much more rapid evolution for abstractions, and you would witness the evolution of much more capable abstractions.

To enable the ecology, all you have to do is make the abstractions completely self-describing, so that an abstraction will carry all of its description, both of how it looks and of what it does. It's called intentional programming because the abstractions really represent the programmers' original computational intent. And that's what the important invariant is, everything else of how something looks or how something is implemented, these are things that should evolve and should be improved so they can change. What you want to maintain invariantly is the computational intent as separated from implementation detail. ...

http://www.edge.org/digerati/simonyi/simonyi_p2.html

0 Comments:

Post a Comment

<< Home