The idea of Peter Naur that programming closely correlates with theory building. Programmers build a theory of how their application fits into the real world and how it handles whatever it has to do.
The theory does not only define how the current situation is handled but also how the same theory can be applied to new situations. When requirements are modified, the programmers can apply the theory to the new (often similar) problem. If the new problem cannot be handled with the current theory, the theory might need to be extended/modified. (That’s why program modifications can be expensive—they have to modify the theory.)
The theory is implicit knowledge and should be transferred between programmers. It cannot be inferred from documentation or the source code. The theory (program) is dead as soon as all the original programmers are unavailable. If the new team has to work on the system, it might be economically sound for the new team to rewrite the system. This way they will develop a new theory and will be better accustomed with it.