Upvoted for the PAIP mention - Any book that can totally shift your conception of what programs can do within the first three chapters has to be up there. I know plenty of CS students from university that currently work writing software (I did Maths) who still look at me like some sort of he-witch whenever I do or suggest something data-driven as a solution to a problem, but it's that book that did it for me - it's almost a shame that the only people of my age likely to have read it are the lone "I code out of interest" types that are always on the look-out for a good mind-bending.
(the greater shame, of course, is that these people are less likely to find a satisfying job in the area than their seemingly uninterested CS-grad friends (grumble grumble))