The introduction of the computer was a giant step in the execution of programs, but the creation of software was not directly affected. Even today every line of software is written manually, inspected by eye, and maintained by a skilled craftsman. Most recently, the exploding demand for software has led to a dramatic lack of skilled programmers and low software quality. Automatized software production is urgently needed. While certain aspects of software development are likely never to be fully automated, such as problem understanding or knowledge acquisition, the method of building programs that treat programs as data objects is extremely powerful. The approach followed here is to apply Computer Science's own methods to its major tool: simulating, analyzing and transforming programs by means of programs. This is a challenging, long-term task because programs are semantically the most complex form of data objects.