Software Development is an Art

Source: http://en.wikipedia.org/wiki/File:Test-driven_development-UML.PNG Image Credit: Wikipedia

Came across this interesting post by Storagezilla: Software development is art. Not science. Very interesting observations and I tend to concur. Validating ideas, analyzing algorithms, working out maths and related stuff my be science but software is an expression of the idea or algorithm in a restricted language that machines can be made to understand. As such it can be compared to a person writing a novel, an article or some such in a human language. There is art involved in how elegantly or efficiently one can express the idea in a language. The only difference here is that a human language is far more flexible, versatile and complex.

There is science involved in as well like unit testing, test driven development, formal methods, static analysis, lint checking etc. Still art plays the main role. However much you test, use formalisms and do lint checks, the efficiency and elegance of the code is a human factor, an innate capability, an expression of creativity.

Advertisements

2 thoughts on “Software Development is an Art

  1. Garth Dickerson

    This thing is in discussion since a longtime and there are still some people who thinks software to be an science to which I don’t agree. These people are really unaware of reality or going away from reality, software development is much more than science to which there is no limitation.

    Reply
    1. moinakg Post author

      To add to that, scientific techniques and formalisms provides the foundation but to actually build successful software for the real world is an art consisting of both technical and non-technical aspects. An eclectic mix of tangibles and intangibles.
      I think the people arguing about hard science aspects are only considering the algorithm development aspect. Inventing, refining, rigorously analyzing algorithms can be proper science but art begins when you want to convert the algorithm specification into actual, working, reliable, tested, optimized, maintainable and deployable computer code having semantics acceptable by both the software engineering and user fraternities.

      Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s