“As long as algebra and geometry have been separated, their progress have been slow and their uses limited, but when these two sciences have been united, they have lent each mutual forces, and have marched together towards perfection.” ~ Joseph Louis Lagrange
What does geometry, abstract algebra, number theory and generic programming have in common? This book attempts to answer that by starting at the early stages of organized mathematics and going all the way forward to the 1960’s. The way I thought about Stepanov’s approach is that he attempts to generalize algorithms and shows how algorithms in many respects can be used as axioms. In other words, generalization is not just merely a time saver, but more crucially is a way to ensure rigorousness.
“Mathematics is a game played according to certain simple rules with meaningless marks on paper.” ~ David Hilbert
In many ways this book is just Stepanov removing the paper. The fact that he uses C++ code is irrelevant. I used Python and Java, without having used C++ in years and it was sufficiently trivial that I could follow along. The Euclidean algorithm(greatest common denominator) is the main tool of Stepanov of this book, may be used too much. Algorithms have existed, as he says for as long as we’ve been doing math. The fact that computers use them is historically new, not the norm. Turns out that mathematicians have developed great methods for analyzing such algorithms and the Euclidean algorithm is used exhaustively in a variety of ways to illustrate both the axiomatic nature of algorithm reuse but also how we might do analysis on such algorithms.
If you’ve read my review for Dijkstra's A Discipline of Programming you might remember the line I said: “abstraction is not a nebulous idea, but how we’re absolutely precise.” That's what what Stepanov, like Dijkstra is trying to get across here. Just because we are reorienting our thinking does not mean we lose rigorousness, in fact it's how we ensure it. I'm taking a lot of Calculus in my undergrad so an algorithm I use daily is the Hessian Criterion or second derivative test, I followed along with Stepanov's writing by implementing that algorithm in SymPy then analyzing it. This is what I recommend you do with this book, don't simply copy his examples and expect to get some kind of understanding through wrought memorization but explore what he’s talking about with your own work. It's much more rewarding and more in line with what I think the author was trying to get across by including the examples to begin with.
"Pursue what you're interested in, keep working hard, pay attention to what's going on around you and be flexible-these are the rules. Sometimes it works, sometimes it doesn't." ~ Nathan Seiberg