 |
Code Complete: A Practical Handbook of Software
Construction. Redmond, Wa.: Microsoft Press, 880 pages,
1993. Retail price: $35. ISBN: 1-55615-484-4.
Buy
Code Complete from Amazon.com. |
33.1 The Library of a Software Professional
Because this book describes hundreds of other books and articles that contain
information on software development, it's hard to know what to read first.
A software-development library is made up of several kinds of information. A core of
programming books explains fundamental concepts of effective programming. Ancillary
software-context books explain the larger technical, management, and intellectual context
within which programming occurs. And detailed references on the languages, operating
systems, environments, and hardware contain information that's useful for specific
projects.
Books in the last category generally have a life span of about one project; they're
more temporary and aren't discussed here. Of the other kinds of books, it's useful to have
a core set that discusses each of the major software-development activities in depth-books
on analysis, design, construction, management, and testing.
Top-Ten List
The following books make up a solid foundation for a software professional's library.
1. The Psychology of Computer Programming. Gerald Weinberg's The
Psychology of Computer Programming (1971) is packed with fascinating anecdotes about
programming. It's far-ranging because it was written at a time when anything related to
software was considered to be programming. The advice in the original review of the book
in the ACM Computing Reviews is as true today as when the review was written:
Every manager of programmers should have his own copy. He should read it, take it to
heart, act on the precepts, and leave the copy on his desk to be stolen by his
programmers. He should continue replacing the stolen copies until equilibrium is
established. (Weiss 1972)
If you can't find The Psychology of Computer Programming, look for The
Mythical Man-Month (Brooks 1975) or PeopleWare (DeMarco and Lister 1987). They
both drive home the theme that programming is first and foremost something done by people
and only secondarily something that happens to involve computers.
2. Programming Pearls. Jon Bentley's Programming Pearls (1986) is
the first of a pair of books with "Programming Pearls" in the title. It's a
vigorous discussion of programming that articulates the reasons that some of us find
programming so interesting. The fact that the information isn't comprehensive or rigidly
organized doesn't prevent it from conveying powerful insights that you'll read in a few
minutes and use for many years.
Another excellent book in the same spirit by the same author is Writing Efficient
Programs (Bentley 1982). It's a nearly exhaustive treatment of code tuning with loads
of examples. Although Bentley doesn't present many more techniques than Chapters 28 and 29
of this book, he's a master of interesting examples and supports his code-tuning
techniques with many memorable anecdotes.
3. Classics in Software Engineering. Ed Yourdon's Classics in Software
Engineering (1979) is a collection of the classic, seminal papers in software
engineering. Every programmer should read Dijkstra's papers, "Go To Statement
Considered Harmful" and "The Humble Programmer" along with several others.
They contain in a nutshell the accumulated wisdom of the programming community as of about
1975.
4. Principles of Software Engineering Management. Even if you plan to
avoid management for your entire career, it's a good idea to learn something about it for
two reasons. It gives you insight into what your manager does (or what your manager should
do), and it helps you to self-manage your own projects. Tom Gilb's Principles of
Software Engineering Management (1988) is a good place to start. Gilb is a good
writer, a metrics hot shot, and a master of quantitative approaches to management. He is
keenly aware of leading-edge approaches. After the first couple of chapters, you can pick
and choose your way through his book.
Tom DeMarco's Controlling Software Projects (1982) is a good alternative to
Gilb's book. DeMarco also takes a quantitative approach, and both he and Gilb are somewhat
uncommon in that they both emphasize controlling projects rather than predicting what they
will do.
5. Structured Design: Fundamentals of a Discipline of Computer Program and
Systems Design. The first book on structured design was Structured Design:
Fundamentals of a Discipline of Computer Program and Systems Design (Yourdon and
Constantine 1979). It was cowritten by Larry Constantine, who developed most of the key
ideas in the structured-design approach. Other books have provided easier explanations,
but this book is readable enough, and you can't beat hearing about a body of ideas from
the person who came up with them.
A good companion to Structured Design is Object Oriented Design with
Applications (Booch 1991). Even though object-oriented design doesn't yet have the
track record that structured design has, it seems to be truly useful in composing systems
at a higher level of abstraction than structured design allows. Booch is a pioneer in Ada
and object-oriented methods, and his experience shows throughout this book.
6. The Art of Software Testing. Every programmer should have a book on
testing. This isn't to say that testing is the most valuable quality-assurance topic
overall--just that testing is something a programmer should understand. Glenford Myers' The
Art of Software Testing (1979) was the first book devoted to the topic and is still
one of the best. If you can't find it, a good alternative is Bill Hetzel's Complete
Guide to Software Testing (1988).
In addition to the specific books in the first part of this top-ten list, you should
have books that cover these general topics.
7. A book on requirements analysis. You have a choice among several first-rate
books on requirements analysis. The first excellent book on the topic was Tom DeMarco's Structured
Analysis and Systems Specification: Tools and Techniques. A more recent treatment is
Ed Yourdon's Modern Structured Analysis (Yourdon 1989a). For real-time programmers,
Strategies for Real-Time System Specification (Hatley and Pirbhai 1988) is a good
choice. Once you've read the standard analysis books, check out Gerald Weinberg's Rethinking
Systems Analysis and Design for its entertaining departures from the conventional
wisdom.
8. A book on quantitative project-planning and productivity. After years of
wondering why no one was coming up with quantitative data about software-development
methods, I read a paper by Barry Boehm that made it unmistakably clear that someone was
coming up with such data. If I could have only one software-engineering reference book, it
would be Boehm's Software Engineering Economics (1981). Ostensibly about how to do
estimates for software projects-work months, number of programmers, calendar time,
manpower loading, and so on-- it describes just about every important factor that goes
into making software productive or unproductive. Boehm has a passion for quantitative
data, and he has summarized most of it in this volume. Don't be put off by its size or the
enormous number of charts and tables. You don't need to read most of them, but
they'll be there whenever you're curious. Try starting with Section 33.6, "Personnel
Attributes," which gives a pointedly human overview of the reasons that
software-project estimation has so much variation and unpredictability. For a short
introduction to the same information, see Boehm's paper, "Software Engineering
Economics" (1984).
A good companion or alternative to Boehm's book is Applied Software Measurement (Jones
1991). Capers Jones is just as dedicated to the quest for quantitative data as Boehm, and
you could view his book as an updated subset of the information in Boehm's. Chapter 3 on
United States averages for software productivity and quality is especially fascinating.
Jones's earlier book, Programming Productivity (1986) is just as interesting but
has been superseded to some extent by the publication of his more recent book.
9. A book on data structures and algorithms. Every programmer should have a good
book on data structures and algorithms. It's better to pull clever algorithms out of a
book than to invent them yourself. The advantages are (1) that you know the algorithm
works and (2) that it probably works better than any you'd have time to come up with.
Robert Sedgewick's Algorithms (1988) is one good choice. Others are Data
Structures (Reingold and Hansen 1983) and the three volumes of Donald Knuth's The
Art of Computer Programming (1973a, 1973b, 1981).
10. An overview of the software-development process. It's useful to know what a
software-development cycle looks like from a larger perspective. If you've been all the
way through a few smaller projects, you might have an intuitive sense of it. If you've
worked on smaller parts of large projects, you might have no sense of it at all.
One excellent overview is Wicked Problems, Righteous Solutions (DeGrace and
Stahl 1990), a catalog of software lifecycles. The authors cover this relatively small
topic thoroughly and include lots of tables and diagrams. In exposing you to several
different project lifecycles, the book gives you a good perspective on planning and
analyzing your own projects or other people's.
A second choice, covering different ground, is Watts Humphrey's Managing the
Software Process (1989). Humphrey describes software development as a process and
outlines the activities in each of its parts. Unlike DeGrace and Stahl, Humphrey offers
firm opinions about which processes are better than others, but you'll get the big picture
from either book.
For an even broader view, not of software processes but about how software processes
come into being, take a look at Fred Brooks's "No Silver Bullets-Essence and
Accidents of Software Engineering" (1987). It's a witty and informative discussion of
what's needed to improve software development now that all the really big improvements
have already been made.
This material is Copyright © 1993 by Steven C. McConnell. All
Rights Reserved.
|