Software Engineering Stories

2004-07-08

Software Engineering Reading List

Tom Van Vleck

Compare what you've read to this list. Suggest your favorites.

Software Engineering Web Sites

Tom De Marco
If you ever have a chance to hear Tom speak, take it. He has a deep understanding of the problems of quality and software engineering, and presents his thoughts with clarity and humor.
Jerry Weinberg
Jerry recognizes that people are the source of our problems and our hopes for solutions.
Roger Pressman
Quality resources and interesting articles.
John Pustaver
A comprehensive page of links to quality resources.

Programming

A rational design process: how and why to fake it, David L Parnas and Paul Clements (IEEE TOSE, Feb 1986)
We can't develop our programs perfectly, but we should know what perfection is, and come as close as possible.
Design Patterns, Gamma, Helm, Johnson, Vlissides (Addison Wesley, 0-201-63361-2)
An extremely useful book on a way to discuss the cliches and strategies we use to make our programs work. I worked with Erich Gamma at Taligent. When I was workint at Sun JavaSoft, an informal group of people used to meet at lunchtime once a week, and one person would present a pattern from the Patterns Book, and we would discuss where we'd seen it, and whether the pattern could apply to our project, and other patterns that might apply.
97 Things Every Programmer Should Know, Kevlin Henney (O'Reilly Commons) new
A useful and though provoking compendium of programming lore. At least 68 more "things" have been added: you can contribute too.
Writing Solid Code, Steve Maguire (Microsoft, 1-56615-551-4)
Fine, practical techniques for the C programmer. A good code review checklist. He understands the Three Questions.
Effective C++, Scott Myers
Many of the lessons in this book are about object-oriented programming, not specifically tied to C++.
Programming Pearls, Jon Bentley (Addison Wesley)
Two volumes. Lots of useful lessons in the craft.

Java

Java in a Nutshell, Flanagan (O'Reilly, 0-596-00283-1)
This is the book I learned Java from. Like all O'Reilly volumes, it is comprehensive and a good value. Includes a language overview, class library definitions, and examples.
The Java Programming Langauge, Arnold & Gosling (Addison Wesley, 0-201-70433-1)
A good introduction and a clear explanation of the important features of the language. You needed another thick book from the Sun Java series for the class library reference, another for concurrent programming, and another for tutorial. The whole series was well done, but you spent a lot to buy the whole shelf.
Concurrent programming in Java, Lea (Addison Wesley, 0-201-31009-0)
How to design objects for a multi-threaded environment. Very good book on concurrent programming in general, and how to use the features of Java to do it.

Software Engineering and QA theory

Software State of the Art, DeMarco & Lister (Dorset House, 0-932633-14-5)
This collection of classic papers on software development lives up to its name.
The Mythical Man-Month, Brooks
A great book on software engineering, recently reissued. Fun too.
Handbook of Walkthroughs, Inspections, and Technical Reviews, Weinberg & Freedman
This should set your mind going on ways to improve your code.
Software System Testing & Quality Assurance, Beizer (Van Nostrand-Reinhold, 1-850-32821-8)
There are two books by Beizer, both useful. This one is higher-level.
Software Inspection, an Industry Best Practice, Walker et al
IEEE Press tutorial volume, with all the good inspection papers.

Management

Peopleware, DeMarco & Lister
Make your manager read this! This book describes how to make teams productive.
The Psychology of Computer Programming, Weinberg
Beautiful book, full of useful insights.
Controlling Software Projects, De Marco & Boehm(Yourdon, 0-13-171711-1)
A useful short book, aimed at measurement and management of the process, full of insight and useful anecdotes.
Debugging the development process, Steve Maguire (Microsoft, 1-55615-650-2)
A book for team leaders, full of Microsoft war stories. Thought provoking and fun.

Periodicals to be aware of

You have to read some of these regularly, to keep up on the profession.

Classics

"Crash Recovery in a Distributed Data Storage System", Lampson & Sturgis, Technical report, Computer Science Laboratory, Xerox, Palo Alto Research Center, 1976.
A beautiful piece of writing and logic. Stable storage, layered abstractions.
The UNIX Time-Sharing System, Ritchie & Thompson
One of the best-written papers ever. The elegance of thought and economy of description set a standard we should all aspire to.
Transaction Processing, Gray & Reuter
The classic reference in the field.
Introduction to Database Systems, Date
A classic.
The Art of Computer Programming, Knuth
All volumes. Often, you beat your brains out on a problem and then somebody says, "The answer's in Knuth."

Specific to Your Situation

I am always surprised to meet people who don't even study their own local tools.

24 May 1997, Updated 12 Jan 1998, 08 Jul 2004