‘Iacta alea est’
Part of the reason reasoning about the business, manner, and craft of software development is so difficult is that we are, according to Fred Brooks, building “castles of the mind”.
The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures…
Yet the program construct, unlike the poet’s words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself. […] The magic of myth and legend has come true in our time. One types the correct incantation on a keyboard, and a display screen comes to life, showing things that never were nor could be.
—Frederick P. Brooks, Jr., The Mythical Man-Month: Essays on Software Engineering (Boston, Addison Wesley: 1995), Anniversary Edition.
We are thinking across many axes, layers and/or dimensions at any one time. Take even the matter of simplicity. Every software developer agrees that it is good, but you have as many definitions of what simplicity is as there are software developers in a room on any given day. And that definition may change with the context of the particular project or problem.
And I think that difference of conviction is often because one is thinking at a different level, dimension or frame of reference than the other. They could both be correct, and agree that the other is correct, if they were but to discover the criteria the other was applying. And if there was enough clarity of thought to arrive at this point, the discussion would then move onto what is the correct reference point with which to frame the discussion, and so it would continue.
Given the flexibility of the media, the difficult of trapping the air in which a castle is built and with which it is built it is incredibly challenging. We are, in effect, thinking about thought.
So if we are to build on the right foundation, we first have to discover what this foundation is. And I don’t know if we are any closer to discovering what precisely that is.
The two extremes that come to mind, that are often brought into the discussion, are indicative of the split brain of software development; the right and the left side. Programming can be reduced to data and algorithms, performance and efficiency. It can be considered an art and a craft, like writing a work of literature, or constructing an item of furniture. And that’s only the beginning. Some like to tend to their gardens, others to like to build their castles or skyscrapers, yet others sit in the production line of the feature factory.
And yet, despite all of this diversity, I think we all realise that it is both everything and nothing like all of those activities. It is like graphing the waveform of the wave we cannot see. We are seeking to discover and discern something intangible, something that until now remains elusive.
What are your favourite analogies for software development? What are the analogies that you dislike or even find irksome? Do you think we will find a way to define it or describe it accurately? Or will it remain something that when try to capture in a bottle eventually that bottle will always break?
—Friday 2nd April 2021.