If you have enough time, try "Structure and Interpretation of Computer Programs": http://mitpress.mit.edu/sicp/ (One of these days I plan to actually finish it :-)