Before reviewing this book it is worth giving the reader some idea of my opinions of the programming language adopted by the authors.
My view is that the world would be a much better place without wasps, piano accordions, spinach and the C programming language; indeed without C it would be a much safer place as well: C is truly the work of the devil.
To publish a book which purports to be about computer science and features this programming language is something of a contradiction. However, I have tried to review it without worrying too much about this.
Foundations of Computer Science - C edition is one of those highly successful blockbuster computer science books which has done very well in the American undergraduate market. Such books tend to be big (this one comes in at a whopping 786 pages), comprehensive and are usually aimed at a first or second- year audience.
There are currently about five or six of these blockbusters whose place on the book list of any serious computing undergraduate is assured. They are mainly American - the one exception being Somerville's Software Engineering - and tend to be very well written with more than an adequate selection of sidebars, self-assessment questions, exercises and worked examples.
Each chapter usually contains statements about what it intends to teach you and concludes with a checklist of what it has taught. The quality of their artwork is usually excellent and they are often so well edited that you are unable to discern which of the authors - for to write one of these books adequately requires more than one person - you are currently reading.
Foundations of Computer Science - C edition is no exception to this.
The contents of the book reflect the modern American "computer science" curriculum. I have deliberately put the term computer science in quotes since I believe that it is a fiction - albeit a fiction that was necessary in the early days of the subject for mainly propaganda reasons.
If there was a distinct computer science then this book would contain chapters on observing from nature, building models and theories for these observations and the validation of these models and theories. What we do have is a combined work of applied mathematics and programming.
Typically, the material for this book would be covered in three or four British undergraduate modules, mainly at the first and second-year level, although some of the material, in particular that covering automata, grammars and regular expressions, would be found in the first few lectures of third-year courses.
As I have implied above this is an excellent book, yet I see very little market for it and its sister book which uses the more respectable Pascal programming language; this has more to do with the nature of British computing courses and British academia than with any inherent defects in the book.
British degree courses are something of a melange: they combine basic courses in such topics as programming and data structures with more advanced courses reflecting the research interests of a department (usually offered as third-year options); to this mix are added topics which are required for accreditation by professional institutions such as the British Computer Society and the Institution of Electrical Engineers.
Very few institutions, if any, teach the type of single-minded syllabus which is defined by this book. Furthermore, there is little prospect of this changing as the current pressure on British academics is to teach more and more applied computing.
Another drawback is the price. At £28.95 it breaches the psychological barrier of £20 which British publishers assume that our undergraduates can afford for a single module or course.
My view is that for such a comprehensive book, £28.95 is a steal and that it would be little trouble for three or four academics to structure their first and second-year courses in such a way that the book could cover most of their material. Unhappily, I find little evidence of this degree of co-ordination in many of our computer science courses.
Another problem preventing the adoption of this book is its American cultural bias. In order to illustrate this I shall give two examples: one bad and one good. The bad example is the fact that the authors teach the concept of program proof by conjuring a program out of mid air and show it meets its specification by the standard techniques using Hoare logic.
This is at variance with the technique taught in European universities whereby a program is developed constructively in such a way that it does not violate its mathematical specification - a technique which leads to a major reduction in the amount of mathematics required to develop a correct program.
The second cultural difference concerns the material on the complexity of algorithms - in effect how to discover the time a program runs.
Quite a lot of space is devoted to this subject in most American computing courses while, at best, British courses may feature two or three lectures on the subject. In this the Americans have got it right. It is a perpetual mystery to me why British computing courses seem to ignore what many computer scientists regard as one of the most important topics in computing.
In summary this is an excellent book; however, cultural factors, the price and the reluctance of British academics to share set books will prevent it making much of an impact here in the undergraduate market.
Darrel Ince is professor of computing science at the Open University.
Foundations of Computer Science - C Edition
Author - Alfred V. Uho and Jeffrey D. Ullman
ISBN - 0 7167 8284 7
Publisher - Computer Science Press
Price - £28.95
Pages - 86