How to Think Like a Computer Scientist Java version http://www.ibiblio.org/obp/thinkCSjav/ Structure and Interpretation of Computer Languages uses a Lisp variation called Scheme http://mitpress.mit/edu/sicp/