E. Hehner has a course called "Formal Methods for Software Design", which he presents completely openly online (including video lectures, a textbook, solutions, and so on): http://www.cs.toronto.edu/~hehner/FMSD/
I really liked it.
I also liked R. Backhouse's approach to it, encapsulated in two books:
I really liked it.
I also liked R. Backhouse's approach to it, encapsulated in two books:
1) less playful: http://www.amazon.com/Program-Construction-Calculating-Imple...
2) more playful: http://www.amazon.com/Algorithmic-Problem-Solving-Roland-Bac...
If you are looking for motivation, you might also like: http://research.microsoft.com/en-us/um/people/lamport/pubs/p...
-----------------
I found Dijkstra's stuff to be easier to read after I had read books by Hehner/Backhouse, even though chronologically, Dijkstra came first.