The author (and everyone) should play with Genetic Programming. This is where programs (i.e. expression trees) get to mix together to produce new expression trees, according to their 'fitness'. It's an extension of the regular fixed-length Genetic Algorithm stuff, but the structure of the representation itself is adaptive.
One surprising thing is that (in addition to fitness improvements over time) the expression trees evolve 'robustness', since there is a subtree survival advantage if a tree's descendants are not disrupted by the crossover/mutation operators. That is to say, the process learns/evolves to evolve better.
So it shouldn't be so surprising that nature evolves a process for self-healing DNA errors, etc - it can be demonstrated in-silico pretty simply (i.e. occurs even if you don't 'engineer' for it).
It depends on whether the simulations are on fixed-length 'books' (the analogy used in the post) or on something more self-structuring (like Genetic Programming as a simple model, or the actual case of DNA coding for protein / cell / body assembly).
One surprising thing is that (in addition to fitness improvements over time) the expression trees evolve 'robustness', since there is a subtree survival advantage if a tree's descendants are not disrupted by the crossover/mutation operators. That is to say, the process learns/evolves to evolve better.
So it shouldn't be so surprising that nature evolves a process for self-healing DNA errors, etc - it can be demonstrated in-silico pretty simply (i.e. occurs even if you don't 'engineer' for it).