Saturday, April 19, 2008

To become a better programmer

I think some books might help to become a better programmer. This is my personal list:

Erich Gamma, Richard Helm, Ralph Johnson, and John M. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley Professional Computing Series)

The book came out, when I finished university and started by first full time job as an programmer. The theory of patterns taught me about the importance of names for concepts and the importance of communication with other developers. Five years later I went to a conference just to see Erich Gamma. Of course he spoke about patterns, but combined his talk with TDD, JUnit and a comparison of Java and C#. The lecture was not very long but brilliant. That was the first time I heard about TDD and got test infected.

Martin Fowler Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series)

I read the book, when I already worked on enterprise applications for several years. The book was an revelation. Most of the problems described there I know very well, but now I got names for them and so many alternative solutions. This book gave me the possibility to better reflect about design and architecture decisions. This book was partly responsible that I became the architect of our project.

Martin Fowler, Kent Beck, John Brant, and William Opdyke Refactoring: Improving the Design of Existing Code (Addison-Wesley Object Technology Series)

Beside the refactorings and the theory, this book helped me so much to convince my team members of the benefits of TDD.

Eric Evans Domain-Driven Design: Tackling Complexity in the Heart of Software

Brilliant book! The concept of the 'ubiquitous language' helped me very much for my day to day work. Using the 'Layered Architecture' pattern to separate technical details from the business concepts helped to better organize our software components.

Bertrand Meyer Object-Oriented Software Construction (Book/CD-ROM) (2nd Edition) (Prentice-Hall International Series in Computer Science)

Maybe this is the oldest book in my collection. Nevertheless it is still useful for me. I use assertions and 'programming by contract' nearly every day. This concepts can be used together with TDD very well. Even if you do not use Eiffel as the programming language, you can implement an assertion class for every other programming language in several minutes.

Mary Poppendieck and Tom Poppendieck Lean Software Development: An Agile Toolkit (Agile Software Development Series)

I never believed that other industries can teach the software industry about new concepts. After reading this book I know that the people from Toyota were very clever and the software people can learn a lot from them. Now I always try to find some 'waste' in our processes.

Kent Beck Extreme Programming Explained: Embrace Change (2nd Edition) (XP Series)

Although I never had the chance to work in a full blown XP project, this book is still a constant source of inspiration.

Kent Beck Test Driven Development: By Example (Addison-Wesley Signature Series)

If you start with TDD, read this book.

Gerard Meszaros xUnit Test Patterns: Refactoring Test Code (Addison-Wesley Signature Series)

If you already worked a little bit with TDD, then read this book.

I'm very sure everyone has its own list. I would be glad to here from other people about their favorite books.