Masterminds of Programming
features exclusive interviews with the creators of popular programming languages. Over 400+ pages, the book collects the views of these inventors over varying topics such as language design, backward compatibility, software complexity, developer productivity, or innovation.
Interestingly, there isn’t so much about language design in the book. The creation of a language seems to happen out of necessity, and the design itself is mostly the realization of an intuitive vision based on gut feelings and bold opinions. The authors’ judgments about trade-offs (e.g. static or dynamic typing, or security vs performance) are surprisingly unbalanced, and when asked to explain the rationale for some design choices, explanation tends to be rather scarce.
Instead, the authors describe with passion the influences that led them to a particular design. The book contains thus a good deal of historical information about the context in which each language was born.
- C++ was invented to enable system programming with objects
- Awk was invented to easily process data in a UNIX fashion
- Basic was invented to teach students programming
- LUA was invented to easily script components
- Haskell was invented to unify the functional programming language community
- SQL was invented to query relational database with an approachable language
- Objective-C was invented to bring objects to the C world
- Java was invented to provide a secure language in a networked world
- C# was invented as the strategic language for the modern Microsoft platform .NET
- UML was invented as the unification of modeling languages
- Postscript was invented to enable flexible typesetting and printing
- Eiffel was invented to make objects robust with contracts
Both the interviewers and interviewees are knowledgeable and articulate. The inventors smoothly distill their experience and insights during semi-structured interviews. Throughout the book, discussions remain mostly general, which both a plus and a minus: the material is accessible to all, but multiple sections have a low information density. The book could be easily shortened with a better editing.
Discussion about software engineering in general turned out to be the one I enjoyed most. Some of the interesting ideas touched in the book were for instance:
- Simulating projects help acquire experience faster, p.254
- Classes are units of progress in a system, p.255
- We need of an economic model of software, p.266
- Object-oriented programming and immutability are compatible, p.315
- What UML is good for: useful for data modelling, moderately useful for system decomposition, not so useful for dynamic things, p.342
- Generating code from UML is a terrible idea, p.339
- There’s no software crisis; it’s overplayed for shock value, p.354
- How broken HTML is, and how better it would have been if the web had started with a typesetting language like postscript, p.405
These points come from the late interviews, but there are similarly nice bits and pieces in all chapters; it just turned out that I starting taking notes only half through the book.
Amongst the recurring themes, the notion of simplicity pops out and is discussed multiple times, at the language level and a the software level. Several interviewees quote Einstein’s “Simple as possible, but not simpler”, and emphasize the concepts of minimalism and purity, each in their own way.
The book is also very good at instilling curiosity about unknown languages. I was initially tempted to skip chapters about languages I didn’t know, and am glad that I didn’t. Stack-based languages like Forth and Postscript appear as examples of a powerful but underlooked paradigm; the chapter about awk almost reconciled me with bash scripting; and the discussion about UML made me reconsider its success—the fact that the whole industry agreed on a common notation for basic language constructs shouldn’t be taken for granted.
In conclusion, this book isn’t essential, but it is enjoyable if you are an all-rounder with some time ahead, you appreciate thinking aloud, and good discussions around a cup of coffee.