My Bookshelf Part II

This is the second part of the article “My Bookshelf”, with the list of the books that I recommend anyone in the software engineering field to read.

This second part has my preferred books about:

As usual, all book references include links to their official websites, to as well as their ISBN, cover and list of authors.


  1. Books about Programming Languages, Platforms & Frameworks
  2. Books about Software Architecture and Design, and Security
  3. Books about Project Management and Methodologies, and Computing History and Industry Trends

2. Software Architecture and Design

In this specific area, the books from Addison Wesley are by far the reference. But O’Reilly is catching up…

Object Oriented Analysis and Design with Applications, 2nd Edition

by Grady Booch (ISBN 0805353402)

This book is simply a mind-opening one. It is precisely this book who paved my way to my object-oriented skills. Whatever the programming language you work with (at the time it was VBScript, Transact-SQL and JavaScript) you will never develop software the same way after you’ve been through this book. It features a complete introduction to systems theory, giving full background on the object-oriented paradigm, its outcome and possibilities. The samples are in C++ (which I had to learn to fully get the ideas), but other than that, this book is a must have. It seems that there will be soon a third updated version, with samples in Java… so watch out for it.

By the way, the author is one of the creators of UML.

Design Patterns (“The GoF Book”)

by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides (ISBN 0201633612)

Well, if there is just one book that you must read, is this one. You just cannot avoid it. Commonly known as the “GoF” (“Gang of Four”) book, it is widely referenced by nearly all the other books, and it paved the basis for the software engineering way of this decade. The book features nearly 20 different common software design patterns, from the most obvious (Singleton, Adapter) to the most complex ones (Flyweight, Strategy, Observer), categorized in three categories: Creational, Structural and Behavioral patterns. If Object-Oriented Programming changed the way you develop software, believe me: Design Patterns will revolutionize the way you do it.

Head First Design Patterns

by Elisabeth Freeman, Eric Freeman, Bert Bates and Kathy Sierra (ISBN 0596007124)

I found this book to be not only a fun and easy read, but also a welcome complement to the GoF book. The most common patterns (not all of them though) are described in great detail, with a complete explanation of the situations in which they make sense, highlighting the possible performance implications and common misconceptions. The samples are in Java and UML, and some paragraphs are frankly hilarious. Don’t miss this one.

The Unified Modeling Language User Guide

by Grady Booch, James Rumbaugh and Ivar Jacobson (ISBN 0201571684)

UML is here to stay; you find UML diagrams in every book, press article or software specification document. It has become the “de facto” lingua franca of the software engineering industry (well, all but Microsoft, even if they implicitly use it without aknowledging it, as usual). This book (also known as the “Three Amigos” book) is the complete reference to UML, with descriptions and examples of all the different diagram types, and their elements. A must have for anyone working in the industry.

MDA Explained - The Model Driven Architecture: Practice and Promise

by Anneke Kleppe, Jos Warmer, and Wim Bast (ISBN 032119442X)

You cannot learn UML without seeing an immediate correlation between UML and “pure” source code. While many different attempts have been made to automate software development using visual tools, none has had the level of standardization and industry support of MDA. The OMG has established MDA as a standard specification, which vendors as well as the open-source community use now to create new tools, that are slowly getting more and more used in the industry. This book is a small but good introduction to the subject, highly recommended to software developers and architects.

Aspect-Oriented Software Development with Use Cases

by Ivar Jacobson and Pan-Wei Ng (ISBN 0321268881)

Aspect-Oriented Sofware Development (AOSD), also known as Aspect Oriented Programming (AOP) seems to be a paradigm that is really gaining momentum, and that could ultimately redefine software engineering in the next 10 years. This book, co-written by another of the creators of UML, gives not only a complete introduction to the subject of AOSD, but provides also a complete methodology for finding, designing and documenting aspects in UML. It is a complex book, I had to read it twice to really get it, it’s extremely comprehensive from all points of view, and can be a tough reading. But not to be missed in any case.

3. Security

Hacking Exposed, Second Edition

by Joel Scambray, Stuart McClure and George Kurtz (ISBN 0072127481)

Now this book is at its fifth edition! I got this book following the advice of a computer security teacher while in university, and it was an extremely useful read. I could not stop myself and started to download utilities referenced in this book… using them I found lots of security holes in the servers of the company I was working on… Also in the book you get the explanation of firewall or DNS problems and tweaks, encryption, cryptography, common intrusion techniques, threat levels, believe me, this book has it all. For Unix or Windows, you are sure to find a solution for every single problem you might have. I must say that it made me become aware of how insecure Windows is… actually I became somewhat paranoid :)

Writing Secure Code, Second Edition

by Michael Howard and David LeBlanc (ISBN 0735617228)

Oddly enough, Microsoft issued this book. And it is quite a good one if you develop applications for the Windows platform. However, I wonder whether all of the Microsoft staff read it (or understood it). Microsoft products continue to suffer from important security problems (Windows the first) but all in all this book gives, after a good introduction on the buffer overrun problem, lots of insight on code security, whether in .NET, COM or MFC programming. Definitive read.