  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. Intriguingly, this seems to be
an ongoing and thus open-ended process creating novelty with increasing
complexity. Here, we employ combinatorial evolution in software development.
While current approaches such as genetic programming are efficient in solving
particular problems, they all converge towards a solution and do not create
anything new anymore afterwards. Combinatorial evolution of complex systems
such as languages and technology are considered open-ended. Therefore,
open-ended automatic programming might be possible through combinatorial
evolution. We implemented a computer program simulating combinatorial evolution
of code blocks stored in a database to make them available for combining.
Automatic programming in the sense of algorithm-based code generation is
achieved by evaluating regular expressions. We found that reserved keywords 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 a previous combinatorial
evolution simulation of electronic circuits, complexity increased from simple
keywords and special characters to more complex variable declarations, class
definitions, methods, and classes containing methods and variable declarations.
Combinatorial evolution, therefore, seems to be a promising approach for
open-ended automatic programming.
