you owe it to yourself, to your employers and to your customers and clients, to read this book, to study it and to try to grasp the gestalt
Ulrich Eisenecker is well known to some ACCU members because he was our German representative for much of the 1990s. Indeed, it was the pressures of writing this book that largely led to his handing that job on. The other author is less well known though his experience and academic qualifications include study and work in the USA.
You might be concerned that neither author is a native English speaker, though I suspect that Czarnecki honed his English writing skills during his time in the USA. I can assure you that you need have no worries here. The book is written in clear and readable English, even if the word order is sometimes not that which a native English speaker would have used. There is very little if any influence from the German that both authors would use naturally.
I have no doubt that some readers will want to pick on flaws in this book (and this reviewer is sometimes accused of being overly influenced by the faults in a text). Doing so would be equivalent to picking on the quality of the C++ in the GoF's Design Patterns . It would entirely miss the point. This is not a book on the fine detail of expert C++ and should not be judged as such. The authors set out a far broader canvas, and in doing so have produced a book that should have a major influence on the future of software engineering. If you believe that you are a professional programmer (or, if you must, a software engineer) you should take the time to study (note that word) this book and grasp the grand design.
There is a Zen injunction 'by all means analyse but remember that the whole is greater than the sum of the parts.' In this case the whole is much greater than the sum.
In this book you will find chapters on a wide range of issues. It starts with a short chapter telling the reader what generative programming is (if you think it is just another form of generic programming, you would be completely mistaken). The rest of the book is in three main parts before it finishes with a substantial set of appendices.
The first part is titled 'Analysis and Design Methods and Techniques'. It starts with chapter 2 on Domain Engineering and concludes four chapters later with chapter 5 on the process of Generative Programming.
The second part, 'Implementation Technologies' ranges from chapter 6, 'Generic Programming' to chapter 8, 'Aspect-Oriented Programming' and eventually to chapter 11, 'Intentional Programming'.
Part 3, 'Application Examples' is composed of three chapters: 'List Container', 'Bank Account' and 'Generative Matrix Computations Library'.
Every chapter, after the first, starts with a section entitled 'Why Is This Chapter Worth Reading?' In a sense chapter 1 might have been titled 'Why Is This Book Worth Reading?' except that in all cases I would wish to replace 'Reading' with 'Studying'. This is not a book for those seeking instant gratification or enlightenment, it is a book for those that want to improve their software development skills and understanding.
James Coplien (one of the founders of the Pattern Movement, and author of such books as Advanced C++ Programming Styles and Idioms and Multi-Paradigm Design for C++ ) believes in the importance of Generative Programming and the significance of this book. I am certain that history will prove him right.
Before concluding this review let me quote a single sentence from the first page of chapter 1: Generative Programming is about manufacturing software products out of components in an automated way, that is, the way other industries have been producing mechanical, electronic and other goods for decades.
That claim may seem to have a familiar ring to it. You may have grave reservations on whether it can deliver on this promise. However, you owe it to yourself, to your employers and to your customers and clients, to read this book, to study it and to try to grasp the gestalt, the book as a whole. Despite the outstanding quality of the writing, this will be no easy task. None the less, if you have pride in your professionalism and your personal development as a software developer it is a challenge you should accept. You should then prepare to share your insights and understandings with others (perhaps through the pages of Overload)