Functional Programming in Clojure by Eric Normand