Writing code and developing software is a creative act. A programmer who finds herself in her work wields her tools and applies and refines her craft with as much care and discipline as any other type of artist. Anyone who has ever written software and/or developed an artwork in anger will be familiar with the dual processes of working toward a clear goal or idea, and coaxing an expression into existence through incremental experimentation and failure.
To illustrate this notion I invite you to take a look at Picasso’s artistic process, dear reader:
Perhaps you are not comfortable with an analogy of art/painting for programming? Then the following analogy for programming as gardening may be easier:
["Rather than construction, programming is more like gardening" - source: http://www.artima.com/intv/garden.html]
In any case, the idea that I want to express is that – although it makes sense that software development initially be lumped with other engineering disciplines, since it essentially emerged in it's modern form from electrical and electronic engineering – the perception of engineering as the final resting place of software development as a discipline is not right. Software development is bigger than that, and I want to talk about that here…
Software is as-if-not-more malleable than any other living thing or artwork. And – unless you somehow take into account the mass and velocity of the electrons involved – software is not realised through any specific physical structure. It manifests itself as patterns of electronic signals, through which data flows and is transformed. Ultimately, physical activity always results from and/or produces data that is fed into software, but the software itself is purely electronic.
Here’s Fred Brook’s (author of "The Mythical Man Month") take on programming:
“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...”
One of the factors that makes it difficult for the idea of software development to grow beyond the engineering analogy is that working software is hosted by and dependent on physical structure – i.e. hardware. The development and arrangement of hardware naturally runs on far longer cycles than that of software and therefore certainly fits the classical engineering model.
Another factor that I would suggest keeps software development closely linked to engineering is the perception that from a business perspective, art is perhaps not seen as being as serious-of-a matter or as predictable or rigorous as engineering. Software is ever-increasingly important to business; in-fact, much of the world’s modern business process – from the smallest scale through to the very largest – is no longer capable of operating without software (think point-of-sale systems, telecommunications, share-markets and stock-exchanges). The idea that business is heavily dependent on (the result of) a largely artistic process (software development) though would probably make a good percentage of executives feel ill. So maybe from a business perspective, software development’s happy place is engineering.
[Repeat after me "Everything seems to be in ooorderrr" - source: https://www.youtube.com/watch?v=bhuOIbg-hM0]
Furthermore, for reasons that perhaps justify another blog post – it seems to me that art and engineering are in-fact inextricably linked. All of engineering, from a Mars rover to stone footsteps laid across a stream, could be seen to be forms of installation artwork; each subsequent piece incrementally extending the ideas of its predecessors. And art-for-art’s-sake is apparently a necessity – artistic expression is as old as human history – so it becomes a chicken-and-egg question; which came first, art or engineering?
[40,000+ year old cave art - source: http://news.nationalgeographic.com/news/2012/06/120614-neanderthal-cave-paintings-spain-science-pike/]
So I have come to think that art and engineering have a symbiotic relationship. And I think that software development more than (almost?) any other discrete discipline to emerge from history to-date, straddles art and engineering most evenly. One of the ways that technology emerges is when we figure out how to effectively commoditise an art form. That process of commoditisation is still active with software and is perhaps only just beginning.