I had to read this for class, but it was actually surprisingly palatable. When I couldn’t understand the instructors or follow their logic in class, this book really laid things out in a way that was intuitive to understand. The caveat is, I’ve been working in the computing industry for over a decade now, so I have familiarity with the coding concepts and logic issues that the book is trying to address. In my younger less knowledgeable days, I doubt this would have been an easy read.
Basically, this book tackles the problem of trying to rigorously validate a program’s correctness. Imagine writing spaghetti code in such a way that you lose the ability to resolve all the possible outputs or inputs. Shit keeps breaking, or worse, hacked by someone who was able to find a system state that you didn’t consider. THAT’s basically what this topic is trying to fix, in a nutshell. It is an abstraction of the coding process — a way of thinking about your approach to code — and explains how to think logically to prove that your program works as expected. (Obviously, in practice, environmental factors like an overheating computer can cause issues with your rigorously thought-out and proven computation, but that is a whole other topic in itself.)
Anyway, as a computer/network security practitioner, I kinda dig the treatment this book gave to the topic. There’s a lot of takeaways here.
I feel like I should also give extra brownie points for the old-school font and formatting. Have you ever read science/math textbooks from the 1950s? They’re so much easier to follow than a lot of textbooks these days. I’d say this book had that similar old school feel to it. I loved that.