I’m always looking for good reading recommendations. In fact, I’m always looking for recommendations for anything — I can’t buy a screwdriver without comparing several reviews. For years my go-to software reading list has been Joel Spolsky’s invaluable Fog Creek training program, which I still head back to from time to time when I’m after something good.
Below is a selection of the books that I have found to be useful as a software developer.
The C Programming Language by Brian W. Kernighan, Dennis M. Ritchie
This was on my desk when I arrived to start my first proper software engineering job at Motorola, and I still have it on my shelf now. The book seemed very daunting at the time, even though I knew C fairly well already. It is very terse and doesn’t lead you in gently at all. And that is its beauty. There is nothing spare here — the classic guide to programming in one of the all time important languages.
Code Complete by Steve McConnell
Mammoth, exhaustive journey through virtually every skill and behaviour necessary to become a highly competent software developer. Rightly recommended by many, this truly is the bible. If you only read one book on building software, it may as well be this, though due to its size you could probably get through the rest of this list before you finish it.
Mastering Regular Expressions by Jeffrey E.F. Friedl
You won’t go wrong with this book when the time comes to bite the bullet and fully get to grips with regex’s. The theory is covered in very readable fashion, and major things to watch out for (matching balanced sets, performance issues) are drummed in enough that you should at least remember to come back to the book when you find yourself up against them. The second part of the book covers language specifics for Perl, Java, .NET and PHP.
Peopleware by Tom DeMarco and Timothy Lister
Classic text that reads like a call to arms for enlightened software managers everywhere, until the depressing realisation sinks in that even 25 years after its publication, almost none of its lessons have been taken on by any companies, anywhere. Key revelation for me in this book is that software quality can be far more important as a motivational device for teams than as a means to shifting units.
The Secrets of Consulting by Gerald M. Weinberg
Not just for (would be) consultants, this is a wonderfully rich source of information for anyone who ever needs to give advice, solve problems or instigate change. Particularly of note is the frank and thorough discussion on charging for your services. This is the first book of Weinberg’s that I read, and it has started my journey through his sizeable back catalogue.
The Non-Designers Design Book by Robin Williams
Yet another great recommendation from Joel Spolsky’s list, this book covers timeless design principles from the pre-web age, which is a good way to keep the theory separate from the faster moving world of web design. Contains one of the more memorable acronyms to help you remember the key tenets of contrast, repetition, alignment and proximity.
Refactoring by Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts
The great thing about this book is that, aside from being a fool-proof guide to improving existing code, it makes a brilliant lesson in good design. Because of the step-by-step nature of the actual process of refactoring that is described, each end design has a small narrative built around it, which makes for compelling and memorable lessons in how good code should be put together. Furthermore, the refactoring process itself is actually a great technique for writing new code, one I often use myself, whereby you can get stuff working quickly and roughly to give yourself an impetus, then iterate again and again over the code, simplifying and clarifying purpose with each iteration, until you arrive at the finished article. Essential reading.
User Interface Design for Programmers by Joel Spolsky
A book from Joel on how not to mess up UI’s. Available in its entirety for free here. There cannot be any possible excuse for not reading this. Read it now.