Definitions

# Optimum programming

In the history of computing, optimum programming is the practice of arranging a computer program's instructions in memory so as to minimize the time the machine spends waiting for instructions. It is of historical interest mainly due to the design of many early digital computers.

Most early computers used some form of serial memory (primarily delay line memory). Unlike the random access memory of modern computers, words in serial memory are made available one at a time; the time required to access a particular word depends on the "distance" between it and the word currently being read. If a given line held n words, the average time to read a word would be $n/2$ word times. Without optimum coding, such a machine would spend most of its time idly waiting for instructions and data.

To circumvent this problem, many machines, particularly the ACE and its descendants, included in their instruction format a field specifying the address of the next instruction to be executed. Employing optimum coding, the programmer could locate an instruction such that it would be available in memory just as the preceding instruction had finished. For example, if a programmer had just coded an ADD instruction at address 400, and the ADD instruction required 4 word-times to execute, the programmer would set the "Next Address" field of the instruction to 404, and would place the next instruction there.

In the United States, optimum coding was most commonly employed on the IBM 650 and the Bendix G-15. Both machines had optimizing assemblers (SOAP for the IBM, POGO for Bendix) that could automate this task.