ACCU Home page ACCU Conference Page
Search Contact us ACCU at Flickr ACCU at GitHib ACCU at Facebook ACCU at Linked-in ACCU at Twitter Skip Navigation

Search in Book Reviews

The ACCU passes on review copies of computer books to its members for them to review. The result is a large, high quality collection of book reviews by programmers, for programmers. Currently there are 1949 reviews in the database and more every month.
Search is a simple string search in either book title or book author. The full text search is a search of the text of the review.
    View all alphabetically
Designing Hard Software, The Essential Tasks
Douglas Bennett
1 884777 21 X
Nigel Armstrong
writing solid code
Appeared in:
I liked this book a lot more. Although you couldn't really say that it is an exciting read, it is an altogether more thoughtful book, put together with a degree of care and thoroughness which is sadly rare amongst technical authors.

Let's start with the title, which I would have to say is confusing if not actually off-putting. What he means by 'Hard Software' is software designed like hardware, that is as a set of well-defined components. He uses the analogy of pinout diagrams to show how software interfaces should be documented, clearly and unambiguously and to point out the fact that it is those interfaces that are most important, rather than the details of implementation.

From that starting point he draws on what seems to be extensive practical experience to build up an approach to developing complex software systems. This approach is unusual in that he claims that it can be used both with traditional functional-decomposition methodologies such as SSADM, as well as with OO and RAD methodologies. He achieves this by separating out the 'essential tasks' of the title, which all developments, he says, should include.

These essential tasks are nothing revolutionary; many other texts cover much the same ground. What sets this book apart is its open- mindedness. Bennett does not claim any great originality; he is happy to use notation developed by a variety of other authors, for example, but in each case he discusses the good and bad points of each style and makes a recommendation that is backed up by solid, pragmatic argument. He too has a case-study, this time of a video-rental shop, which he covers in extensive detail, showing how a design evolves through a number of iterations as different techniques of analysis are applied.

Previously I have been disappointed in many widely-acclaimed works on (generally OO) analysis and design, which spend too much time on notation and little on the actual process of designing and developing real systems. This book redresses that balance, I am glad to say. I would wholeheartedly recommend it to software project managers as a major aid in defining practical development methods.