Is programming an art? Nah! There are no Sistine Chapel ceilings in program form. The best a program can hope for is a ruthless purity of form where everything is just obviously in the right place and it's as small and compact as it can possibly be. It can be esthetically pleasing to examine a well-written program, but the feeling is similar to looking at a six-foot long artillery shell or a sabre and thinking, "For the function it performs, it's perfect. It looks exactly the way it should."
All that perfection of form sounds like engineering. Maybe that's what it is. Computer Science graduates, after all, like to bill themselves as "Software Engineers" and management consultants advertise "Re-engineering" and "Process Engineering" skills (Magic Potions). It may be closer to engineering than art, but it's not that either. Engineering to me means precise tolerances and coming as close to the plan as possible. Whatever it is, there's only one way to do it and you better not be off by more than a millimeter in any direction. If you give the same job to ten different engineers you should end up with ten virtually identical results. There are lots of ways to write a program. If you give the same job to ten different programmers you'll end up with ten very different programs. They'll all do the job, but if you take a close look, you'd find them quite different.
I think programming is more of a craft. It's like making Tiffany-style lamps from copper wire and pieces of cut glass or building fine wooden furniture. There's a function to be performed. There are rules. There's a plan. But there's also still a lot of room for individual preferences and expression.