Recommended reading list for Java Developers/Software Engineers (December 2004)

There are some books you come across that are destined to become all time classics, well worth reading and recommending to others. This is a list of books that I’ve read that I recommend all software developers must read. The list has a strong Java bias as afterall I’m a Java developer myself, but has a mix of both technical and non-technical.

For the past several years of my career I neglected to read project management/software development process type books (after I finished my Computing degree anyway), but there is so much to be learnt from others sucesses and mistakes, regardless of whether or not you intend to become a team lead or expect to find yourself in a less technical role. Afterall, writing the code is only part of the process; a good understanding in tried and true practices, theories and software development processes leads (in my opinion) to a much stronger, well-rounded developer.

As Steve Maguire points out in his book, Debugging the Development Process, why spend years of your career learning by trial and error when you can pick up a good book and learn from insights from others who have already ‘been there, done that’.

In no particular order, here’s my recommended book list:

The Mythical Man Month – Fred Brooks

Written over 20 years ago, this book is a collection of essays on typical problems encountered on software development projects, and what is scarey is that the same problems still happen today. Although some of the examples refer to IBM mainframe development, the lessons learnt still apply to software development today.

Design Patterns – Gamma et al (GOF – Gang of Four)

The Bible of Design Patterns. Why reinvent the wheel when there is already a solution/approach to a commonly occurring problem?

Refactoring – Martin Fowler

Encourages continual review of exising code and during actual development to identify areas for improvement. Identifies typical problem areas (‘smells’..!) that occur in code, and suggests solutions for reworking code to become cleaner, easier to read and maintain.

This is one book I’ve known about for a while but never had time to sit down and read from cover to cover, and wish I had done much earlier…

UML Distilled – Martin Fowler

If you’re going to read one book on using UML notation for analysis and design then make it this one. Short and to the point, covers the main aspects of ech of the diagram types and notation to get you started.

Thinking in Java – Bruce Eckel

This is the best written and most comprehensive book on Java and it’s language features that I have read so far. It goes into far much more detail explaining concepts and the rationale for language features that I have come across anywhere else. If you are just starting out with Java, or even if you’ve beeen developing with Java for years, this is an excellent book

Java in a Nutshell – David Flanagan

This was one of my most referenced books when I first started out as a Java developer, and there were several very well-worn copies in the office at one time. As a reference it really is no more than the API in book form, which is great if you’d rather flick through pages than read API info on the screen. Also more useful is the very short and condensed introductory chapters which give a very quick highlevel intro to Java and most of the language’s core features. This is a great reference for language specific features like operator precedence and ranges of the primitive data types, info that is not too easily accessible elsewhere.

This book doesn’t seem to be as popular as it was a few years back, and most new developers nowdays have not come across this book. I suspect this book was more useful when the core API was smaller, but now Java encompasses so many areas there is no longer a single source of info you can go to, you need other books on more specific areas that you are working in (J2EE features etc)?

Mastering Enterprise Java Beans – Ed Roman

For learning EJBs, this is a very well written book. The examples are somewhat lengthy, but I think this is a very good bok. Again, covers more background info than most (transaction support, isolation levels, best practices etc).

Effective Java – Joshua Bloch
For more advanced Java developers looking to broaden their knowledge of using the language, this book is a series of tips for how to more effectively use the Java language for commonly encountered scenarios. This is one book I refer back to often.

Bitter Java – Bruce Tate

I’m not sure if this was the first book to introduce the concept of the ‘Anti-Pattern’, but this book is a great collection of war stories and lessons to be learnt. This book collects together commonly made bad design decisions and inappropriate uses of Java technology, and then makes suggestions for how to more effectivly use Java to solve the problem. Again – why learn from your own mistakes by trial and error when you can learn from others who have already made the mistakes?

Debugging the Development Process – Steve Maguire

This is an older book (published 1994) and the author uses examples from his experiences working on projects at Microsoft, but still, there are some good lessons to be learnt from this book that are still applicable to any software development project. This book is an easy read and makes several key points that are valuable to both developers and team leads to become more effective and focused at achieving goals and delivering quality products.

Hibernate in Action – Gavin King and Christian Bauer

This is the bible of all things Hibernate. If you are looking to implement a persistence solution other than writing your own JDBC or using Entity Beans then Hibernate is a must. If you are considered Entity Beans or JDBC then you should be considering Hibernate instead. If you’re already using Hibernate then this is still a good book for explaining concepts and features that may be harder to grasp from just the online docs.

Hearding Cats – A Primer for Programmers who Lead Programmers – Rainwater

This is a useful read for developers finding their career path moving in the direction of team lead type roles. Not all technically minded people make good managers, just as good people-type managers do not make good technical managers. The think the key takeway from this book is to recognize the skills and strengths of your team and use those to more effectively acheive your teams goals.

I also have a must read list of books that I haven’t got to yet – some of these are already on my bookshelf but I just haven’t had time to read yet:

  • Code Complete – Steve McConnell
  • Professional Software Development – Steve McConnell
  • Extreme Programming Explained – Kent Beck
  • Expert One-on-One J2EE Development without EJB – Rod Johnson
  • Joel on Software – a collection of articles from his website joelonsoftware.com. I’ve read some his articles online on his general thoughts and experiences from being involved in software development – his website is a good read so this book should be worthwhile.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.