This is serious computer science stuff. Not lame javaschool bullshit. If you're really into computer science, and not looking to just be a code-monkey, this is the way to start.
Structure and Interpretation of Computer Programs, free online
http://mitpress.mit.edu/sicp/
meant for entering freshman in CS.
textbooks (should be able to find fairly cheap used):
Sipser. Introduction to the Theory of Computation.
Pierce. Types and Programming Languages.
Kernighan & Ritchie. The C Programming Language.
That covers 3 major areas: theory, programming languages, and systems programming (sorta). Stuff that you might come across in a 2nd or third year CS curriculum.
Of course, some people have more fun diving into code and getting excited about hands-on projects. If you need to learn how to program,
http://www.squeak.org/ is a nice fun GUI environment with a clean language. C is still a good way to get experience with systems-level memory grubbing, though it can be plenty frustrating to beginners. SICP introduces Scheme, which is a nice simple language designed to be easily teachable in a few lessons. If you want to take that style to a much slicker level, try Haskell, which has a great website and community for helping out newbies (but is much more involved than Scheme).
Avoid C++ or Java, whatever the other people in here say. It's just a ticket to code monkey hell. The important concepts are captured elsewhere without all the awful baggage those two carry.