I learned to program from books. C++ from the Ground Up was my first computer book. It gave me more than just a syntactical guide to the language. The book was full of useful principles that I still use today, over a decade later.
Our organization recently handed each programmer a copy of Code Complete with a mandate to study it completely. I am now reading it and Software Estimation by Steve McConnell. Both books are very well written and valuable resources.
Sadly, a majority of books that crowd the book store shelves are merely parroting online documentation or other documents that are available on the Web instead of teaching valuable and useful skills. Also, many focus so narrowly on a software or platform version that they become obsolete with the next release. C# 1.0, C# 2.0, C# 3.5. You can't finish reading the book before the next version of the platform or technology is released; much less apply it in your work.
Selecting books, like the many on Jeff's list, is difficult, but definitely worthwhile. True references should help programmers develop skills that transcend the current technology or platform but can be the foundation for work on whatever groundbreaking work comes along in the future perhaps on a platform that does not yet exist.