These books are arranged from the simplest to the hardest. However, they can be read in any order you feel comfortable with.
How to Design Programs by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shiram Krishnamurthi, available online at http://www.htdp.org/
Simply Scheme: An Introduction to Computer Science by Brian Harvey and Matthew Wright
How to Think Like a Computer Scientist: Learning with Python by Allen Downey, Jeff Elkner, and Chris Meyers, available online at http://www.greenteapress.com/thinkpython/
Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Jay Sussman with Julie Sussman, available online at http://mitpress.mit.edu/sicp/
Design Patterns by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
What not How: The Rules Approach to Application Development by Chris Date
The Algorithm Design Manual by Steve Skiena
Programming Language Pragmatics by Michael Scott
Essentials of Programming Languages by Daniel P. Friedman, Mitchell Wand, and Christopher T. Haynes