Don't you have to assume that something will work a particular way before you program it? The programmer is who makes it work, based on his ideas and methods of input.
As a software engineer who's actually worked with genetic algorithms, I can tell you that your idea of it is wrong.
All we do is implement the core logic of biological evolution. I'll try to explain in english as condensed as possible.
Suppose the there is design problem with a liquid distribution system.
Imagine a room. In one wall, there are 3 entry points. In the other wall, there is an exit point. What you as an engineer need to do, is build a pipe system that connects the entry points to the exit point. Suppose there are various parameters here. For example, there might be requirements concerning pressure at the exit point.
So the design problem, is about how you lay the pipes. What angle? Where do you put the corners? How do the 3 entry points come together to attach to the exit point? Your design choices are going to affect pressure etc.
You can solve this problem with a GA.
First, you need what is called a "chromosome". This is actually the hardest part of implementing such an algoritm. This "chromosome" is essentially an encoded datastring which describes the system; how exactly the piping is done. This could be called the "genotype".
"mutating" this "chromosome" would in practical terms consist of changing a character in the encoded string.
Then there is a method that will "unpack" the datastring. This would be going from "genotype" to "phenotype". The phenotype is what is subjected to a fitness test. One of the parameters for example could be "what's the pressure at the exit point?".
So, what does the programmer
actually model in this algorithm?
1. the chromosome. The "genotype". And that in terms of structure, not in terms of encoding. The chromosomes of generation 1 could essentially be generated randomly. Usually though, in practice, they'll start with "the best" design that the human engineers came up with and optimize that one with the algorithm. But it will also work if you start with randomized strings - it will just take longer for the algorithm to complete as a lot more generations will be required.
2. the "unpack" logic to move from genotype to phenotype. I put it as nr2, but it's essentially part of 1 in a way. When deciding on the structure of the chromosome, you'll automatically have the logic for unpacking it. I put it as an extra point, because you'll have to write the unpack method.
3. the fitness test. after the phenotype is unpacked, you have a model of a candidate system that can be tested on performance. The candidate gets a fitness score.
4. the reproduction method. This essentially consists of taking the "top performers", recombining their chromosomes and introduce mutations. This results in a new generation, which then again is subjected to a fitness test.
So, in summary, what is being programmed is not a "design". Not even an intended outcome. What is being programmed is rather an "environment" in which designs are tested, and logic that applies principles of evolution (reproduction, mutation, fitness testing)
The important part to remember here, is that the design that the algorithm comes up with,
is entirely the merrit of the algorithm. The programmer didn't "program" the outcome. What the programmer made, is really no more or less then an optimzation module / search heuristic. It's the program itself that comes up with optmized solutions.
I'm not saying God couldn't have created. I am saying God is not considered in science - methodological naturalism, that is.
Sure. Neither are pixies.
That can be turned around by giving science good reasons for taking it into consideration.
But there aren't any, so....