"One of the central challenges of computer science is to get a computer to do what needs to be done, without telling it how to do it. Genetic programming addresses this challenge by providing a method for automatically creating a working computer program from a high-level problem statement of the problem". [1] This is achieved by "genetically breeding" a population of programs based on Darwin's theory of natural selection (aka 'survival of the fittest'), using biology - inspired methods such as reproduction, crossover, mutation, and so forth. So, in short, what genetic programming does is it tries to simulate natural processes and apply them to existing programs, in order to transform them into new, hopefully better ones.
But who determines which program is the 'fittest'? Well, the answer is the computers. This doesn't mean however that the computers switch on one day and are all of a sudden able to judge whether a program is worth breeding or not - there is an algorithm behind their 'decisions'. The human programmer gives the computer a set of criteria. The computer runs a program, and if it satisfies those criteria, that program is labeled as 'fit' and is then bred to form new programs, each of which in turn undergoes the same examination process. The overall control flow of this operation can be seen in the image below.
(More details on the breeding process to come...)
References
[1] http://geneticprogramming.com/tutorial/
[2] http://www0.cs.ucl.ac.uk/staff/w.langdon/ftp/papers/poli08_fieldguide.pdf
Image References
[a] http://www.genetic-programming.com/evolveV2DF2003621.GIF
[b] http://www0.cs.ucl.ac.uk/staff/w.langdon/ftp/papers/poli08_fieldguide.pdf