The predicate calculus. I regularly review Predicate Calculus and Program Semantics[1] to increase my fluency in the techniques. I also recommend A Discipline of Programming[2] as a gentler introduction to the subject for those who do not consider themselves particularly mathematically inclined. For me it was a natural progression from doing TDD. I still code test first, but now the structure of those tests and programs is guided by a better understanding of program semantics, greatly increasing my code quality.
[1] https://www.amazon.com/Predicate-Calculus-Semantics-Monograp...
[2] https://www.amazon.com/Discipline-Programming-Edsger-W-Dijks...
A Discipline of Programming
https://www.amazon.com/Discipline-Programming-Edsger-W-Dijks...
For more practical fun, consider Frama-C, SPARK, and Dafny.