Good programming books are a great resource. They open your mind to new ways of thinking. Below are some short outlines of books that have made a difference to my work.

Richard Rodger.

Decompiling Java
cover image of Decompiling Java Apress, 2004, Godfrey Nolan
www.riis.com

I've just put this book down after reading it right through nonstop for four days. I haven't done that with a technical book since Learning Perl. Most techie book these days are quickie grab bags and you end up paying for a lot of dead trees that you aren't interested in.

Well, if you are interested in decompiling Java, then this book tell you exactly how to do that. There's no fluff and every chapter counts. You'd better be prepared for some serious hard core details, but then that's what you'd paid for. It is really great to read a book that doesn't end each chapter with a few links to the real material because the author could be bothered to write it up.

 
Code Generation In Action
cover image of Code Generation In Action Manning, 2003, Jack Herrington
www.codegeneration.net

Generating code is a great way to be productive, but how can you productively generate code? Jack's book is a direct, practical guide to implementing and using code generators.

So what's the big idea? Quite simply, generating code is a lot more fun than writing it. You work faster and with fewer bugs. This book covers every aspect of code generation, from workflow to design, from metadata to documents, from common worries, to a full case study.

Not only does Jack comprehensively cover the practical aspects of code generation, he also makes a lasting contribution to the field by providing a solid analysis of the different styles of code generation. By naming and describing the design patterns of generative programming he has given us a common vocabulary for intelligent discourse. This achievement alone makes "Code Generation In Action" a classic reference.

Generative programming is the rising star of the post object-oriented programming techniques. Like unit testing, once you try it, you'll never look back. Let this book be your introduction and guide.

 
The Pragmatic Programmer
cover image of The Pragmatic Programmer Addison Wesley, 2000, Andrew Hunt, David Thomas
www.pragmaticprogrammer.com

If there is only one book that you ever buy about programming, make it this one. This books cuts through all the methodology madness to the heart of programming. Programming is a craft and this book shows you the path to craftsmanship.

It is short, simple and sweet. It expresses clearly why certain things feel right and why others feel wrong. It expresses in plain language all the common sense you will ever need to be a great programmer.

This is one of those rare books that is a pleasure to read again and again.

 
Death March
cover image of Death March Prentice Hall, 1997, Edward Yourdon
www.yourdon.com

Programming is as much about people as it is about code. Death March helps you tackle the people side of working as a programmer. I have certainly found this book to be a real eye-opener, especially when it comes to corporate politics.

This book will help you understand how to manage, negotiate and survive "impossible" projects. Its main benefit is an honest analysis of the many difficult situations that programmers face. It's really great to know you're not alone, and that others have seen it all before.

 
Code Complete: A Practical Handbook of Software Construction
cover image of Code Complete: A Practical Handbook of Software Construction Microsoft Press, 1993, Steve McConnell
www.stevemcconnell.com/

A classic work on all the small details of writing software. Every character counts when it comes to source code. This books explains how to lay out your code, how to name your variables and methods, and all the heuristics that experienced programmers use everyday.

Almost everything in this book will be familiar. Its value lies in the clear and thoughtful expositions of the author. Every aspect of writing source code is carefully and clearly examined.

If you are just starting out in software, this book will save you many hours of pain. If you are already a master, this book will give you a warm glow of confirmation.

 
Software for your Head
cover image of Software for your Head Addison-Wesley, 2002, Jim and Michele McCarthy
http://www.mccarthy-tech.com

This is an interesting book. It proposes an approach to software project management that is people focused. In fact, software development productivity is assumed to follow directly from creating open, honest and genuine teams. I am not entirely convinced that this vision is achievable in practice, but there are many good ideas here.

One proposition that is particularly striking is the insistence that all decisions are taken unanimously. This is achieved by allowing each team member an absolute veto. The idea is that, with a genuine team, this will not be a problem.

Like Extreme Programming this methodology works exponentially better when all parts are implemented at once. However, unlike XP, which can be modularised, the approach in this book is based on the emotional commitment of all team members. This can be difficult to get, to say the least.

A refreshing and alternative approach to managing software development teams.

 
Open Source Development with CVS
cover image of Open Source Development with CVS Coriolis, 1999, Karl Fogel
cvsbook.red-bean.com

A great guide to the practical ins and outs of CVS. All issues from the client to the server are explored and explained in an easy-going and clear manner. A book to have on your desk day (and night).

What makes this book special is that it also discusses in great depth how to run an open source project. There are discussions on politics, distributed development and release policies. This an invaluable guide if you are thinking of starting your own project. It will really help you to avoid many common pitfalls.

 
Program Generators with XML and Java
cover image of Program Generators with XML and Java Prentice Hall, 2001, J. Craig Cleaveland
craigc.com

This is a great introduction to Generative Programming. You'll be taken step-by-step from domain analysis right through to designing your own template language. Although the focus is on using specific technologies (Java and XML) to generate programs, the discussion is also a good overview of the entire field.

The main strength of this work is its absolutely practical approach. Many examples are used to illustrate key points, so that the flow of the argument is easy to follow. All in all one of the more recent classics of Generative Programming.

 
Programming Ruby
cover image of Programming Ruby Addison-Wesley, 2001, Andrew Hunt, David Thomas
www.pragmaticprogrammer.com/ruby

David and Andrew strike gold again with this one. They really like Ruby and it shows. After reading this book, so will you. Their enthusiasm is infectious and you'll soon be lashing out closures and other Rubyisms like there's no tomorrow.

Ruby is a rare mixture of the functional and procedural/OO styles. If you've always wanted to try functional programming, but were too afraid to try, Ruby is the place to start and this book is the guide.

This book covers pretty much everything you need to know, and includes a comprehensive reference section.

 
Rapid Development
cover image of Rapid Development Microsoft Press, 1996, Steve McConnell
www.stevemcconnell.com/

Perhaps a precursor to Extreme Programming, Steve's practical down-to-earth approach will appeal to those who prefer or must use more traditional software development strategies. Nonetheless, there are lots of things you can do to "tame" your schedule, all detailed in this work.

I suppose the main message from this book is that you have to have to consider risk management to be your number one priority. This is essentially recognising the uncontrollable nature of the software development process, and being prepared. It's easy to fall into a sense of false security (or rather, wishful thinking) and a false hope that enough all-nighters will save the project. This book argues for a more practical and mature approach.

 
The Design of Everyday Things
cover image of The Design of Everyday Things Doubleday, 1988, Donald Norman
www.jnd.org

This is one book that every programmer should read. It's not about programming. It's about users. Users are people too. Before I read this book I had a pretty dim view of users. Now I realise that I am also a dumb user, and so are you. No? Well, OK, so you never Push when the sign says Pull...?

The Design of Everyday Things is everything a good book should be: it's short, it's direct, it's full of examples, and it's right. If you've never given much thought to usability then this book will guide your first steps. The principles it covers are universal and well tested. At the very least it will make you think in a new way, and there's not much more you can ask for from a book.

 
The Non-designer's Design Book
cover image of The Non-designer's Design Book Peachpit Press, 1994, Robin Williams
ratz.com/robin

This is another short and sweet book. I like short books. If you can't say something with brevity then it's probably not worth saying. That said, Anna Karenina is good for a laugh... Where was I? Oh Yes, this is a lovely book. If you think you know something about fonts and layout and lashing together a bit of website think again. This book is great for people with no taste (like me). Full of practical, focused and useful tips and rules of thumb for producing something that is visually appealing.

So what does this have to do with programming? Go open up a random source file and stand about 10 feet away from the screen. Does the logic jump out at you? It should. I don't care what your bracketing style is. That's not important. What is important is readability. How do you get readability? Proximity and Alignment. How do you get Proximity and Alignment? Go read the book.

 
Generative Programming
cover image of Generative Programming Addison Wesley, 2000, Krzysztof Czarnecki, Ulrich W. Eisenecker
home.t-online.de/home/Ulrich.Eisenecker/gpref.htm

If you're serious about generative programming you have to read this book first. It's heavy going and very academic, but it does provide a good theoretical framework and a nice graphical language for feature models. The second half of the book goes into some serious C++ template work which I do not understand (not enough C++ experience, I'm afraid), but it looks kinda cool. It's a classic work, and rewards careful reading.

 
After the Gold Rush
cover image of After the Gold Rush Microsoft Press, 1999, Steve McConnell
www.stevemcconnell.com

Another good one by Steve. Although described as a collection of essays, this short book (did I mention that I like short books?) is actually a very coherent and well structured argument for the introduction of a professional qualification for software engineering. Now, while I would have some reservations, I can recommend this work as a good exposition of one side of the argument. It nearly-but-not-quite convinces me that software development can be just like other branches of engineering. Maybe it'll convince you? It's a good debate; we really should decide what it is that programmers actually do.