3 ms·
If you haven't yet, you may enjoy reading "Concepts, Techniques, Models of Computer Programming" [1]. The reason is that it is chock-full of interesting ideas:
by charlysl 8y ago
If you haven't yet, you may enjoy reading "Concepts, Techniques, Models of Computer Programming" [1].
The reason is that it is chock-full of interesting ideas:
- kernel language, which is not a practical language, but contains all the concepts for building one of a given model
- growing said kernel language one concept at a time, when its expressiveness is stretched
- the case for multi paradigm languages, with a real example throughout the book (Oz)
- and I mean multiparadigm (although the author dislikes this word): first declarative, then with concurrency, then with ports, then with explicit state, then object oriented with and without concurrency (which in fact isn't really an extension of the kernel language), then relational ... all being simple but very careful extensions to that kernel language
- the case for each concept, which results in an extension to the language, is very carefully explained and many alternatives are considered, and much justification is given to why it would improve the language; if you are considering designing your own language, you could do worse than learning from the author's carefully described approach
- each concept results in an addition to the grammar, the semantics of which are described in detail; they are also described formally in an appendix
- whenever a new programming model is described (which is basically a set of concepts), an archetypal example is discussed: Haskell (concurrent declarative), Erlang (message passing), Java (concurrent OO), Prolog (relational)
- techniques for programming with each concept are introduced
- each chapter has exercises at the end, several of which consist of doing your own extensions to the language; some of these are research level
- as an example of how deep but accessible this book is, check the "Principal programming paradigms" poster [pdf] [2]
- the extensive bibliography at the end is fantastic
And since I believe that it hasn't been mentioned in the comments and in case you don't know yet, check out "Lambda the Ultimate", "the programming languages weblog" [3]
[1] https://www.info.ucl.ac.be/~pvr/book.html https://www.info.ucl.ac.be/~pvr/book.html
[2] https://www.info.ucl.ac.be/~pvr/paradigmsDIAGRAMeng108.pdf https://www.info.ucl.ac.be/~pvr/paradigmsDIAGRAMeng108.pdf
[3] http://lambda-the-ultimate.org/ http://lambda-the-ultimate.org/