Discrete Mathematics with Applications by Susanna Epp is the one book that I feel took me from simply knowing how to write programs to being a software engineer by filling in the theoretical blanks I had from being self-taught. Discrete mathematics in general is so wonderful and applicable to day-to-day software engineering problems and to me, that book is the best, most coherent, and most thorough one available on the topic.