Tuesday, August 07, 2012

My favorite programming books

Here is a list of my favorite programming books. The top five I consider essential reading for any serious java developer.
  1. The Pragmatic Programmer - From Journeyman to Master, 1999 (Andrew Hunt, David Thomas)
    • Essential for the aspiring programmer. Some sections are still an unattainable ideal to me, but they all make sense and I am getting closer to that ideal day by day, inch by inch. The book explains important concepts such as orthogonality.
  2. The Mythical Man Month - Essays on software engineering, 1975 (Frederick Brooks)
    • It's now 37 year since this book was published, but it's still very relevant and definitely worthwhile reading. These essays coined many of the terms and ideas that are still heavily used today in software engineering.
  3. Design Patterns - Elements of Reusable Object-Oriented Software, 1995 (Erich Gamma)
    • I don't think this book need any comment. It's a must read.
  4. Refactoring - Improving the Design of Existing Code, 1999 (Martin Fowler, Kent Beck)
    • Same goes for this one as the one above.
  5. Effective Java 2nd ed, 2008 (Joshua Bloch)
    • Great, well written book for the Java developer. It can be read from cover to cover, but is also a reference for all the basic things in Java. For example almost manages to make threading and concurrency fun, at least interesting and understandable.
  6. Domain-Driven Design - Tackling Complexity in the Heart of Software, 2004 (Eric Evans)
    • Every now and then one starts to get a feeling that everything essential has been said about a subject, in this case software design, and then a book comes out that manages to renew the field. This is one of those books. One great idea from this book is that of the ubiquitous language. A summary of this book is available as a InfoQ mini-book
  7. Test Driven - TDD and Acceptance TDD for Java Developers, 2007 (Lasse Koskela)
    • This book managed to completely convince me of always using TDD for all future. It's a very nice combination of theory and practice and it uses some well-known frameworks and standards as example to show that most things can be tested and TDD:d. The only objection I have is that as things sometimes move very quickly in our business; especially within ATDD there has been a lot of effort recently, so this section does not cover the latest and greatest tools and ideas. But it's still good as an introduction to and a sell for ATDD.