Updated 25 Feb 2012
There are lots of books out there about the current dominant programming languages (or the currently hip and fashionable smaller languages). You can find these by searching Amazon or Stackoverflow. But software development is, for me, much more about thinking skills, design tradeoffs, and communication. Let me suggest some other aspects of the job that you might consider to become a better developer.
How To Solve It: A New Aspect of Mathematical Method, by George Polya
This is a great set of patterns for approaching problems in a structured way. Although intended for mathematical problems, I find that asking the same questions can really focus my thinking on anything. What are the knowns? What are the unknowns? Can you find an analogous problem and solve that? (Wikipedia)
Six Thinking Hats, by Edward de Bono
People working in a group typically play several roles (eg, devil’s advocate, positive thinker, moderator), but they usually do it unconsciously. If we are aware of what kind of thinking is needed at a certain moment, we can work together in the same mode, instead of battling each other just because we have different assumptions about what we’re trying to accomplish.
The Wall Street Journal Guide to Information Graphics, by Dona M. Wong
If you need to share quantitative data from tests, benchmarks, etc., it’s a good idea to understand the basics of visually presenting your data. It also helps to recognize presentations from others that are confusing or misleading.
The Elements of UML 2.0 Style, by Scott W. Ambler
A quick and pragmatic guide to UML diagram types. Which kind of diamond to use on this line? When in doubt, leave it out.
101 Things I Learned in Architecture School, by Matthew Frederick
You should learn how to use figure and ground in your drawings. And how to draw a perfect rectangle.
Getting Things Done: The Art of Stress-Free Productivity, by David Allen
Get your TODOs out of your head and into a system where you can be certain they will not be forgotten. Divide your time consciously between planning and doing. Also be careful to define tasks that really are “do-able” (it’s common to write todos that are subtly vague in a way that makes them tough to complete).
Pomodoro Technique Illustrated, by Staffan Noteberg
This is kind of like iterative development for your tasks. Work in small batches at a sustainable pace, focus on one thing, and reflect in order to improve.
Emergent Design: The Evolutionary Nature of Professional Software Development, by Scott Bain
An excellent book, explaining the ways that pressures on your software (over time) can guide your design to grow along with the needs. Use of patterns emerge from the need, rather than being a design goal from the start.
Patterns of Enterprise Application Architecture, by Martin Fowler
Higher-level patterns at the application level. This is an area where there seems to be a bit of a gap in software literature, and this, along with the others in the Martin Fowler series (eg, Enterprise Integration Patterns), is a much-needed catalog for application developers.
Refactoring to Patterns, by Joshua Kerievsky
Framing patterns as solutions to a “code smell” is much more effective than learning them abstractly and then looking for places to apply your new knowledge.
Smalltalk Best Practice Patterns, by Kent Beck
This is the best resource I’ve found for patterns at the class and method level (eg, ExplainingMethod, DefaultValue). This was also published with Java code under the title “Implementation Patterns”, but somehow the Smalltalk version is much better.
The Pragmatic Programmer: From Journeyman to Master, by Andrew Hunt and David Thomas
Not only very practical advice, but at the same time the philosophy and wisdom of years of experience behind that advice. Study this and study your craft.
Software Craftsmanship: The New Imperative, by Pete McBreen
Software really isn’t a science, so is there anything we can learn from the craft traditions? Studying the work of masters, working with more experienced developers as mentors, mixing theoretical learning with practical application.
The Mythical Man-Month, by Frederick P. Brooks
A classic, and still applicable nearly 40 years later because it’s still people developing software.