JTN003 - Recommended Reading: Software Development

Introduction

This list represents John Brewer's recommended reading for people in the field of software development. It focuses primarily on books that are platform-neutral. Other reading lists for specific platforms and technologies will follow.

Software Engineering

The Mythical Man-Month by Fred Brooks. The classic book on software engineering.  You have no business developing software if you haven't read this. The "Silver Anniversary Edition" also includes the famous "No Silver Bullet" paper. ISBN:0201835959 (order from Amazon.com)

Controlling Software Projects by Tom Demarco. The first book about project estimation that actually made sense to me. It asks the question "Just how lousy an estimator are you?" Once you know that, you can start improving your estimates. ISBN:0131717111 (order from Amazon.com)

The Deadline by Tom DeMarco. "A novel about project management." Webster Tompkins, a laid-off AT&T; manager, is kidnapped to a former eastern-block country by Bill Gates, and given the mission to clone all existing desktop software, so that Gates can take the country public. The novel is a roman a clef, where Tomkins gets advice from thinly disguised versions of every major computer consultant (for example, Jerry Weinberg is "Harry Winnipeg"). An excellent, and fun, survey of current thinking about software engineering. ISBN:0932633390 (order from Amazon.com)

Extreme Programming Explained by Kent Beck. The definitive book on Extreme Programming (XP). Whether you believe in XP or not, you owe it to yourself to read this book. Reads like a manifesto, which some people find off-putting. But everything you need to know about XP is in this book, if you look for it. ISBN:0201616416 (order from Amazon.com)

Agile Software Development by Alistair Cockburn. Alistair has written the definitive book about software engineering in the early 21st century. Focuses on increasing communication, and playing to humans' strengths, as opposed to their weaknesses. ISBN:0201699699 (order from Amazon.com)

Object-Oriented Programming

UML Distilled by Martin Fowler. Don't let the title fool you -- in addition to providing a good working knowledge of UML, this book is an excellent all-around introduction to object-oriented software development including lifecycle, use cases, and CRC cards. ISBN:020165783X (order from Amazon.com)

Designing Object-Oriented Software by Rebecca Wirfs-Brock, Brian Wilkerson, and Lauren Wiener. An excellent introduction to object-oriented design, taking a responsibility-driven design perspective. ISBN:0136298257 (order from Amazon.com)

Design Patterns by Gamma, Helm, Johnson and Vlissides (the "Gang of Four). Probably the most essential book for anyone who aspires to good object-oriented deisgn. Not an easy read. The best way to read this book is in a reading group, covering one or two patterns a week. See Joshua Kerievsky's excellent "Learning Guide to Design Patterns" http://www.industriallogic.com/papers/learning.html for a suggested path through the book. ISBN:0201633612 (order from Amazon.com)

Refactoring: Improving the Design of Existing Code by Martin Fowler. If Design Patterns is about O-O design in the large, Refactoring is about O-O design in the small. It describes how by making small, local changes to code, you can end up with a well-designed, but not overdesigned, system. ISBN:0201485672 (order from Amazon.com)

Smalltalk Best Practice Patterns by Kent Beck. Don't let the name fool you. The basic ideas here are applicable in any object-oriented programming language. If Smalltalk code is Greek to you, see Jim Sawyers article "How to Read Smalltalk". ISBN:013476904X (order from Amazon.com)

The Craft of Programming

Elements of Programming Style by Brian W. Kernighan and P. J. Plaugher. Modelled on Strunk and White's Elements of Style, this book tried to impart an understanding of some of the basic issues of programming, as well as how to write clear code. My favorite quote, from their analysis of an electric power billing example from a textbook: "One hopes the increased efficiency of the program will help to compensate for giving everyone a 10% discount." ISBN:0070342075 (order from Amazon.com)

The Pragmatic Programmer by Andrew Hunt and David Thomas. An excellent summary of some lessons you learn over time as a software developer. This is the book that made me put down my IDE, and try command line interfaces. ISBN:020161622X (order from Amazon.com)

Human Aspects of Programming

Peopleware by Tom DeMarco and Timothy Lister. Covers the human side of software development. A classic. ISBN:0932633439 (order from Amazon.com)

Becoming a Technical Leader by Gerald M. Weinberg. A good introduction to Weinberg's work on the human side of programming. Note that leaders aren't just people in positions of power. A tech lead is also a leader. ISBN:0932633021 (order from Amazon.com)

User Interface

The Inmates are Running the Asylum by Alan Cooper. Cooper's central thesis is that programmers are precisely the wrong people to do interaction design, because programmers prefer complexity to be exposed, while most normal people prefer it to be hidden. Aside from the diatribes, it also includes the best discussion of persona-driven interaction design that I've seen to date. ISBN:0672316498 (order from Amazon.com)

The Humane Interface by Jef Raskin. An excellent counterpoint to Cooper's book. Raskin focuses on the details of what makes good UI design. I found the section on the GOMS (Goals, Objects, Methods, Selections) model to be especially fascinating. GOMS is a mathematical model that can predict how long a UI element will take to navigate through. ISBN:0201379376 (order from Amazon.com)

The Visual Display of Quantitative InformationEnvisioning Information, and Visual Explanations by Edward Tufte. Tufte's books describe visual information design, focusing more on paper than on screen design. All 3 volumes are classics. The best way to get started is to attend Tufte's one-day course on presenting data and information, which includes all 3 books in the price. You can check his website https://www.edwardtufte.com/tufte/courses for the next course date near you. ISBN:0961392142 (order from Amazon.com) ISBN:0961392118 (order from Amazon.com) ISBN:0961392126 (order from Amazon.com)