Books
A mathematically oriented approach to practical programming with an emphasis on abstraction via mathematical generalizations.