-
Up
| | 
Here is an introductory list of references and texts in many of the subtopic areas of
software engineering/software development. This
list might be a good place to start to investigate and
gain mastery of these particular sub-discipline in software engineering.
Note: If you are an experienced software engineer or an expert in your software
field you may find some of these texts not particularly helpful to your
situation or not detailed enough. This list is not designed for the experienced
or expert software engineer. I have found in my consulting practice over the
years that many individuals who come to the computer, information technology,
software development or software engineering fields from other domains (such as
business, management, the humanities, the arts, basic science, engineering, and
medical fields) often lack the basics and breadth of the understanding of the discipline
of software engineering. This observation applies equally to individuals who
have majored in computer science at many major universities in the U.S. and who
have not taken basic classes in the area of software engineering/software
development. This list is supposed to be a starting place to help rectify this
pervasive problem and to help individuals gain the foundations that they will
need to build better software. Even if you are not formally trained in computer
science or software engineering, reading these references and applying the
information in an industrial setting will enable you be more effective as you
build software applications, software products and software systems.
Generally speaking, the books that I have listed here must
contain some useful information or must have a practical bent so that it can be
used by individuals working in the trenches. Some exceptions do exist as
explained below (i.e., the only current book still in print within the
sub-discipline, provides a comprehensive overview of the field even if it
appears to be more academic in tone, or a part of the book contains some really
helpful information such as an important example or a unusually helpful
checklist). In some cases I have listed a book in a topic reference even it
seems somewhat outdated since it supplies information that I feel might be
foundational to the discipline. In some categories more than one book is listed
since the book covers the topic in an unique way or offers a fresh perspective
to an already crowded shelf on that topic. For me personally, the books must be
easy to read, unpretentious and clear. Although the book is listed here, it
doesn't necessarily mean that I agree with all that is written. Finally, I would
recommend that you not purchase every book here but look to libraries, peers, or
colleagues to see if you can borrow the books first. A good rule to follow
before purchasing a book is to get three good independent recommendations from
individuals that you trust in the field.
This list will be updated
periodically as I review, study and read
many new books. Some references
will be updated or even replaced over time. Click on a subtopic to review the references
in each section. This section was last updated July 2004.
Software Engineering
Subdisciplines/Topic References

Are Your Lights On? : How To Figure Out What the Problem
Really Is by Don Gause and Gerald Weinberg, Dorset House, 1990. This
easy to read book is an
excellent tool to help you pinpoint requirements by identifying the correct problem.
This text assists requirements engineers and requirements
analysts in trying to define the correct problem first. It is
simple to read but filled with tremendous insight on how to define the problem. It is an
excellent book to assist in general problem solving, especially those who have intractable
problems at hand. I believe the book helps you think about the problem before trying to
tackle it. I have read this book several times and gain new insights and find new avenues
of application after each reading. I particularly enjoy the informal style and amusing
examples.
Exploring
Requirements : Quality Before Design by Gerald Weinberg and Don
Gause, Dorset House, 1989. Requirements definition is the most important part of a
development project and is often the most unclear and frequently misunderstood. This book
does an excellent job in helping you understand requirements and the ambiguity that arises
during the requirements process. The book is easy to read and provides practical "how
to's" for the developer or analyst. The book describes tools and techniques that can
reduce the negative effects that often occur on software projects. These ideas have been
tested in both large and small organizations. It also provides insight on how people
think, create and operate in the world around themselves. I would recommend that all
software engineers read this book. The book is written in a
style that even some of your more savvy customers can read and understand. This
should help you focus in on the requirements that your customer really wants and
needs.
Complete Systems Analysis
by James and Suzanne Robertson, Dorset House, 1994. This is a two volume set that
takes a user through an introduction to structured systems analysis. The book is helpful
for those trying to learn a structured requirements or systems analysis methodology. One
plus of the book is that no CASE tool is required to do the exercises. The exercises and
suggested answers really help an individual gain mastery of the method and really helps to
reinforce the concepts. I find myself using this book often when I am trying to document a
client's requirements. For those who use this book, it took me about 1 month working only
during the evenings for a few hours to work my way through the exercises and answers. I
found it helpful to use a CASE tool in combination with the readings and exercises to make
the use of the CASE tool and methodology simulate a real business development environment.
Software Requirements : Objects, Functions and States, Revision
by Alan M. Davis, Prentice Hall, 1992. This book surveys the spectrum of different
software requirements methods that is in use today. Davis stresses the features and
contrasts the differences of each method. He also talks about how to write a software
requirements specification (SRS). In addition, the book contains three real world case
studies illustrating the uses of all the described approaches. This book is good place to
start if you are unfamiliar with the field of software requirements engineering. It
provides a comprehensive introduction to requirements engineering. I often refer to the
book when I have to review a less common form or method of documenting software
requirements for a client or customer.
Software Requirements Engineering by Richard
Thayer (editor), Merlin Dorfman (editor), Sidney Bailin (editor), IEEE Computer Society,
Second Edition, 1997. The second edition describes the best practices in requirements
engineering focusing on software, but also including hardware and sometimes people. The
format of this volume contains original papers written by experts in the field, plus
revisions of papers from the first edition. The text covers basic issues and terminology
in the field and describes the five phase process of requirements engineering :
elicitation, analysis, specification, verification, and management. I think of this book
as a reference book for software requirements engineering. As such I do not refer to it as
often as the other books in this category, but I still think it is a valuable software
book.
top
The Mythical Man Month by Frederick J.
Brooks, Addison Wesley, 1995. This software engineering classic should be required reading
for all software managers. The revised and 20th anniversary edition is still applicable
today. The infamous line "adding people to an already
late software projects makes it
latter" came from this author. For anyone who works on
large scale projects, Brooks describes the challenges that occur on large
software projects, namely, that large software projects suffers from different
management problems and conceptual integrity problems than small software
projects. What make this text a classic is that Brook's advice is still
applicable today making his insights and recommendations timeless.
Software Engineering Economics by
Barry Boehm, Prentice Hall, 1981. Although this text is quite old, the concepts that are
presented are still valid today. This is the "reference" text for determining software
costs, and applying the concepts of economics to software engineering. The book focuses on
using quantitative approaches (i.e. COCOMO) to managing software projects. This book
should be required reading for any software manager. The data that is presented is now
outdated, but I understand that Dr. Boehm is working on a new book to replace this one.
A Guide to the
Project Management Body of Knowledge, by Bill Duncan, PMI Standards
Committee,
Project Management Institute, September 1996. This is the official standards document of
the Project Management Institute. It serves as a tool for learning about the generally
accepted knowledge and practices of the professioninformation you need to know to
manage your projects successfully. The knowledge and practices presented in the PMBOK
Guide are proven and can be applied to all types of projects. They are the fundamental
tenets of project management that help everyone who manages projects, works on project
teams, or teaches project management to achieve project success. The extensive glossary in
the PMBOK Guide adds to the development of the profession as well as the development of
the reader's professionalism. I have included this text here because I have seen so many
software managers in my consulting practice unaware of basic software project management
principles. This can serve as a good reference for project management.
I wouldn't recommend this text as an initial introduction to software project
management. See Steve McConnell's text below instead. Like any standard, the
proper application to a specific context and the ability to tailor the
information supplied in this book to your specific project is essential.
Software
Project Survival, by Steve McConnell, Microsoft Press, 1997. I have
included this book as a recommendation for those who are involved in software
project management who may not have had formal training in software project
management or software project engineering. If you are a software developer with
little or no experience in software project management this book is a good place
to start. The book is easy to read, clear, organized in an outline format,
and can be implemented fairly easily on any small or medium sized software
project. The book is short enough that it can be used to implement practical
solutions to a wide variety of software projects. One of the helpful sections of
the book is on Software Risk Management. This alone makes the cost of the book
worthwhile. Steve presents a Sample Top Ten Risks List. The books also supplies
many helpful checklists that can help a new project manager survive in the
chaotic world of project management. The main challenge with Steve's approach is
that it is weighted towards "process." On many of the assignments that I
have consulted, the formal process of software project management rarely
exists. In an Agile environment, formal software project management based on
process can hinder the benefits of the method.
top
Structured Design: Fundamentals of a Discipline of Computer Programs and System Design
by Ed Yourdon and Larry Constantine,
March 1979. Although this book is a bit dated and pricey, it was one
of the first texts on the topic of structured design by the individuals who
contributed to the formation of this new discipline during its publication. The
concepts that are described in this book are still relevant today in the
construction of software applications and programs, no matter what platform or
language is used. I consider this text to be a classic in the field of software
engineering and should be read by all software developers who are constructing
software programs.
top
Code
Complete by Steve McConnell. Microsoft Press, 2nd
edition, 2004. This is the one of best books
that I have seen written for programmers and developers. The
new version continues the trend of being a must read for any serious programmer
or someone who wants to improve their coding skills. It should be
required reading for any new developer or programmer. Many of the concepts apply
to any language and should be implemented by all. For those
who have learned coding in a informal environment, this book can really help you
improve your coding style so that you can build professional software programs.
I have found the book easy to read and quite comprehensive.
top
Testing Computer Software by Cem
Kaner, HQ Nguyen, Jack Falk, John Wiley, 2nd edition, 1999. This is a real world pragmatic
introductory testing book for consumer and business software. I highly recommend this book
especially for new QA/Software Testers. The widespread acceptance of this book is probably
a result of the fact that the book doesn't preach or moralize about software quality and
that it doesn't advocate creating mounds of paper documentation during testing. It also
lists what practical techniques really work during day-to-day testing. It is easy to
understand and incorporate in your organization since it doesn't emphasize the theory of
software testing. A new update is supposed to be in the
works.
top
Practical
Software Maintenance : Best Practices for Managing Your Software Investment
by Thomas M. Pigoski, Wiley, 1996. This is one of the
few software engineering texts devoted to the important, but sometimes
overlooked, field of software maintenance. Some other books exist on this topic
but they are now out of print. For completeness I have included this text in
this reference list so the reader will have at least one reference in this
category. The book covers important topics such as debugging, customizing,
interfacing and integrating software. Design for maintainability, maintenance
metrics, and the process of maintenance is also described. This book is not
focused on actual code maintenance but on the higher level process of software
maintenance in general. If you are ever assigned the task of setting up a
software maintenance or software support group then this book offers practical
information on how to do just that. Other sections of the book are somewhat weak
and only provide a cursory review of the topic area (i.e., object oriented
software).
top
The Psychology of Computer Programming by Gerald
Weinberg, Dorset House, 1998. This book, recently republished is an important work that is
often neglected by industry professionals. As I continue to consult, I find the
information presented of even more importance to me. I highly recommend this book to
anyone who has concerns on the people side of developing software. This book provides
insight into the behaviors of programmers. The book should be required reading for all
software managers.
Peopleware
by Tom Demarco and Tim Lister, Dorset House. 2nd edition, 1999. This is the updated
version of their 1987 classic on the management of software development. The new edition
has a new Preface and eight new chapters. This book is targeted at software development
team leaders and managers and is filled with commonsense wisdom and interesting real world
anecdotes. The writing is light and is easy to read. This is a entertaining and insightful
work on software productivity. This is also a nice reference to Demarco's and Lister's
seminar on "Managing Successful Software Projects" which loosely covers much of
the same described material. I highly recommend this seminar.
top
Software Metrics : Establishing a Company-Wide Program, by
Robert Grady and Debra Caswell, Prentice Hall, 1989. This is a good practical introduction
to applying metrics to software development in an industry environment. The authors
document their experience with using and applying metrics at Hewlett Packard. What makes
this text valuable is the industry application, where you get the feeling that the
information has been field tested and is actually used. This is in contrast with other
metrics books which seem to be oriented toward a more academic presentation. Another
valuable asset of this book is that you can compare your measurements and metrics against
another industry program to see where you are the same or different.
top
The Capability Maturity Model by Mark C. Paulk
et. al, Addison Wesley, 1995. This book contains the description of the Software
Engineering Institute's (SEI) Capability Maturity Model (CMM) for software process
improvement based on Watts Humphrey's original software maturity model. This book should
be included on anyone's bookshelf who is actively involved in changing a software
development process or who is involved in software process improvement. The book describes
the best practices in software engineering. The model's Key Practice Areas (KPA's) are
described in detail. I use this book regularly while I do process assessments, audits and
software process improvements activities with clients and customers.
top
IEEE Standards, Collection on Software Engineering,
IEEE 1999. This 4 volume set contains a collection of standards on software
engineering. Topics include, software requirements specification, standard software
engineering terms, software configuration management, software metrics,
software quality assurance plus many more . There is a
wealth of information here if you choose to use them. It
is an excellent place to start if you are creating software engineering documents and need
templates to start your documents. Just a caution: use the templates
only as a starting point,
but customize the templates based on your organizational culture and business practices in
order to keep the length of documents manageable. The only downside to this
set of books is its
cost (about $395). Electronic and Acrobat PDF versions of the collection
(released 2003) and individual
standards are available from the IEEE Computer Society. One
way to use these books is to survey the standards and choose bits and pieces
that apply to the way that you develop software including the way that you
document your software.
top
Software Engineering,
by Roger Pressman, 6th edition,
March 2004. This new edition is an update to an already popular introductory
software engineering text. I have reviewed several other introductory software
engineering texts and I like this one the best because of its industrial tone.
Several other introductory software engineering texts that exist today are authored by academics
and don't appear to have a practical bent for those practicing software
engineering in the trenches. As a survey text, it suffers from being shallow in
areas, but that is to be expected in a survey text. You can find just about any
subtopic in software engineering in this book. It's a great place to start
learning about a new unfamiliar subtopic in software engineering. If you want or
need more detail in a specialized area of software engineering than what this
book offers, then see some of
the other book references on this page. The major downside of this book is
its cost (over $115). Despite this, I still recommend the text to new software
engineers and individuals who don't have a formal software engineering
background. For developers, I often suggest that the contents of the book can be
used for training and as a development guide for broadening the foundation of
the competent software developer.
top
I don't know of any software book that deals specifically
with software engineering training. However, many books by the American Society
of Training and Development (ASTD) deal with training from a generic
perspective. Some survey texts in software engineering have a chapter or two on
training and or development of personnel. My general view of the industry is
that most developers and software engineers don't get enough training. I wrote
an
article called "How To Get Approval To Attend Conferences or
Training" that you may want to read if you feel you are
not getting enough training or specialized development. It gives some hints on
how to get more training or attend conferences. The best training methods that I
have witnessed in the computer and software field are all based on
experiential training methods. I have had the opportunity to participate in
experiential training in several of Jerry Weinberg's workshops (Problems Solving
Leadership and Change Shop) and his experiential (X) design workshop where
participants learn to design experiential training programs. Unfortunately Jerry
no longer teaches his Problem Solving Leadership and Change Shop workshops. His
X workshop is open by invitation only.
Steve McConnell's book, After the Gold Rush:
Creating a True Profession of Software Engineering (1999), is
a book that deals not so much with software training but with the
professionalism of the software engineering field. Steve in this book offers a
plea for software development to mature into an engineering discipline.
Steve's other book, Professional Software Development: Shorter Schedules, Higher
Quality Products, More Successful Projects, Enhanced Careers (2003) expands on
After the Gold Rush concepts and advocates the use of professional software
practices that support the cost effective creation of high quality software. In
both books, Steve presents his ideas for the development of software engineers. For
the most part Steve is advocating more software engineering professionalism
which should help the industry. However, I am not sure that that certification
or licensing of software developers will be the answer for improving the discipline.
The
Design of Everyday Things by
Donald Norman, 1st edition, Basic
Books, 2002. This book used
to be named The Psychology of Everyday Things in its hardback form. This book is
an excellent introduction to usability in design. Despite some of the pictures
being old, this classic discusses the effect of poor design and equipment
failure on a number of things outside of software and computers. Even though it
does not focus on software and computers it serves as a primer on how and why
certain products satisfy customers while others frustrate. This makes the text
valuable since it can be read by non-computer and non-software individuals. Many
of the concepts apply to computer and software design. Once one has read this
text, one can move to more specialized references in the field of human computer
interaction, human factors, and user interface design.
top
Bad
Software:
What to Do When Software Fails, by Cem
Kaner and David Pels, John Wiley, 1998. This is one of the few books about the
legal aspects of software. Kaner, who presently is a computer science professor
at the Florida Institute of Technology and an expert in software testing, is
also trained as a lawyer. He provides a unique view of software from a customer
perspective in this book. Kaner provides customer information on how to
negotiate with software publishers and how to deal with problems with software.
I have included this reference only because it is one of the few books on the
legal aspects of software. If your reading time is limited I would suggest that
you read other references on this list first.
top
Introduction
to General Systems Thinking: Silver Anniversary Edition by
Gerald Weinberg, Dorset House, 2001. This book is
the updated 25th anniversary version of the book that was originally published
in 1975 (by John Wiley) that still continues to sell. According to Jerry, he was
able to negotiate the re-purchase of the rights of this book so that it could be
re-published to a new generation of readers and thinkers. This was one of the
first books that I read by Jerry Weinberg in the early 1980's. This book serves
as an excellent introduction to the field of systems thinking, cybernetics, or
systems theory in general. The book is written in a general nature so it can
apply to whole host of disciplines such as the biological sciences, engineering,
computer science, medicine, business, management, and organizational science. I
really believe that anyone studying systems theory should read this book. This
text served as a foundational text to my studying the field of system
engineering. As with several Weinberg books, the information listed here is
still relevant today.
Quality
Software Management: Systems Thinking, Vol. 1, by Gerald
Weinberg, Dorset House, 2000. This important work, the first in a four part
series on Quality Software Management, introduces the reader to the application of
systems thinking as applied to the construction of software. When I first read
this book, shortly after it was published, I was amazed at many of the familiar
concepts and illustrations that I have witnessed over the years while I consult.
I must admit that I am somewhat biased since I enjoy Jerry's writings. As I read
the book I felt I was not preached to as is the case with many project
management/software quality management books. The text is clear, easy to read
and is sprinkled with sometimes funny examples and rules characteristic of many
Weinberg books. It is also apparent that we think alike when it comes to
software and software development. One interesting piece of information
that I learned from Jerry about this book was that he formally modeled many of
the system dynamics examples that are in the book in a early version of a
modeling program called iThink. For those who complain that Weinberg doesn't
give you any meat in books, Jerry explained to me that inclusion of such
information/models would be of limited value to most practicing software
managers. To know that by tweaking a critical parameter of a dynamic model of
some aspect of software would save a manager a few days or a week on a large
software project is really not that helpful. I tend to agree and I am glad he
did not include that information as part of the book. If you seek more meaty
information from Weinberg, I suggest that you read some of his original
publications in journals such as Human Factors, IEEE Transactions in Software
Engineering, etc. Jerry has done some of the pioneering work in real time
programming, programming languages, inspections, software design, the humanistic side of
software development and human computer interaction.
top
Systems
Engineering and Analysis,
by
Benjamin S. Blanchard
and
Wolter J. Fabrycky,
3rd edition, Pearson Education, 1998. This introductory text covers the
discipline of systems engineering. It provides a comprehensive survey of the
field of systems engineering. There are several other introductory texts in the
area of systems engineering but I like this text the best. Ben Blanchard,
emeritus professor of system engineering at Virginia Tech started his career in
industry before retiring and going into academia. Imagine that. I was fortunate
early on in my career to learn systems engineering from Professor Blanchard. It
was an eye opening experience to take this class and learn that software is
really only a sub discipline within systems engineering. My introduction to
systems engineering allowed me to participate with individuals such as Ben
Blanchard and Wolter Fabrycky in the early formation of the National Council on
Systems Engineering (now called the International Council on Systems Engineering
(INCOSE) during the early 1990's. I recommend that anyone interested in this
field look into INCOSE (www.incose.org).
top
Retrospectives
Project
Retrospectives: A Handbook for Team Reviews, by Norman
Kerth, Dorset House, 2001. This book presents a guide on how to perform project
retrospectives. This important process is essential if one wants to improve the
software development process. I must admit that I have a bias for this text
since many of the individuals listed in the book are colleagues, peers or
friends. This book contains the basic information that I use when I conduct
project retrospectives. In addition, I have had the opportunity to participate
in the Retrospective Facilitator's Gathering where individuals who have
conducted retrospectives get together to share ideas and develop the field of
project retrospectives. The common thread to these gatherings is Norm's
wonderful book.
top
© 1998-2004 by John Suzuki
Last Revised : 9/15/2004

|