Programming Language Explorations is a tour of several modern programming languages in use today. The book teaches fundamental language concepts using a language-by-language approach. As each language is presented, the authors introduce new concepts as they appear, and revisit familiar ones, comparing their implementation with those from languages seen in prior chapters. The goal is to present and explain common theoretical concepts of language design and usage, illustrated in the context of practical language overviews.
Twelve languages have been carefully chosen to illustrate a wide range of programming styles and paradigms. The book introduces each language with a common trio of example programs, and continues with a brief tour of its basic elements, type system, functional forms, scoping rules, concurrency patterns, and sometimes, metaprogramming facilities.
Each language chapter ends with a summary, pointers to open source projects, references to materials for further study, and a collection of exercises, designed as further explorations. Following the twelve featured language chapters, the authors provide a brief tour of over two dozen additional languages, and a summary chapter bringing together many of the questions explored throughout the text.
Targeted to both professionals and advanced college undergraduates looking to expand the range of languages and programming patterns they can apply in their work and studies, the book pays attention to modern programming practice, covers cutting-edge languages and patterns, and provides many runnable examples, all of which can be found in an online GitHub repository. The exploration style places this book between a tutorial and a reference, with a focus on the concepts and practices underlying programming language design and usage. Instructors looking for material to supplement a programming languages or software engineering course may find the approach unconventional, but hopefully, a lot more fun.
This book provides a comparative look at a lot of programming languages in a lot of different classes. Example code is given for each language, beginning with the classic "Hello World" (which sounds lane, but does immediately show the structure of the language) and then looking at code that describes language features too.
There is good discussion of the strengths and weaknesses of each language, and languages are also grouped by use, which will make this a handy reference tool. There was not quite as much depth on each language as I would like. As an example, garbage collection was discussed as being present or absent from languages, and there was some discussion of whether this was good or not (e.g., in the section on Rust, the lack of garbage collection was pointed out as avoiding execution pauses - quite right). But there is more that could have been said - albeit perhaps not in a work covering so many languages. Arguments are made, for instance, that lack of garbage collection makes execution faster - but that is not wholly true. Could it have been discussed here? I'd have liked to see it, but then, how much other detail would be needed for other such issues? So maybe it was the correct choice and the correct level.
What I did like, however, was how this book was just about perfect for getting a very quick feel for language structure. By pointing out what is unique in a language (and, by implication, what is common), I was very easily able to see how languages were similar to others, and I think it would allow me to skip significant sections of instruction manuals for a language for things I already implicitly understand. As such, I think this reference goes beyond mere interest and crosses into a category of downright useful books.
It is 7:18am, I've just finished the last 5 pages of a book and am ready to write some review. I definitely enjoyed the reading process. This book helped me to get more familiar with functional languages and forced me to try them out, which was a pleasant experience, as well as gave an insight into some of the topics of language design. It greatly aids one to enrich one's knowledge of how languages are actually designed, answering questions of why certain design decisions have been made. The book left me with a realization of how rich the world of programming languages is and how little I know about them. I'm so glad to have stumbled upon it. 5 stars, worth reading, my huge respect to authors. Thank you!