Biology's next revolution == AOP
Below is a submission I have sent to Nature magazine in response to a great essay detailing how "Horizontal Gene Transfer", as opposed to mendelian inheritance of genes, is emerging as an important pattern of software evolution in Nature. Basically, biologists are indeed finding that AOP like strategies for software maintenance and evolution are present in nature. I am writing this as a "software practitioner" to help nudge them along what seems like the right path to investigate. Biologists are increasingly talking about "middleware" of nature, the components that seem cross-cutting across the domains of life. Did you know we share 90% of genetic code with mice? Is that that surprising to middleware developers?
I will also put a podcast soon with a talk on that topic.
Dear Sir,
I read with great interest your recent essay on "Biology's next revolution" (Nature vol 445, p 369, 25 January 2007). The emerging pattern you are observing, Horizontal Gene Transfer (HGT), is similar to a pattern known in software programming circles as "Aspect Oriented Programming" (AOP).
Conventional software development uses "Object Oriented Programming" (OOP, java, C#). OOP software objects inherit behavior from their parent objects, much like traits are passed on in mendelian inheritance.
Dear Sir,
I read with great interest your recent essay on "Biology's next revolution" (Nature vol 445, p 369, 25 January 2007). The emerging pattern you are observing, Horizontal Gene Transfer (HGT), is similar to a pattern known in software programming circles as "Aspect Oriented Programming" (AOP).
Conventional software development uses "Object Oriented Programming" (OOP, java, C#). OOP software objects inherit behavior from their parent objects, much like traits are passed on in mendelian inheritance.
In practice, however, OOP has shown to be brittle and cumbersome for large software programs. Maintaining and evolving large complex systems has become a problem in and on itself. Tangled code made the evolution of individual functions complicated if not impossible without complete retooling of the applications.
Enter AOP. In AOP large complex systems are broken down into smaller independent modules, some of them reusable across the object hierarchy. Those that are "cross cutting" are called aspects, that are "weaved" together at execution time. This approach allows teams to focus on, maintain and evolve specific underlying functionality, independently of each other and in a cross-cutting fashion across the object domains.
It complements OOP inheritance by doing horizontal propagation of AOP code, much like HGT complements Mendelian inheritance. We can now evolve those software systems and reuse that common infrastructure across applications. Just like our specie shares alot of genetic code with other domains of life, software applications share a lot of common code. Accessing databases, publishing as web services, transactions, dependencies and security are all today identified as "aspects" of an application that can be woven in. The emerging infrastructure is known as "middleware", today a multi-billion dollar business of which I am a retired executive (JBoss was my business).
Similarly many pathways needed for life (cell cycle pathways, energy production pathways, persistence and repair in DNA, photosynthesis etc) are highly conserved across domains of life. There is evidence, as in the case of "rhodopsin", that these pathways can persist in independent free floating RNA in retro-viral vehicles or bacteria (nature's aspects?) and evolve somewhat independently of the final species that adopt them to their benefit.
That nature would evolve an efficient software maintenance strategy, be it retro-viral of bacterial gene transfer, akin to AOP which was designed, seems like a reasonable assumption indeed.
In that spirit, however, I found myself in disagreement, with the following statement you made "We regard as regrettable the conventional concatenation of
Darwin's name with evolution, because other modalities must also be considered". The focus on "species" as the main selection point of evolution may be augmented to included gene populations as you argued, but the basic tenet of Darwinism, "survival of the fittest" is surely not under question here.
Darwin's name with evolution, because other modalities must also be considered". The focus on "species" as the main selection point of evolution may be augmented to included gene populations as you argued, but the basic tenet of Darwinism, "survival of the fittest" is surely not under question here.
Au contraire, It seems intuitive that HGT confers an increased fitness function to a population of genes using it for maintenance and rapid evolution purposes. Quite simply put, use of HGT should increase fitness (to be quantified in population dynamics), just like AOP increased maintainability and evolutivity in the OOP software systems that used it. A system with an increased capacity to adapt to evolutionary pressure, should prevail from a population dynamic point of view.
That we are shifting the focus away from "species" (or applications) to "gene populations" (or middleware) fitness is in no way in contradiction with Darwin's hypothesis of "survival of fittest". Establishing these fitness functions for HGT mechanisms would certainly make Darwin proud, if he only had our tools!
marcf
marcf
Comments
AOP appears to be anther process furthering evolution infrastructure/context.
It allows evolution to accelerate. Other elements of the infrastructure are diversity elements such as sex.
Did sex come from evolution or did evolution come from sex?
Is it true that any process that can exist does exist?
No!
Anyway thriving processes that coexist and co prosper. They can coevolves. Processes that evolve is the more general form of evolution.
I think these broad ubermoments are emerging..
It is like finding out that linear systems theory applies to linear equations, then series and functions then operators.
I look forward to the day when Biology touches Physics, but I realize that there is "plenty of room on the bottom for Physics".
http://www.its.caltech.edu/~feynman/plenty.html
"C" is the eigenlanguage.
(1) define a higher-order function (that is, aspect)
(2) define where to apply the aspect - and maybe here is the point that AOP and traditional functional programming differ - the pointcuts aren't defined together with the code, they can be manipulated independently.
Anyway, what I wanted to say, is that (1) and (2), together being called "AOP", aren't tied, may be used separately and may have different parallels in biology/evolution/etc.