Software That Works - A Review

On this page I would like to collect some key points from the book "Software That Works" by Michael Ward, 1990, Academic Press, Inc. San Diego, California 92101, ISBN 0-12-735040-3

I came across this book literally by chance in the library of the University of Rostock. Even though it is already quite old, I think also for more modern software development very useful hints can be derived from it. What I liked especially was that software projects of all sizes are considered - from a one person hack to multimillion dollar governmental projects. The strategies discussed are not especially bound to a certain programming language. On the contrary more general practices of design, organisation and software work are treated.

The author choses a very pragmatical approach: everything that is useful to reach the goal of software that works, is taken, counterproductive things are discarded. As the chapters are quite elaborate and keep repeating and cross linking several topics, I would like to extract kind of the key statements from the chapters (some almost literally), which might be more useful for everyday work.

Please enjoy the book as well, it makes quite a nice reading. We try together with DESY Education Department to get a copy of the book for the "blue point shelf" in the library, as it is out of print for some time already.


Chapter 1: Getting Started

Chapter 2: Issues of Design

Example: Many methodologies recommend or insist not to use "goto". This originated from "goto" being misused and code becoming more and more incomprehensible. So following the recommendations will help to get understandable code. On the other hand "goto" sometimes is the most elegant way (e.g. breaking out of several nested loops), so why not use it? As long as the purpose of its use is communicated, everything is fine.

Chapter 3: Structured Methods

Chapter 4: The Iterative Cycle

Chapter 5: Prototypes

Chapter 6: Analysis

Chapter 7: Requirements

Chapter 8: Decomposition

Chapter 9: Dataflow

Chapter 10: Data Dictionary

Chapter 11: The State Machine

Chapter 12: Modularity

Chapter 13: Data Hiding

Chapter 14: Interfaces

Chapter 15: The Module Tree

Chapter 16: Flow Charts

Chapter 17: Conventional Wisdom

Chapter 18: Program Design Language (PDL, Pseudocode)

Example code (actual source code):

   1 for(int i = 0; i < 10; i++)
   2 {
   3     j[i] = k[i];
   4 }

Low level PDL:

for each value of i from zero to ten,
    incrementing i by one, copy the ith element of the array k into the ith element of array j;

Higher level PDL:

copy the first ten elements of k into j

Chapter 19: Error Checking

Chapter 20: Writing Code

Chapter 21: Testing

Chapter 22: Designing with Large Projects and Small

Chapter Last: The Sound of One Hand Clapping

Appendix A: Small Design Example

Appendix B: Initial Design of a Large System

SoftwareThatWorks (last edited 2015-05-11 16:37:34 by OliverSchaefer)