This post is dated, but it contains some classics - and not just in programming either!
For an intro to CS, check out Composing Programs via CS 61A at UC Berkeley. It looks like it's based on SICP, and taught in Python 3.
Although I would've preferred Scheme. Not that language ultimately matters a great deal. It's about understanding the underlying concepts. In this respect, I'd say SICP aka the wizard book is the answer inasmuch as there is a single answer.
As a side note, I hope Berkeley hasn't done what MIT has done (which in many ways seems to mirror how many medical school curricula have moved from traditional to more integrated problem-based learning or PBL):
The discussion has been sharper recently because MIT underwent a major redesign of their lower division EECS curriculum. People outside MIT tend to summarize that redesign as "MIT decided to switch to Python," but that's not a perceptive description. What MIT decided was to move from a curriculum organized around topics (programming paradigms, then circuits, then signal processing, then architecture) to a curriculum organized around applications (let's build and program a robot; let's build and program a cell phone). Everything about their courses had to be reorganized; the choice of programming language was the least of those decisions. Their new approach is harder to teach; for one thing, each course requires a partnership of Electrical Engineering faculty and Computer Science faculty. Perhaps in time the applications-first approach will spark a revolution as profound as the one that followed SICP, but it hasn't happened yet.
(Source)