One of the first books, along with late Edsger Dijkstra's A Discipline of Programming, to point out the importance of proofs of program correctness. Unfortunately, as I read it I remembered various projects I have worked on, where the specification was at least as complicated as the code itself: maintaining it would have been even worse than maintaining the code.
Good book covering the basics of the formalism underlying programming languages. Although you can probably find most of the content in other books on program semantics. It particulary discusses in detail Hoare Logic.