Here are my three favorite programming books, the ones I consider most important and would most recommend. There’s a good list on stack overflow too, if you prefer the wisdom of crowds to the wisdom of me.
Code Complete, Steve McConnell
This is the book that took me from enthusiastic amateur to professional. It covers the programming-in-the-small that you will do every day for the rest of your career: Naming variables, writing for loops, that type of thing. I know, you know how to write a for loop already.
This book will make you better at the small things.
Code Complete: A Practical Handbook of Software Construction
The Art of Unix Programming, Eric S. Raymond
It took me a very long time to read this book. I would pick it, get a few pages in, have an epiphany, and go re-write some things.
Unix is the only constant in our world. The programming language you use will change many times, the tools you use will change all the time, and even SQL is not as much of a constant as it once was. But Unix will always be there for you. Improving your Unix knowledge is the single best investment you can make as a programmer.
But this is not just a book about Unix. It’s a book about the philosophy of Unix, about The Way, and it intends to bring you enlightenment in the Zen Buddhism sense.
For me at least, it did.
The Art of UNIX Programming
The Linux Programming Interface, Michael Kerrisk
This is the Linux grimoire, the spell book with all the spells. It’s over $60, 1500 pages, and you must never get it wet or read it after midnight.
Pretty much everything interesting you do in Linux (open a file, write to a socket, start a process, sleep. allocate memory, everything) is a syscall. This books is all the syscalls, and extensive information around them.
It will answer all your questions.
The Linux Programming Interface: A Linux and UNIX System Programming Handbook