Translating an idea from my head into an inanimate extremely logical computer AND seeing the idea come to life makes me happy.
Even after 50 years of creating software and software products I am always “surprised by the joy” of programming. I have to take the inspiration and ideas that accumulate randomly and meld them into something precise and logical. While the tools for programming evolve to higher and higher levels of abstraction and capability, I still have to bridge my “gulf of intention.”
“The test of a first-rate intelligence is the ability to hold two opposed ideas in mind at the same time and still retain the ability to function.” – F. Scott Fitzgerald
Creating something new in software is my visceral experience of the Fitzgerald quote. On the one hand, I have a grandiose idea of a “virtual world” inside the computer that I want to create. On the other hand, I have the tedious detailed instructions that I have to type into some form of arcane computer language to realize the vision.
I experience great joy when I bridge this gulf of intention.
Hardest of all is no matter how long I work at bridging the gulf, the reality never comes close to my vision and intention. Perversely, as I start to realize my intention, I realize how narrow the intention was in the first place. My vision of what is possible grows wider. The structural tension between vision and reality grows wider still.
Yet, I persist. It makes me happy.
A program makes me happy when even a small portion of the gulf is crossed.
Yesterday, it was a simple starter Python program to see whether the computer clock time “minutes” were an even or odd number.
Three years ago, it was working with a team to design and produce what is now Nuix Discover’s Social Network Analytics. While I didn’t do any of the programming, I collaborated to design what was needed for eDiscovery lawyers and forensic accountants. Each day, I could see the gulf of intention narrow as Yong and Scott and Eric worked their magic. And then the gulf widened as we realized we could add phone calls and SMS texts to the email communication between members of a social network.
Over the course of a joyful month, we realized we could combine visualizations of semantic networks (how words and documents are related), social communication networks (how people and companies are related), event networks (how events are related in time), and financial transaction networks (how financial information is tied to communications, people and events). Each day was a joyful celebration of progress and a joyful time of designing the next prototype iteration.
Fifteen years ago, David Socha and I asked ourselves “Is Designing Software Different from Designing Other Things?” We summarized our findings by asserting that software design is different. It is the very “softness” and changeability of software that is a “material without qualities” that provides the challenge.
While Heskett‘s `Design is to design a design to produce a design‘ seems nonsensical at first reading, it serves as a clarifying framework to look at the similarities and differences between hard and soft design. The view of the design activities field needs to expand beyond just generating a specification to include the full range of activities — design, build, distribute, intervene, and operate. The evolution of Frank Gehry‘s and John Socha‘s respective design experiences suggest that the future of hard and soft design is not an either/or choice but rather the appropriate combination of techniques, skills, and processes.
As we see in this paper, each of the meanings of `design’ is different between software design and most other design disciplines. In software, the first noun extends to include organizational intervention as a significant component. The verb is about reversing the steps (test-driven development). The second noun is about the source code is the design specification. The third noun is about the design not being an object to be manufactured, for most classes of software, but instead being a complex adaptive system that is an organizational intervention. The other design disciplines that are most like software design are those that share these qualities, including the disciplines dealing with bioengineering and social systems.
The result is what we believe to be a convincing story that software designing is different because it is a field of a `material without qualities’. The key
- Source code is the design (Noun 2)
- Design (Noun 2) and organization intervention (Noun 1) are the dominant steps, unlike hard design where build and distribute are the dominant steps
- The steps of the waterfall design (Verb) model are reversed
- There is little material resistance with software — no physics, no first principles, no simulation from first principles
- Software design (Noun 3) is a complex adaptive system design
- Software is always deeply embedded — exists in some hardware form which provides one set of constraints, and in a soup of other complex adaptive systems which generates fuzzier constraints
As software becomes more prevalent in the design tools and products of other disciplines, we can expect those `hard’ disciplines to become progressively more `soft’, with the concurrent change in forces requiring softer design techniques. In the future, many domains of hard design will require multiple design methods and processes:
- Hard design processes for those things that physics apply to.
- Software design processes for the software or `alive’ components.
- Recognition that most products have an organizational intervention component to them.
More recently, David Robinson and I had several discussions asking “is programming computers like making art?” Maybe the question is closer to “does programming bring me the same joy that painting brings you?”
David is a very talented artist in the widest sense of the word. His paintings stir my soul. His theater work is masterful. I had the pleasure of seeing the grand opening of his play “The Lost Boy” David wrote the script, produced the play, was the lead actor and worked with the Chili Boys to compose the music.
Two years ago I started experimenting with painting using acrylics. I love the experience and the joy of creating colorful marks on canvas. It is the same challenge of translating the vision in my head on to the realities of the canvas. And there is a huge gulf between my intention and what appears with my experiments. Slowly I am bridging that gulf, but I fear I have come too late to develop the skills needed to reproduce my visions.
Now that I am programming again, the joy is similar. But different.
With programming I am resurrecting the skills I developed a lifetime ago with punch cards on an IBM 360 and a teletype interface to a DEC PDP-12. I can draw on a wide range of programming languages, the advent of the World Wide web, many ways to store and manipulate big data, and 50 years of using and evaluating personal and enterprise software products.
With painting, I am an exploring novice. At every turn, I know not what to do or even which tool to use. Or even the questions to ask of others.
However, with both programming and painting, I am surprised by joy.
They make me happy.
Ah! Totally agree with you. Programming and design have to be seen as a holistic part of a computer program.