The Art of Software Development

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.

What is the first thing that a software developer does when a new task is at hand?  Well, determine the materials of course.  Shall he use JavaScript on the client and Node.js on the backend?  Should he use Java?  Or perhaps Scala, the younger brother of Java.  Shall he setup and maintain his own physical servers?  Should he use a cloud service?  Shall he use Linux?   What about jQuery?  What about Backbone, Ember, or React?  Should he step into a completely different alternate dimension and adopt Angular?  The programming languages, computer hardware, operating systems, libraries, and frameworks are his materials.

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.

Eric Rowell

Hi there, my name's Eric Rowell. I'm the founder of Coder Lifestyle, founder of Html5CanvasTutorials, the creator of the KineticJS library, author of HTML5 Canvas Cookbook, and the creator of BigOCheatSheet. I've worked in the Tech industry for about five years while at Yahoo, LinkedIn, and Platfora, and I've also worked in the Transportation industry for two years while at BNSF Railway. I'm currently leading the data visualization efforts at Platfora.

  • http://geshan.com.np Geshan Manandhar

    Good way to think about it, and then github becomes a big art gallery then :)

    still at times its about solving problems, making some process faster and adding value to business.

  • Oliver Tse

    Thoughtful! When you mean “code is the artwork”, do you mean the code creates the output that’s the artwork?

    • ericdrowell

      Heya. No, I mean the code itself is the artwork. You can have really shitty code and very well written code that appear to produce the same results. Upon further inspection, the well written code will be easier to understand, more reliable, more extensible, more scalable, and more performant.

      • Oliver Tse

        Thanks Mr. Drowell!

  • Yousuf Nejati

    An interesting take on the field. I’ve gained a new perspective as a CS student. Thank you.

  • Falafelizer

    I agree with this. It is not just the screen that is the canvas, but also the systems in which this software will play a part.