This heart of the matter, and it means programming is an art, a social one. Like marketing or graphic design, it's an art for other people. Programs must be written to be as readable as possible, to as many people as possible, while still being functional and elegant. This requires an intuition of psychology and sociology, in addition to a firm engineering grasp. A great programmer must be both mathematically brilliant and socially empathic. If she lacks the former, she won't be able to solve Hard Problems; if she lacks the latter, she'll be a Cowboy Coder (http://c2.com/cgi/wiki?CowboyCoder) and her code will be worthless to society.
That's why it's an art.