In his seminal 1985 essay, Programming as Theory Building, computer scientist Peter Naur fundamentally redefines software development as a deeply human activity. He argues that the primary product of programming is not the tangible source code, documentation, or specifications, but rather a shared mental model—a “theory”—constructed within the minds of the engineering team. Drawing on philosopher Gilbert Ryle’s concept of mind, Naur stresses that successful software relies on an active, intuitive “knowing how” rather than a rigid list of rules. Code and design specs are inherently lossy media; they merely capture what a program does, completely failing to communicate the “why” behind historical constraints, structural exclusions, and architectural trade-offs.
Consequently, Naur views a software system as “alive” only as long as its original engineering team actively possesses and maintains this underlying theory. When the group of programmers who understand this philosophy completely disperses or leaves the project, the program is effectively considered “dead”. Subsequent developers can execute the software and even mechanically modify it, but they are forced to treat it like a mysterious black box. Lacking the original theory, their subsequent modifications manifest as disjointed patchwork fixes that introduce unexpected side effects and ultimately accelerate overall architectural rot. In Naur’s view, reconstructing this lost theory purely from source code text is so difficult that scrapping the codebase and rewriting it entirely from scratch is frequently the cheaper, cleaner option.
This perspective has gained profound significance in the modern era of generative AI and Large Language Model (LLM) coding assistants. While AI tools can effortlessly churn out complex, syntactically perfect code, they inherently lack any structural intent or broad cross-module architectural awareness. When engineers reflexively accept these AI-generated blocks without integrating them into an evolving mental model, projects quickly fill up with theoretically orphaned codebases. Naur’s work reminds the modern software industry that writing text is no longer the primary bottleneck of software engineering. Instead, the true value and survival of software reside entirely in the human developer’s ability to maintain, communicate, and expand the underlying theoretical framework.
- Reddit: Programming as Theory Building, Naur (1985) Discussion
- Ratfactor: Dave’s Paper Notes on Naur’s Theory Building
- Ingenieria de Software I: Programming as Theory Building (Full PDF text)
- Embedded Artistry: Field Atlas Breakdown of Naur’s Theory
- Hacker News: Discussion on Naur’s Essay in the Era of Autonomous Agents
- LinkedIn: Wesley Reisz on the Modern Relevance of Naur’s 1985 Essay
- Polvara: Reevaluating Naur’s Essay in the Generative AI Era
- Cekrem: Senior Developers as Guardians of Software Quality