Context : TypesOfThinking
: I get the main thrust of what you're saying, but to play devil's advocate for a moment, surely there is something very interesting about the mindset of software development.
: Programming, understood well, seems to be a kind of synthetic mathematics : a whole set of conceptual tools and approaches to understanding complex systems through constructing working models of them. In particular what software geeks should be good at, is thinking about how to construct low level mechanisms that are sufficient to implement high level abstractions. In other words, they're specialists in the mappings between theoretical levels.
:Today it seems that much of what we want to know about the universe is the behaviour of complex aggregations. And in many cases, approximate models can tell us more than "traditional" analysis and experiment on the individual parts.
:Given that Darwin framed his model of evolution without any reference to genetics, isn't this actually a good example of a case where the specifics of the parts has actually mattered less than the overall framework?
:Of course, science (and disciplines like bioengineering or materials science) requires a two-pronged attack, from the bottom up and the top down. Software people are unlikely to make breakthroughs in actual science without a full grounding in the details. (Although are they any less likely to make breakthroughs than pure mathematicians working on abstractions that only find application later?)
:However, to apply the lessons of evolution or immune systems or the biological cell (as in the inspiration for objects in Kay's version of OO) to other complex systems seems to be far more about understanding the general forms of the theory and inventing relevant implementations that suit the constraints of the prefered substrate, than caring about the specifics of the orginal implementations.