This is actually a very difficult question because it depends entirely on what the programmer's current duties and goals are.
Given those categories, I'll go with:
Code organization: Clean Code by Uncle Bob
Object-Oriented: Gang of Four's book and Code Complete by Steve McConnell
Algorithms and Data Structures: Cracking the Coding Interview by Gayle Laakman McDowell
Programming Language: Kernighan and Ritchie (K&R) C
Now that that's over, I have a few comments. Some of these books, while great, are also very cliche... If you find a particular book that interests you, I urge you to read some pages and if you like it, read that. I'm extremely against training up a clone army of software engineers who just do as they're told by the authors above... I think that's extremely dangerous and counterproductive to progression. Nevertheless, these are great books and will help a programmer establish a great foundation and even ethics. Also note that these are GENERALIZED BOOKS... But no means are ANY of these books (aside from maybe K&R C) specialized in any way... For in-depth topics, you need more than 5 books, my friend.
I chose K&R C not because it's even C but because the authors write extremely concise code... Stuff like:
void strcpy(char* s, char* t){
while((*s++ = *t++) != '\0')
;
}
Look at that code... It does so much in so little space. And while some would say it's ugly and/or "not readable," I think it's important for an engineer to be exposed to this kind of code to both see the capability of the programming language's constructs, but also to get a little better at deciphering dense code.