I second what Arto says, though my usual go-to site for such things is
MIT OpenCourseware. The material is tough, but still accessible and very well presented on the whole. The introductory EECS material can be found
here.
(Of course, I am biased, as I personally like the older
Abelson-Sussman Lectures, which teach a full course in programming in about 20 hours, using Scheme as the development language. Most people aren't as enthralled by this as I am, however.)
A few books you might want to look into include
Think Python for basic programming,
Assembly Language Step-by-Step for an introduction to low-level programming,
C Primer Plus for the requisite C knowledge,
Linkers and Loaders for the executable file format details, and
Computer Organization and Design (which I would accompany with
MIPS Assembly Language Programming as a reference) for the hardware concepts. That should keep you busy for a couple of years, and be enough to keep your interest going as well. Along the way, you should also learn about source control systems such as
Git and how to use them, how to use a virtualizer such a
VirtualBox, and how to use a basic debugger, among other things.