Introduction to the Theory of Programming Languages (1991)
bertrandmeyer.com
bertrandmeyer.com
I found that the older edition was enough to get a handle on the subject enough to read other sources.
It's annotated with short summaries and historical background by Leslie Lamport himself. Seems like a great starting point!
Still, I'd love to hear some specific recommendations for the topic you mentioned, it sounds super interesting.
[1] http://lamport.azurewebsites.net/pubs/pubs.html#lamport-type...
I do remember of the Eiffel book that Meyer was a bit too keen on emotive arguments over factual.
I'm not talking about OOP. Meyer was hard on pre and postconditions (which were massively oversold), but these were functionally no more than assertions. He had holes in his object system. He had holes in other parts of the type system. He was not an object zealot IIRC.
However, using the language itself was a different story. This must have been around 2009. There was barely any documentation online, not to speak of libraries. One project required us to use some poorly documented, barely functioning and outdated GTK bindings.
I think I lacked enough of understanding about programming to fully appreciate the language (I remember mostly contracts, as something unusual but useful).
I think I will read this book, though: if it's anything like the Eiffel one, I am sure it's very fun and didactic.
Also, in reference to Ariane rocket explosion (https://en.wikipedia.org/wiki/Ariane_flight_V88) due to interger overflow, it wasn't clear how a precondition would have saved anything - an assertion made by Meyer. If it got to the relevant method and the precondition failed, you would still have to have forseen the possibility of error and coded for it, otherwise it might not have run the function but could still have catastrophically failed.
Rightly said!
I learnt "correct" OOD/OOP from his book Object-Oriented Software Construction (https://bertrandmeyer.com/oosc2/). It was one of the few books which actually looked at "Programming in the Large" specifically through the Object-Oriented lens and also instituted "Design By Contract (DbC)" within the Eiffel language to support it. DbC is a "user-friendly" version of the correct programming techniques espoused by Floyd/Hoare/Dijkstra. One can also say that it subsumes other techniques like TDD since a post-condition is like a unit test in itself. It is a shame people no longer study Meyer's works with the seriousness they should (he maybe a pedant but it is the right sort of pedantry) but instead run after buzzwords/fad of the month.
Here is Bertrand Meyer's take (the right one, imo) on Agile from his book Agile! The Good, the Hype and the Ugly - https://learning.acm.org/techtalks/agile.
Wait what? Disciplined programming is not mutually exclusive with at least 3 of those 4 things (continuous releases, agile, scrum). If people treat those things as opposed to disciplined programming, it's because they don't understand the actual principles underlying them.
https://bertrandmeyer.com/wp-content/upLoads/introduction_to...
> (Please do not bookmark or share the above download link as it may change, but use the present page: https:/bertrandmeyer.com/ITPL.)
I wish there were more books focused on that aspect. I will definitely take a look at it over the weekend.
2) You may also find Cliff B. Jones' book Understanding Programming Languages useful.
Excerpt from the preface;
Fortunately, there is a less expensive way of sorting out the meaning of a programming language than writing a compiler. This book is about describing the meaning (semantics) of programming languages. A major objective is to teach the skill of writing semantic descriptions because this provides a way to think out and make choices about the semantic features of a programming language in a cost effective way. In one sense a compiler (or an interpreter) offers a complete formal description of the semantics of its source language. But it is not something that can be used as a basis for reasoning about the source language; nor can it serve as a definition of a programming language itself since this must allow a range of implementations. Writing a formal semantics of a language can yield a far shorter description and one about which it is possible to reason. To think that it is a sensible engineering process to go from a collection of sample programs directly to coding a compiler would be naive in the extreme. What a formal semantic description offers is a way to think out, record and analyse design choices in a language; such a description can also be the basis of a systematic development process for subsequent compilers. To record a description of the semantics of a language requires a notation —a “meta-language”. The meta-language used in this book is simple and is covered in easy steps throughout the early chapters.
That's what Word does. And it looks a bit ugly. It's probably worse than just going with left-alignment.
Of course, in practice approximately no one ever does that.
Also if you look into PDF properties it states the same.