I don't argue that all evolution occurs in introns, only that introns form a ready source of new genes. Remember that I also said that mutations can occur in fully functional genes as well, but as with all mutations, the odds are that they will be harmful, rather than beneficial. But still, that's probably how much of evolution takes place - changes to functional genes, rather than introns, despite the costs. Most mutations to functional genes are harmful, but a few are beneficial. In re-reading my previous post, I am probably guilty of overstating how much occurs in introns, but it does happen.
Anyway, it's not until those introns are activated that natural selection operates on them. That's why they can accumulate changes over time with no effect at all - until they become activated, they are neither functional nor dysfunctional, and thus confer no benefits or penalties to the organism carrying them until such time. And when they are activated, and begin functioning in some manner, that's when they are subject to selection pressures - not before. And if they never get activated, then they are never selected for or against.
And remember, I never said introns were "noise" - they aren't random, they're leftovers, genetic flotsam, junk parts, remainders of your ancestors. Now, some of it has become noise over time due to accumulated mutations (so-called "genetic drift"), but much of it is readily identifiable.
(2) it is not true that software has no equivalent to introns. Programmers frequently insert English-language comments in non-functional parts of the code to help future programmers understand how the code is supposed to work--from the compiler's point of view, that is pure noise--what are the odds that bit flips in the notes section of a program will create functional code that, because a IGNORE WHAT FOLLOWS flag accidentally gets deleted, becomes functional.
Except that I seem to recall that preprocessors and compilers routinely strip comments out and replace then with whitespace before compiling. CPP does it - most do it unless explicitly told not to, IIRC ;)
Anyway, point taken. But, I went and looked it up - it's actually about 97% of the human genome that is non-functional, not 95%. Even if you call cpp with the "-C" option, 97% of your executable is not going to be comments, unless you compile "Hello, world" with your life story in the comments. And it probably won't run anyway, since cpp treats preserved comments as tokens - it'll give you some wacky behavior, anyway ;)
It's also a little more flexible in the genome - DNA encoding is not a purely binary language. Instead of "on" and "off" for a single bit, the functional part of a gene is a three-letter "word" (where the "letters" are nucleotides represented by A G, C, and T), and there are many redundant codes. TATA, CAAT, and GGGCGG are all codes for "promoters" - "START" markers for transcription. That's three different codes that mean exactly the same thing. The first two are four letters long - find me two four-byte sequences in your compiled code that only share the second byte in common (order matters here) AND mean functionally the same thing. And then find me a six-byte sequence that also means the same thing without sharing any bytes at all with the first two ;)
Stop to think about the consequences of arguing from introns: you have now abandoned evolutionary theory, because by definition natural selection cannot be the engine that shoves incremental intron changes along a path of somatic change.
Oh, I don't think so. Mutations can accumulate in introns with no selection pressure at all, true. But it's when (and if) those introns become active that the selection pressures come into play. And because of that, intron changes don't necessarily have to be "incremental". Changes to functional genes are incremental (or deadly), but because introns can drift arbitrarily with no penalty until they are turned on, the change can be very much wholesale when they are turned on.