This set of four volumes gives me considerable problems as a reviewer. On the one hand I might give it an excellent review for what is in it but on the other hand I could give it a very mediocre review because of what is not.
Let me take you through a few facts. The four volumes vary considerably in size. Volume 1 (Object Oriented PLs) is by far the largest. In just under 100 pages it covers a general introduction (rather too superficial to my mind as it does little to cover the substantial differences between the different versions of object orientation) and then has articles (some reprints from elsewhere) on Smalltalk (3 chaps.), C++ (3 chaps), Eiffel (1 chap) Ada 95 (1 chap), Modula 3 (1 chap) and Java (3 chaps).
Each chapter is written by a World class authority on the language concerned. So we have Bjarne Stroustrup contributing a chapter on the history of C++ and Andy Koenig contributing chapters introducing C++ and detailing traps and pitfalls.
The chapter on Eiffel is contributed by Bertrand Meyer. The chapters on Java are interesting. James Gosling, Bill Joy and Guy Steele contribute chapter 12, which is less than 1 full page of text. Ken Arnold and James Gosling collaborate to produce chapter 13 which is about 25 pages reprinted from the 1996 edition of The Java Programming Language . The final chapter is over 100 pages from the keyboard of David Flanagan reprinted from Java in a Nutshell (2nd Edition) . As chapter 12 is also a reprint we have 'Java, write about it once, reprint it everywhere.' OK that may be a fairly cheap crack, but the other contributors to this volume did at least write specifically for it even if they were sometimes rewriting material they had prepared earlier.
While C++ is covered in over 250 pages we get just under 150 on Smalltalk and under a hundred on Eiffel.
What is definitely missing from this volume is any form of objective assessment of the strengths and weaknesses of each of the languages covered. The better informed reader will know that there is a massive difference between the essentially dynamic binding version of OO that is Smalltalk and the default to static binding of C++. It would have been a great help space been dedicated to this. By all means have an overview of each language from an expert on that language but a book such as this would greatly benefit from a comparison written by someone who had a clear understanding of the advantages and disadvantages of each. Indeed one point is entirely missed by the classification applied by the series editor and that is that C++ is not a pure OOPL. While OOP maybe the commonest way the users (think they) program in C++ it is far from the only way that C++ can be used.
The 450 pages of Volume 2 (Imperative PLs) is dedicated to Fortran (1 chapter), C (2 chapters), Pascal (1 chapter) and Icon (1 chapter). The volume also includes a brief, confused and largely pointless chapter on intermediate languages (such as pcode for Pascal, JavaVM for Java and Diana for Ada).
I think that this is by far the worst of the four volumes. Its coverage of the topic area is superficial, Pascal being represented by a chapter on 'Turbo Pascal'. The chapter on Fortran is fine for someone with a degree of familiarity with versions of Fortran prior to Fortran 90. Of course any reader can spot a host of imperative languages that have been excluded. Like it or not, why is there nothing covering any version of BASIC? I could go on but I found this volume profoundly unsatisfying.
In some ways volume 3 (Little Languages and Tools) is much the most satisfying of the four volumes. It, too, misses out many candidates for inclusion but in the 700 pages it does drag the readers attention to the variety of tools around. Ian Cargill might be pleased to find SQL in these pages. I was happy to spot Python and I guess Silas Brown might enjoy the chapter on Little Music Languages. In this chapter we have an example of what the whole could have been, a comparison between the features of a group of languages aimed at a similar task.
Finally in Volume 4 (Functional and Logic PLs) we have a small volume of just over 250 pages dedicated to what should be a very interesting area of programming languages. Of course we have a problem in that so few programmers have any clear grasp of these programming language types. The representative languages are well chosen (LISP, Scheme, Guile, CLOS and Prolog) but considering the low level of understanding of these types of language a good clear introduction would have been advantageous. Instead we have a single page from Peter Salus which is miss-titled in the Table of Contents. Overall this volume looks like a token representation. Perhaps the series editor does not consider them important.
Now apart from the lack of any form of over-view of programming languages we have some notable omissions. Those that know me will guess that I am not well pleased to find no coverage of Threaded Interpreted Languages of which Forth is the most widely known. Then where is the coverage of mathematical languages (from APL to Mathematica). I realise that it is hard to know what to include and what to leave out but I have a distinct sense that the series editor sat down and listed the languages he was aware of and then commissioned material from relevant experts. How any book on programming languages can completely ignore COBOL is hard to fathom.
In summary, what is in this book is good, written by authors who know there material and generally know how to write about it. The major fault with this book is what is not in it. Responsibility for that must be laid firmly with the Series Editor in Chief. The contents are neither comprehensive nor objective. The contents do not even sensibly sample the full range. With deep regret I have to conclude that the complete omission of COBOL, Basic TILs to name but three makes these volumes inadequate as references. The lack of comparison between the languages covered makes the books much less valuable to the reader trying to get a grip on the broad scope of programming languages.
The books are neither chalk nor cheese which is very sad for those individual contributors who have put so much careful writing into their individual chapters. They did what was asked of them, a pity those responsible for the whole have, in my opinion, let them down.