There are some good books on programming. There are also many bad. Here are some of the former. I leave the pleasure of finding copies, on-line or elsewhere, as an excercise to the potential reader.

George Pólya. (1945). How to Solve it. Princeton University Press

William Strunk Jr and E. B. White. (1959). The Elements of Style. Macmillan

Robert M. Pirsig. (1974). Zen and the Art of Motorycle Maintenance. William Morrow and Company

Brian W. Kernighan, Dennis M. Ritchie. (1978, 1988). The C Programming Language. Prentice Hall

Jon Bentley. (1988). More Programming Pearls: Confessions of a Coder. 1st edition. Addison-Wesley

Donald A. Norman. (1988). The Design of Everyday Things. Doubleday

Peter van der Linden. (1994). Expert C Programming: Deep C Secrets. Prentice Hall

Frederick P. Brooks Jr. (1995). The Mythical Man-Month: Essays on Software Engineering. 2nd edition. Addison-Wesley

Harald Abelson, Gerald Jay Sussman, Julie Sussman. (1996). Structure and Interpretation of Computer Programs. 2nd edition. MIT Press

Bruce I. Blum. (1996). Beyond Programming: To a New Era of Design. Oxford University Press

Dirk van Dalen. (1997). Logic and Structure. 3rd edition. Springer

Brian W. Kernighan, Rob Pike. (1999). The Practice of Programming. 1st edition. Addison-Wesley

Jon Bentley. (1999). Programming Pearls. 2nd edition. Addison-Wesley

Chris Okasaki. (1999). Purely Functional Data Structures. Cambridge University Press

Andrew Hunt, David Thomas. (1999). The Pragmatic Programmer: From Journeyman to Master. 1st edition. Addison-Wesley

Paul Graham. (2002). Revenge of the Nerds.

Henry S. Warren, Jr. (2013). Hacker’s Delight. 2nd edition. Addison-Wesley