Programmer got to Program

Programmer got to Program

"Tiger got to hunt, bird got to fly; Man got to sit and wonder 'why, why, why?'" -- Kurt Vonnegut

Back when agile was still a strange new thing I read Alistair Cockburn's "Agile Software Development: The Cooperative Game." It's a great book in its own right, but as a bonus it includes as an appendix Peter Naur's 1985 paper, "Programming as Theory Building," which Cockburn calls, "to my mind, the most accurate account of what goes on in designing and coding a program." I encourage you to read Naur's paper yourself, but its essential point is that programming is the way that programmers solve problems; that the act of programming is not so much the act of producing a program as it is the individual, ineffable way that programmers figure out what the problem is all about and from there devise a solution to it. In Naur's own words:

[P]rogramming 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. This suggestion is in contrast to what appears to be a more common notion, that programming should be regarded as a production of a program and certain other texts. -- Peter Naur

When Naur says "theory" he's talking about an idea introduced by the philosopher Gilbert Ryle in his 1949 book, "The Concept of Mind." As Naur put it, "a person who has or possesses a theory in this sense knows how to do certain things and in addition can support the actual doing with explanations, justifications, and answers to queries, about the activity of concern." Knowledge might be sufficient for intelligent activity (following the rules and "doing it right"), but for intellectual activity -- to develop new ideas, to argue, to explain -- for that, you need theory.

Another way to look at theory is as the highest level of understanding. I like to replace "wisdom" with "theory" in the data-information-knowledge-wisdom hierarchy.

Article content
The DIK(W)T Hierarchy

In the DIKT hierarchy, you can't skip steps. You can't go straight from data to theory; you have to have information and knowledge first. Conversely, you can't just dump theory out as data; you need to work through the intervening layers. In other words, you need to express it. A program is an expression of a theory in the same way that this article, or Naur's paper, or Cockburn's book, or -- arguably -- a poem or a painting or a dance is (ask an artist whether the essence of the art is in the product or the production).

If this all seems academic, it's not; it has huge implications for how we can understand and support software developers. Recognizing that programmers are building theories while they program helps us create better software engineering practices and tools; that recognition is creeping into ideas like developer effectiveness and developer experience. Or if you prefer, consider what it means not for developers but for their potential AI replacements.

Jensen Huang and his advocates might have us believe that the programs of tomorrow will be written by AIs whose human users are subject matter experts who already possess a theory. But you can't share a theory directly -- you can't just magically impart it to someone or something else -- you can only express it and try to help others build their own, comparable theory. And to do that you have to think your way down the chain from theory to knowledge, express the knowledge as information, and then present the information as data if a machine is the consumer, and then (within the machine) go back up the hierarchy to theory again. And we're not sure if AIs really possess knowledge yet, let alone theory. Can they possess theories? If an AI can't possess a theory, how can it create a program? Humans can't build programs without a theory, so how can we produce AIs that can?

On the other hand, even if an AI can possess a theory, can it build one from somebody else's in the way we just described, by consuming their expression of it? Then, is building a theory from somebody else's theory good enough to let a human or an AI create a program, or can a theory sufficient to create a program only be built by programming?

Ultimately: can we build an AI that can program and thereby build a theory for itself? Going back to Ryle: can we build not just artificial intelligence but artificial intellect? If we can, then maybe human programmers won't be necessary. Until then: programmer got to program, and only humans can do that.




To view or add a comment, sign in

More articles by Keith Mann

  • Should You Believe in Ghost Engineers?

    Gartner clients have been asking me and my fellow analysts about a developer productivity study that's been making news…

    1 Comment
  • Burning the Library

    Perhaps my favourite place on the internet is The Internet Archive. Specifically, I love its library of millions of…

  • The Means of Production

    Ten years ago, on April 8, 2014, I posted this photo of my father to Facebook along with this message: "Today my dad…

  • Developer, The Tool-Maker

    About 75 years ago, in the decade following World War 2, Kathleen Booth was a software developer with a productivity…

  • Want More Developer Productivity? Communicate and Collaborate

    Like many of my fellow analysts at Gartner, I found my research agenda in 2023 influenced (to put it mildly) by the…

    2 Comments

Insights from the community

Others also viewed

Explore topics