Sure programming is an art. But many Electrical Engineers I know would tell you that designing ASIC chips is like an art, more creative than formulaic and requiring a feel for the "aesthetics" of the design. Certainly Civil Engineers also could qualify for a certain amount of artistry in their profession, buildings and bridges not only have to maintain functionality, but they also have to look good! In fact all fields of Engineering can be argued to be arts (by Art Tatum's definition).
An Engineer is required to solve a problem within the giving specifications, at least as much as programmers. If you think this does not require creativity then you are sadly mistaken. An Engineer cannot simply plug things into a formula and expect her work to be done. There is far more to it than that, and it all stems from the creativity of the engineer.
Artists do not have the monopoly on creativity, just as Engineers do not have the monopoly on using screwdrivers.
Programmers do not try to "communicate" with their computers any more that a Mechanical Engineer would "communicate" with a gear. Computers are simply a (very complex and powerful) tool that is used by programmers.
Aside from all this I agree with Art Tatem's assesment that programming is an art, however, software development should be considered engineering. Why? Engineers are people who build and design things that people depend on for their functionality. Artists, however good, bear no such responsibility to their audience. There is an implicit responsibility that all engineers must bear, because ultimately they are depended on for the safety and functionality of their designs.
Software development (not just programming, which is no more engineering than drafting is, but rather the entire slate of software design), should be considered an engineering discipline because ultimately those who design the software must be responsible for the functionality and safety of what they create. It is this responsibility that defines Engineering.