Alexander Stepanov also has Notes on Programming (a series of lectures he gave at various companies) which is what this and his other published books are based on. You can find the link to it in the "reference" section of his wikipedia page - https://en.wikipedia.org/wiki/Alexander_Stepanov
I have all of his books and they are all great (though not easy!). His starting point is "Algebraic Structures" (basically sets of objects and operations defined on them eg. Groupoid/SemiGroup/Monoid/Group etc.) and so some familiarity with Abstract Algebra/Discrete Mathematics is assumed. The mapping he does from the mathematics to a language construct modeling a concept is what gives one the insight into programming. His other book From Mathematics to Generic Programming gives one a more "easier" approach to the subject and should be read in conjunction with this one for better understanding.
A related old book is Ruminations on C++: A Decade of Programming Insight and Experience by Andrew Koenig and Barbara Moo. This is derived from a collection of articles written by Koenig when he was working closely with Stepanov on his ideas and implementation of STL. His idea of programming templates in a functional and generic manner is what is conveyed in this book in the "templates" section and is still quite illuminating (no math but short C++ code in articles). So something which might not be clear from Stepanov's mathematical treatment may be clearer here since you can see an actual C++ implementation (warts and all).
You missed the point. Euclid's elements is a beautiful work that is incredibly well structured. It has served an important purpose in math. Elements of programming is like Euclid's elements in this way.
I've found this book, and Stepanov's previous work, to be among the most insightful ways of thinking about programming. But it's hard to distill, and we could wish for a much better language than C++ to express these ideas in.
That is the attractiveness of the dark side of the force, the closest we have come from all kinds of Haskell like exploration ideas into a mainstream language, maybe one day Rust will get there as well.
No accident that Bartosz Milewski got to mix both worlds.
Stepanov is addressing a lot of topics that Haskell sweeps under the rug. For software for which crashing is acceptable behavior, such as compilers, web browsers, or theorem provers, that's an improvement. Not all software falls in that category.
"After ten years in print, our publisher decided against further printings and has reverted the rights to us. We have published Elements of Programming in two forms: a free PDF and a no-markup paperback."
Alexander Stepanov also has Notes on Programming (a series of lectures he gave at various companies) which is what this and his other published books are based on. You can find the link to it in the "reference" section of his wikipedia page - https://en.wikipedia.org/wiki/Alexander_Stepanov
I have all of his books and they are all great (though not easy!). His starting point is "Algebraic Structures" (basically sets of objects and operations defined on them eg. Groupoid/SemiGroup/Monoid/Group etc.) and so some familiarity with Abstract Algebra/Discrete Mathematics is assumed. The mapping he does from the mathematics to a language construct modeling a concept is what gives one the insight into programming. His other book From Mathematics to Generic Programming gives one a more "easier" approach to the subject and should be read in conjunction with this one for better understanding.
A related old book is Ruminations on C++: A Decade of Programming Insight and Experience by Andrew Koenig and Barbara Moo. This is derived from a collection of articles written by Koenig when he was working closely with Stepanov on his ideas and implementation of STL. His idea of programming templates in a functional and generic manner is what is conveyed in this book in the "templates" section and is still quite illuminating (no math but short C++ code in articles). So something which might not be clear from Stepanov's mathematical treatment may be clearer here since you can see an actual C++ implementation (warts and all).
Related. Others?
Elements of Programming (2019) - https://news.ycombinator.com/item?id=32459443 - Aug 2022 (11 comments)
Elements of Programming - https://news.ycombinator.com/item?id=20437347 - July 2019 (24 comments)
Alex Stepanov (STL) just published a book on math foundations of programming - https://news.ycombinator.com/item?id=665987 - June 2009 (1 comment)
If you are passionate about programming and and computer science, this is the book to read. It's like Euclid's elements, but for programming.
Euclid's Elements is absolutely not a useful book for the contemporary.
I've found it useful as a grounding, and reference, and authoritative definition source, so I refer to:
https://mathcs.clarku.edu/~djoyce/java/elements/elements.htm...
when writing:
https://willadams.gitbook.io/design-into-3d/2d-drawing
You missed the point. Euclid's elements is a beautiful work that is incredibly well structured. It has served an important purpose in math. Elements of programming is like Euclid's elements in this way.
Historically, this is based on what is described here: https://en.wikipedia.org/wiki/Alexander_Stepanov#Standard_Te...
I've found this book, and Stepanov's previous work, to be among the most insightful ways of thinking about programming. But it's hard to distill, and we could wish for a much better language than C++ to express these ideas in.
That is the attractiveness of the dark side of the force, the closest we have come from all kinds of Haskell like exploration ideas into a mainstream language, maybe one day Rust will get there as well.
No accident that Bartosz Milewski got to mix both worlds.
Agree it should be better.
Stepanov is addressing a lot of topics that Haskell sweeps under the rug. For software for which crashing is acceptable behavior, such as compilers, web browsers, or theorem provers, that's an improvement. Not all software falls in that category.
The year in the HN title looks wrong, in the PDF it says 2019, please fix it, otherwise people ignore the book thinking it's too outdated.
Oh wait. I stand corrected - I missed that it said "Copyright 2009", "First printing 2019", not sure why it took so long to get it printed.
It's explained on the web page
"After ten years in print, our publisher decided against further printings and has reverted the rights to us. We have published Elements of Programming in two forms: a free PDF and a no-markup paperback."
[dead]