I. Naur’s Actual Argument

Peter Naur’s “Programming as Theory Building” (1985) proposes that programming should be understood not as the production of program texts but as the building of theory in the minds of programmers.
The Three Capacities
This theory, drawing on Gilbert Ryle’s epistemology (1949), encompasses:
- Explanatory capacity — The programmer can explain how the solution relates to the world it addresses
- Justificatory capacity — The programmer can explain why each part is what it is
- Modificatory capacity — The programmer can respond constructively to demands for change
The third capacity is crucial. Anyone can read code and understand what it does. Only someone with the theory can know how to change it correctly when circumstances shift.
The Central Claim
Naur’s central claim is that theory “could not conceivably be expressed” in documentation because it involves tacit knowledge that defies formalization:
“The dependence of a theory on a grasp of certain kinds of similarity between situations and events of the real world gives the reason why the knowledge held by someone who has the theory could not, in principle, be expressed in terms of rules. In fact, the similarities in question are not, and cannot be, expressed in terms of criteria, no more than the similarities of many other kinds of objects, such as human faces, tunes, or tastes of wine, can be thus expressed.”
This is an epistemological claim, not an economic one. Naur is not saying “we lack time to document properly.” He is saying that theory involves recognition of similarities that are, in principle, beyond explicit formulation.
The distinction matters. If the problem were time, more effort would solve it. If the problem is epistemological, no amount of effort helps.