A Guide to Persuasive Programming in Java by Anil Shende & Jerry Mead