Let me begin by stating a fact. Software development is an art. If you disagree, or don’t quite understand how this is possible, let me explain.
Despite the notion that software developers, when schooled in an academic setting, do so under the umbrella of “Computer Science” or “Software Engineering”, I find that the process of developing software is neither science nor engineering, but an art. It is more like painting and sculpting than it is classifying organisms and particles, or designing automobiles and aircraft carriers. I can safely say this, in part, because I was at one time or another an art major, a physics major, a mechanical engineering major, and a computer science major, while studying as an undergraduate. Thus, I have a unique perspective of what it is to be an artist, a scientist, an engineer, and a software developer.
The Artist and the Artwork
To illustrate this fact, let me first describe how artists typically create a work of art. While this process is described, be mindful of its striking resemblance to the process of software development.
First, the artist visualizes the thing that he is creating. Maybe it’s a painting of gentle mountains flirting with an angry sea. Maybe it’s a sculpture of the human form, portraying strength in the face of adversity. Once the artist has realized his vision, his next order of business is to figure out what materials will be used to manifest that vision into reality. Will it be paint? Watercolor, oils, or acrylic? Will it be clay? Stone? Wood? Perhaps pieces of string or metal. Typically, the artist will experiment with different materials until the itch for getting started becomes so great that he is inexplicably forced to make a final selection.
Materials and tools in hand, the artist begins to work. As he does so, new ideas are born, and old ideas fade into oblivion. Faults and imperfections are tucked and patched. The very form, as it progresses, seems to direct the artist into a particular direction, as if the artwork is the master and the artist is the squire.
I saw the angel in the marble and carved until I set him free. – Michelangelo
After hours or days, the piece begins to take shape, no matter the fact that it’s not quite exactly the same shape that the artist had originally intended. It is nonetheless beautiful and perfect. It has taken on a life of its own. The artist’s heart is filled, and he eagerly awaits the unveiling of his creation before the world.
Even after the artwork is complete, the artist, who is in fact his own greatest critic, has not just the freedom, but also the means, to make adjustments to the artwork even after an audience’s eyes have laid upon it. Perhaps the corals in the angry see are a bit too muted, or the gaze of of the human eye not quite right. In truth, the artist could theoretically tweak the artwork infinitely.
The Unmistakable Parallel
Yes. The software developer and the artist are indeed one in the same. The software developer is the artist, and his code is the artwork.
Does the final architecture, modular dependencies, and database schemas look exactly like the software developer had originally imagined? Of course not. The evolving codebase is just like the evolving art form. The users are the audience, and the software developer’s deep desire to share his work with the world is no different than that of of the artist.