Software is becoming incredibly expensive. It has long been acknowledge that the greatest cost of a system is not the hardware, but the programmers who develop, change and update software. Software maintenance, the activity of changing software, is considered to account for over 60% of the total cost of a system during its life. Maintenance requires programs to be comprehended. This talk presents a number of models of how programs are comprehended by programmers, beginning with the earliest models devised in the late 1970's, to today's models that possess many links with the discipline of cognitive psychology.