Tom Addis, Jan Addis
Patrick Hill MBCS CITP
8 out of 10
Visual programming systems have had a large uptake in industry. However the visual components of such systems have tended to focus on the structure, properties and behaviour of graphical user interfaces and their relationship to textually represented, predominantly imperative, code fragments.
Functional programming has historically appeared to have been more prevalent in the academic computing community. However, it seems to be gaining wider adoption with popular languages such as Python and Ruby supporting the functional paradigm, albeit in an impure form.
The main part of this book is about functional programming and in particular the use of the authors’ graphical functional programming system ‘Clarity’. In Clarity, and in contrast to mainstream ‘visual’ languages, programs are expressed as schematics. The authors argue that functional programming lends itself to graphical schematic representation more advantageously than imperative approaches.
Through the ten chapters of the book, the authors cover, in varying degrees of depth, a wide range of computer programming-related topics, with a natural bias towards functional programming and Clarity. Much of this book is a practical demonstration of the Clarity system and of how the benefits of graphical representations of (functional) computer programs over their textual counterparts may be gained.
There are practical sections describing how to run and use the Clarity system, how to implement distributed systems using Clarity and how to develop extensions to the Clarity system. In addition, the authors describe approaches to the design and development of functional programs and functional programming concepts, such as head and tail recursion, folds and so forth. These sections are supported by extended working examples.
In contrast, there are sections that discuss philosophical topics such as computer program semantics, and more theoretical sections that discuss topics such as functional thinking, artificial intelligence, Bayesian classification and programming systems that deal with uncertainty.
The book is an engaging read and is likely to be of value to anyone interested in computer programming, functional or not. The authors reinforce learning by lots of review questions, and worked through projects and examples. My only criticism is that, on occasion, I thought better signposting was required in order to make clearer the purpose of some of the diversions.
The Clarity system and examples from the book are available for free download.
Further Information: Springer Verlag