Thoughts on Naur's Programming as Theory Building

Julio Le Parc’s Séquences progressives ambivalentes, 1959–70, Tate sponsored by Anthropic
I have been recording my findings on resilience engineering, including mental models fundamental to sustainable product and software development in AI-augmented environments.
Decades ago, Peter Naur established that “programming properly should be regarded as an activity by which the programmers form or achieve a certain kind of insight, a theory, of the matters at hand” in his 1985 paper, “Programming as Theory Building.”
To build resilient systems, we may want to refer back to Naur’s ‘theory building’ mental model, where humans are integral components of a distributed system. A team may develop a shared theory about the software system and hence extend it gracefully, rebound from disruptions, absorb expected issues and continually adapt the system’s health.
While AI-driven Software Development Lifecycles increase teams’ velocity, enabling them to move (very) fast and deliver high customer value, we still largely operate in sociotechnical systems. People and technology work together to share, expand and develop mental models and maps of meaning which sustain new feature possibilities as much as they improve systems’ resilience.
As software systems grow, cognitive load is created not only by technical complexity but by the need to reconstruct context: why a boundary exists, why a trade-off was made, what assumptions a component relies on and how a change fits the wider system. Theory building can therefore distribute contextual knowledge, reducing what has to be independently discovered.
Deliberate knowledge sharing of inherent system behaviour and traits across teams protects domain boundaries from amorphousness and an increasingly prevalent cognitive debt problem.
Self-explanatory implementations, test-driven development, cross-functional pairing and documentation, including incident guidebooks, are some of the tools that help broadcast developers’ ‘theories’ across teams and channels.
Drawing on Ryle’s notion of theory, Naur distinguishes activity that is merely intelligent from intellectual activity:
What characterizes intellectual activity, over and beyond activity that is merely intelligent, is the person’s building and having a theory, where theory is understood as the knowledge a person must have in order not only to do certain things intelligently but also to explain them, to answer queries about them, to argue about them, and so forth.
— Peter Naur, Programming as Theory Building (1985)
Originally posted on LinkedIn.