  It has been already shown that combinatorial evolution - the creation of new
things through the combination of existing things - can be a powerful way to
evolve rather than design technical objects such as electronic circuits in a
computer simulation. Intriguingly, only a few iterations seem to be required to
already achieve complex objects. In the present paper we want to employ
combinatorial evolution in software development. Our research question is
whether it is possible to generate computer programs of increasing complexity
using automatic programming through combinatorial evolution. Specifically, we
ask what kind of basic code blocks are needed at the beginning, how are these
code blocks implemented to allow them to combine, and how can code complexity
be measured. We implemented a computer program simulating combinatorial
evolution of code blocks stored in a database to make them available for
combinations. Automatic programming is achieved by evaluating regular
expressions. We found that reserved key words of a programming language are
suitable for defining the basic code blocks at the beginning of the simulation.
We also found that placeholders can be used to combine code blocks and that
code complexity can be described in terms of the importance to the programming
language. As in the previous combinatorial evolution simulation of electronic
circuits, complexity increased from simple keywords and special characters to
more complex variable declarations, to class definitions, to methods, and to
classes containing methods and variable declarations. Combinatorial evolution,
therefore, seems to be a promising approach for automatic programming.
