Automatic programming in computer science and computer engineering refers to the production of computer programming code by some system or software in response to more abstract user input or commands. In one sense, automatic programming describes any situation in which a computer or software will replace a statement inputted by a programmer with a block of code that can concretely perform the actions described in the statement. When used in another sense, automatic programming can describe the goal of creating a programming language or system that can intuitively assemble a completed application based only on the barest direction from the programmer. Automatic programming can be used in some computer research fields to refer to the process of designing an artificial intelligence (AI) system capable either of autonomously producing a program to complete a task or self-modifying its own code to enhance functionality.
The definition of automatic programming is somewhat vague. It originally was used during the early years of computer programming to describe the translation of abstract assembly-language-like instructions into expanded machine code. This was called automatic programming because the compiler would automatically replace a single human readable statement with dozens or more machine code instructions, essentially automatically writing the program in a primitive way. The same actions still are performed by language compilers in most cases, regardless of the overlaying programming language being used.
Another use for the term "automatic programming" is to describe automated code generation. This is when an integrated development environment (IDE) or other tool can be used visually, or in some very easy way, to specify how an end user would see a program. Once the desired result is created, the software or IDE then can automatically produce functional source code to attain the result without any further input from the programmer.
In some instances, automatic programming also refers to the study of how to implement languages at such a high level that the source code looks like natural language. A programming language like this then would automatically produce the application based on the programmer's broad input. No matter how automatic a language becomes, however, it should be noted that the programmer needs at some point to manually modify the code for specific functionality using the programming language itself.
In the field of artificial intelligence, some research is performed into developing a system that can automatically program itself to add capabilities it originally was not given. This also extends into AIs that are capable of writing independent software that can solve a specific problem. One application would be to create a programming language that could use AI to generate fast program prototypes.