Friday, December 01, 2006

Notable Books

There are so many books about software development out there. Here is my list of essentials:
  • Code Complete: This book is a classic, and the new edition covers a lot of new material. I would suggest that thoroughly going over this book would be an excellent preparation for professional software development, and would put one ahead of most of the people already out there working in the industry. Steve Mcconnell has that great quality of explaining things clearly without needless embellishment.
  • Agile Software Development with SCRUM: Scrum provides a very simple and lightweight set of project management artifacts, yet these few simple lists and charts produce a powerful form of feedback. Scrum also enlists all stakeholders in a software project to be honest and courageous, and to keep everything out in the open. It is my preferred method of managing software development.
  • Fundamentals of Object-Oriented Design in UML: For anyone who wants to understand object-oriented programming more deeply, in terms of the true underlying principles, I think this book is a great choice. It make you think about design patterns in a more profound way. The use of the word "fundamentals" in the title has more to do with the notion of depth and first principles; it's not necessarily a book for novices. I think this is one of the most underrated books in software development. There's an intro to UML too, to me, that's hardly the main point of this terrific book.
  • Rapid Development: Another Steve Mcconnell book. What he did for programming in Code Complete, here he extends to management of software projects. This book is very well researched and comprehensive.
  • XP Explained: Kent Beck expounds his XP philosophy. Test-driven development, or TDD, fundamentally changed my approach to programming. I don't think you have to practice XP to have a successful software project, but I do believe that the general attitude of XP when it is applied correctly is the right one.
  • Refactoring: While this book is rather wordy for its content, it's worth reading. The most important idea in this book is that you don't have to produce a glorious design on paper before writing any code but instead you can incrementally shape your code as you go on. However, it is also important to realize that thinking hard about one's design is a very important part of the test-code-refactor cycle: It's not just about moving code around.
  • Design Patterns: In my opinion this is a somewhat overrated book. It's really an exploration of techniques that polymorphism (overriding functions via inheritance) makes possible. In that respect it's certainly worth reading, but it has spawned a cult of object/pattern nonsense who's nefarious influence continues to make itself felt to this day.