I was participating in a thread on Boards.ie recently where the original poster asked the question:

[W]hat do I now need to improve on and learn about in order to get any kind of programming/software development job?

bookshelf

As the thread progressed I mentioned what I'd expect a novice programmer to know and how I used to go about interviewing but the part that really got me thinking was when I mentioned some books that I have sitting on my bookshelf. Which ones were good for helping me improve as a programmer and why? I answered on the thread but I figured I should expand on my choices here:

The Pragmatic Programmer: From Journeyman to Master – It's pretty much a collection of good advice to programmers who are trying to improve themselves professionally. Most of the advice is stuff you'll learn sooner or later but it's worth seeing it written down and in an easily readable form. The authors have branched out into publishing a whole load of other books (none of which I've read yet) and their podcast.

Programming Pearls – A collection of small, but tricky problems and really nice worked solutions for them. The chapters were once articles in the Communications of the ACM and each one is arranged around a theme with sample problems at the end (there are solutions at the back of the book). You could think of this book as a sort of "Knuth-lite". I find reading it makes me want to open an editor and start cranking out code.

Design Patterns: Elements of Reusable Object-Oriented Software (a.k.a. "the Gang of Four book") – A lot of object-oriented problems seem to reoccur over and over again so it's worth being able to spot those and know some high-level solutions for them. You get more out of this book if you read it, work for a year and come back and read it again. On reading it the 2nd and subsequent times, I've found myself saying "Ah, that's what I was doing when I implemented X". It's also useful as a Rosetta Stone for communicating with senior developers who are full of themselves.

The Mythical Man-Month – This is a pretty old collection of essays, but if you look past the antiquated bits (like punch cards and paper manuals) you'll find a lot of wisdom. It's more a book on project management than software development but it's well worth a read, after all every software developer is at least partly a project manager. File this book under "learn from the mistakes of others".

Joel on Software – I don't actually own a copy of this, I borrowed it from a friend. All the essays that make up the book are available on http://www.joelonsoftware.com so there's no need to buy the book unless you feel like supporting the author. It's a mixed bag of stuff but it's the collection of thoughts of a successful programmer so it's worth picking through. Joel helpfully includes a "Top 10" listing on his blog. That's a good place to start. Along with Jeff Atwood he created Stack Overflow, an excellent programming Q&A site. The podcast to go with the site is also worth a listen.

Apart from those books, I'd also recommend consuming as many technology blogs and podcasts as you have time for. Here's a list of blogs and podcasts that I follow. I don't want to review them, but they may be worth a look:

Blogs

Podcasts

I'm always looking for new stuff to read/listen to so if you have any suggestions, please leave a comment.