Here is my list of recommend books to read for Software Engineers. Creating this list was one of my main goals with this website and I hope you find it helpful. I recommend reading all of these books but the truly exceptional books I’ve marked with a blue star: ![]()
Design | Problem Solving | People, Teams & Projects | Development Methodologies | Programming | Testing | Visualisation | C++ | Miscellaneous
The Design of Everyday Things
This book is regarded as a classic in the field of design but it should also be regarded as such in Software Engineering as usability is one of the key features that distinguishes truly great software from the rest of the market. This book discusses designing objects to be truly intuitive to use, which does not just happen during production (at least not very often). Despite being written in the 1980’s this book is as applicable today as the day it was written, especially to software interface and interaction design which is often so poorly thought out (if indeed it was ever thought about in some products).
Design Patterns
If you practice object oriented design or programming you should own this book, as it is a classic in its field. This text can be best described as a catalog of generic designs (called patterns) that can be applied to create software systems, making this an excellent text both for the beginner and experienced object oriented practitioner alike. Using these patterns saves valuable time and effort which would otherwise be used to reinvent these patterns and also provides a standard vocabulary of terms for object oriented practitioners.
Anti-Patterns
This book is not quite the classic counterpart to ‘Design Patterns’ but it does address useful topics approached from an interesting angle: patterns for failure. Topics range in scale from code level issues to corporate level anti-patterns. This book is a useful and often humorous read as it is hard not to recognise many of the described patterns from personal experience, although be warned that this can be depressing! Thankfully some advice is supplied along with each anti pattern about how to effect change for the better.
Don’t Make Me Think!
This amusingly named book’s main focus is website usability and, as the title suggests, sparing the end user from having to think about how to interpret, navigate and use your website. This book was designed by the author to be easy to read in a short space of time while supplying valuable ideas and tips on website usability. It would be a mistake to think of this book as only being applicable to web developers, the concepts discussed in this book are applicable to any software presenting complex data and requiring the user to understand and interact with it.
The Inmates are Running the Asylum
Alan Cooper describes his experiences consulting and working with major players in the software industry to enhance their design process and software usability. He describes such techniques as creating multiple end user personas and usage scenarios to help tune the interface and interaction design. He also discusses the importance of having designers on development teams and allowing them to have the power and responsibility of directing and designing the user interface and interaction experience. This small book is easy to read and provides lots of food for thought for improving software usability.
Return to top of Page
Conceptual Block Busting
I don’t remember who first recommended I read this book but I’m glad I did. Do not let the age (first published 1974) or lack of focus on Software Engineering put you off this text, this is the book you want if you are in the business of generating new ideas or concepts. This book covers the main blocking factors that prevent or stifle our creativity and how we go about thinking about and solving complex problems. The author describes techniques for the personal, team and corporate level for breaking through conceptual blocks and embracing alternative forms of problem solving.
Thinking Mathematically
This text is actually about solving mathematical problems in a structured manner but as mathematics and computing are so interlinked it makes a great problem solving guide for software engineers. Indeed the techniques described in this book can easily be applied to solving both programming and design problems in a structured manner. The author introduces the idea of specialising our problem solving for a particular instance of a problem and solving that problem, to then generalise the solution to fit that problem’s related family of problems. This book is great for helping you think about how you approach problem solving.
Return to top of Page
The Mythical Man Month
One of the few truly classic texts on Software Engineering, few texts in computing have yet to have 20th anniversary editions or offered the author a chance to revisit and refine their arguments decades later. Brooks (the author) details the insights he has gained through working on large scale software projects like the IBM System 360 computer and its operating systems. Of particular interest is the chapter on ‘The Second System Effect’ and the essay added in the 20th anniversary edition ‘No Silver Bullet’. This book is especially useful for its discussion on the problems faced by large teams of developers on large projects.
PeopleWare
This is also a classic text and is as ever relevant today as it was when it was written over twenty years ago, which in itself is a marvel for a computing text! The authors DeMarco and Lister share their experience in managing and consulting for many large software development efforts around the world. They explain that the major problems in Software Engineering are human issues not technical issues, a point that is often ignored even today when we try and solve social (human) issues with technical solutions. This should be a compulsory text for all new programming managers and lead programmers.
Managing Humans
This is perhaps one of the most readable and humorous books on managing that special breed of homo sapien: software engineers. The author Michael Lopp draws on his years of experience to describe in his humorous style the different types of software engineers he has encountered over the years and how to manage them; How to deal with meetings effectively by identifying the key players from the rest; Your first ninety days at a new company; Phone screening prospective new hires and more. I would recommend this book to anyone who suddenly finds themselves responsible for more than just themselves at work.
Emotional Intelligence
In this classic book, Daniel Goleman discusses his concept of ‘Emotional Intelligence’ a set of skills that he believes can be a bigger indicator for success in relationships than IQ alone. He also covers a wide range of research to support his theory, as well as giving examples of current efforts in education to teach this important skill set. I find this book particularly interesting given the high incidences of high IQ and low social skills found amongst programmers especially. It is an easily accessible book, readable by non-technical readers and provides plenty of ideas for ways to increase your emotional intelligence.
Return to top of Page
Agile Software Development
Lightweight agile software development methodologies have become increasingly common as the problems and failures of more heavy weight methodologies become apparent for most common types of rapid software development. In this thought provoking book Alistair Cockburn explores and reviews the advantages and disadvantages of using lightweight methodologies as methods for dealing with development environments which feature high levels of change, uncertainty and ever shrinking schedules.
Agile Software Development with Scrum
I believe this is the original text on the agile methodology known as ‘Scrum’, and as such it provides more than just a valuable description of the Scrum development model. It provides the thoughts and opinions of the creators of this lightweight methodology, as well as the benefits to using Scrum, an explanation of why Scrum works and advanced Scrum techniques. All this in a deceptively small and easy to read form factor makes this a very easy to read book on a development methodology that has been exploding in popularity recently. I’d highly recommend this book and approach to all levels of software engineers.
Joel on Software
Joel Spolsky is a well known online for his active blogging on software engineering, his depth of knowledge and his easily read humorous style. This book is a collection of his essays roughly grouped in to about three main areas: programming, managing developers and ‘other’. There are many gems in this compact book too many to try and list in the space I have here unfortunately. Having each chapter as a self contained essay makes it an easy book to read in many short brief bursts like when on the train or bus to work or while waiting on your code to build.
Code Complete
This book is widely regarded as a modern classic for Software Engineering, it can best be described by its sub title: ‘A practical handbook of software construction’. Do not be put off by the tome like proportions of this book, it is one of the rare software engineering tomes that is worth its weight in gold. I would highly recommend that all Software Engineers who have not read this book read it at least once in their careers and it is an easy book to read and it would be hard to see where it could be trimmed down without losing any valuable content.
Refactoring
If you have ever needed to rework (refactor) a piece of existing software source code then you will appreciate this book and the concepts and techniques it describes. This book is an essential read for all object oriented developers and designers who need to upgrade or maintain existing source code. The book contains clear examples complete with UML diagrams, before and after code samples and a very handy quick reference card listing the various refactoring ’smells’ and the associated corrective action.
The Pragmatic Programmer
This is a book that I wish I saw on peoples bookshelf’s more often. The books subtitle ‘From journeyman to master’ really does summarise the aim of this book which is to help develop and improve the day to day skills of software engineers and to some extents their managers. The book is packed with advice in the form of mini essays or chapters each one focusing on a particular area of improvement, making this another book that is easy to read in short bursts as well as making its advice easier to apply.
Return to top of Page
Test Driven Development
If you are only going to own one book on testing or unit testing then this is a good one to have, it covers the theory and practice of Test Driven Development complete with detailed examples and even testing patterns and is written in Kent Beck’s easy to read style. Even if you are unable to use Test Driven Development the ideas and techniques presented in this book are worth reading about if you are at all interested in increasing the quality and robustness of your software via automated testing.
The Back of the Napkin
This book could be in both the Visualisation and Problem Solving categories, I’ve chosen to put it under Visualisation to attempt to emphasise the visual aspect of this book. If you like to doodle ideas down constantly or even if you don’t think you can draw this little book is an excellent introduction to the world of presenting ideas and visual problem solving. I intend to buy a second copy next chance I get, to have a copy at home and at work.
Computer Graphics: Mathematical First Steps
If you are going to learn about programming computer graphics it is best to start with the core mathematical concepts and that is exactly what this book teaches and that is why it never leaves my desk. There are a legion of books teaching about the latest graphics APIs, hardware and rendering techniques but there are very few books that focus on and teach the fundamental math skills required for graphics programming as well as this book. Which makes this book worth reading for all programmers who are interested in computer graphics.
UML Distilled
The Unified Modeling Language (UML) has become one of the standard general purpose modeling languages used by software engineers and designers. There are many books on UML out there but so far this small book has been the best I have encountered for covering the key concepts and diagram types in an easy to read, digest and compact format. All the key UML diagram types are covered as well as the basics of UML analysis and design without having to resort to wading through any of the large tomes on UML.
The C++ Programming Language
Stroustrup’s book on C++, the language that he created, is as you would expect one of the most detailed texts on the C++ language that is available. This book covers a lot of Stroustrup’s personal programming philosophies and his intent for most language features. It also supplies retrospective discussion on how the language has changed over the decades and how international standardisation has changed the C++ language. This book will be of particular interest to intermediate and advanced C++ programmers but perhaps supplies too much detail for the beginner.
C++ FAQs
The idea of a printed Frequently Asked Question (FAQ) in book form may seem silly at first but when you realise the sheer quality and coverage of C++ questions this book addresses you will come to value it greatly. It is perhaps my most used C++ book after my compact pocket reference. I would highly recommend this book to new and experienced C++ programmers, it has a lot of depth and due to its organisation into chapters of questions grouped by topic it is very easy to read in short bursts e.g, while waiting on your C++ code to build.
C++ Coding Standards
This is the only book that focuses on coding standards for C++ that I am aware of and the 101 rules documented in this book are both easy to read and thought provoking. The title of this book would make you think it’s scope is aimed at programming leads or managers but I would recommend C++ programmers of all levels of experience read this book. As its content is applicable to enhancing your personal coding style, even if your workplace’s existing coding standard is not as comprehensive as the rules in this book.
Effective C++
In this book Scott Meyers outlines 55 ways to improve your usage of C++. Ranging from class designs and implementations to memory management. This text covers a lot of important ground in a very readable manner and is a very useful text to have for beginners and experienced C++ developers. Also worth mentioning are the other books on C++ by Scott Meyers: ‘More Effective C++’ and ‘Effective STL’ which are also worth reading to further improve your application of C++.
Return to top of Page
Elements of Style
If you are like me and never paid a lot of attention during English lessons at school but suddenly find yourself wanting for an audience to write now in a blog, paper or even a book, I would heartily recommend this book. First off don’t think this is a tome, its only 90 pages in a 4.5″ x 7″ small form factor, it is very easy to read and makes an excellent reference for those beginning to write and those that are already experienced. First published in 1959 this book has seen many revisions but remains a classic in its field and an indispensable pocket reference for writers, I wish I’d heard of it at school.
Brain Rules
If you are at all interested in how to improve the performance of your greatest asset: your mind then this book is an excellent place to start. Written by an eminent brain scientist, but don’t let that put you off, his written style is very easy to read and quite humorous. This book covers twelve key rules to helping improve your brains performance at home, work and school. Which I think is of interest to all professionals with a desire to improve themselves and their performance. This book also comes with a bonus DVD featuring some extra content presented in the form of mini documentaries.















