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.