The procedural representation and evolutionary search strategy used by genetic programming makes it an intuitive algorithm for automatic programming and search. However, the issues of scalability and landscape roughness can present serious issues to its applicability. These issues have received much attention from the community. Instead of proposing new solutions to these problems, the aim of the remainder of this thesis is to develop a sound working knowledge of population dynamics from which new solutions can then be developed. To achieve this goal, the research will focus on the issue of population diversity. Once this is achieved, many new possibilities for improving search with genetic programming will become intuitive. Toward this goal, three key questions are outlined in the next chapter which are addressed in the following experimental studies.