A list for software engineers, pt 2 June 30, 2011

In a previous post I presented a list of influential software engineering papers that greatly defined and shaped the field.  Additionally the papers provide a great introductory platform for building and sharpening personal software engineering skills.  I’m continuing in the second part of the post by listing books and videos that are great references to have, will provide you with concrete tools and techniques to better engineer solutions, and will open up the field of software engineering.

Must-read list of software engineering books

The Mythical Man-Month – Frederick Brooks
Software engineering is an objective practice, entangled with people and process.  This book offers great advice on how to approach managing software projects and the practice of software engineering.

How to Solve It: A New Aspect of Mathematical Method – George Polya
“Solving problems is a practical art.”  This book does a great job of detailing the process and tools to decompose problems and build up ideal solutions.  It’s targeted at mathematics, but the subject matter is very much universal.

Information Technology Project Management: Providing Measurable Organizational Value – Jack T. Marchewka
This entire book is practical in its material, none of it is theoretical.  It covers metrics, risk analysis, estimation techniques, and managing cycles.  I always reach for this book when spinning up new projects.

Software Architecture: Foundations, Theory, and Practice РTaylor, Medvidović, Dashofy
I have recommended this book in the footnotes of previous posts.  This book walks through architecture styles, composition, appropriate ways to approach designing, validation techniques, and more.  The composition matrix in the beginning chapters of the book is worth the purchase alone.  To boot, Nenad Medvidoviƒá is a professor with Barry Boehm.1

The Architecture of Open Source Applications – Edited by Amy Brown and Greg Wilson
This book is FREE to read online.  It carefully walks through the architectures of some of the most used and successful open source projects, the tradeoffs made, and the dirty hacks that hold everything together.  Working through this book will allow any engineer to apply the lessons learned when faced with similar situations or constraints.

Interaction Design – Jenny Preece, Yvonne Rogers, Helen Sharp
A great book about user-centered interaction and experience design.  This book provides the tools to design, prototype, validate, and evolve interactions and interfaces for your systems.

Hacker’s Delight – Henry S. Warren
Hacker’s Delight is a collection of efficient, space-saving, performance hacks for common programming tasks and system operations.  I haven’t put a lot of the material of this book to use, but it’s useful to have and interesting to paw through.  This book has little to do with the practice of software engineering, but still should sit proudly on your shelf.

Seven languages in seven weeks – Bruce Tate
Learning and applying multiple paradigms allows you to find best tool for the job.  Opening your engineering-vision to what is possible will enable you to engineer more elegant systems.

Must-watch list of software engineering videos

Are we there yet? – Rich Hickey
Has Object-Oriented programming delivered on the software engineering principles it promised?  Are we engineering better systems because of OOP, or have we missed the mark?

Hammock driven development – Rich Hickey
There is value often overlooked in working through a problem domain, properly decomposing it, and validating your proposed solutions early.  This talk is about how to solve problems better and the steps to do it. 2

How to design a good API and why it matters – Joshua Bloch
This Google Tech Talk video talks about designing, validating, and building out APIs, but the lessons here are universal to all interfaces and public-facing solutions.

Honorable mentions

Erich Gamma – I didn’t select any of his works, but some of his guiding principles are the most important in software engineering, namely: “Program to an interface, not an implementation” and “Favor composition over inheritance.”

Paul Graham – Aside from authoring great books about Common Lisp, Paul Graham has elegantly described and carefully organized works and efforts around Hacker Culture.  If you are a professional software engineer, you have to own Hackers and Painters.

Missing from the lists

Validation and verification is an essential part of the software development life cycle, but I didn’t list any books covering the topic.  The simple fact is that most software testing books are terrible.  If I had to recommend one, I’d probably offer Software Testing by Ron Patton.

I’m also not wild about any book I’ve read on requirements elicitation and specification.  The only one I could really recommend is Managing Software Requirements: A Use Case Approach by Dean Leffingwell and Don Widrig.

People’s Choice

Many people sing Russ Olsen’s praises, especially his book Design Patterns in Ruby.3 If you work in any OO language, this book will open your mind in how to best apply design patterns.

  1. Boehm was the author of some of the most influential papers in software engineering []
  2. There is a useful cheat sheet graphic.  I will temporarily make it my desktop image when I begin working on a new problem []
  3. All of Russ Olsen’s books on Amazon have 4 or 5 start ratings []
  • Michael

    You’re missing a few -
    Peopleware, by Tom DeMarco and Timothy Lister.
    Code Complete, by Steve McConnell.
    Wicked Problems, Righteous Solutions by Peter DeGrace and Leslie Hulet Stahl.

    • ohpauleez

      Yes to all of these!