- Code Complete: My copy is completely dogeared, has like 15 bookmarks in it, and took me from master journeyman to apprenctice master.
- http://www.extremeperl.com: Helped me understand exactly what XP was all about. While I still have some Kool-Aid left in my cup, TDD is definitely an improvement over prior processes.
- Programming Ruby: Learning another language is always good as it gives you a new perspective on your other languages.
- Someone mentioned Hackers and Painters and the OP mentioned Joel Spolsky. Read everything they write. It's not always good, but there's rocks among the gems, not gems among the rocks.
- Design Patterns by Gamma et al. I don't agree with a lot of it, but my mind opened up just through exposure.
- ANSI Lisp: I haven't read it yet, but am eagerly anticipating what will happen when I do.
In addition, you should have read one book in each of the following:
- Database administration - you may never be a DBA, but you need to know what they're dealing with. Plus, when you're solo, you are the DBA. And, the single greatest bottleneck in any application is the datastore. Learning how to improve the performance of this section will provide the greatest bang for the buck.
- System adminstration - Same thing.
- Project administration - Same thing.
A master in a skill is at least a journeyman in all skills that touch upon it. Only then does he have true mastery of his skill.
My criteria for good software:
- Does it work?
- Can someone else come in, make a change, and be reasonably certain no bugs were introduced?