Image Credit: WikipediaCame 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.

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.
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.