Learn you lots of Algebra; then go learn you some functional programming (in particular LISP, HTDP: How To Design Programs and SICP are great for this).
Then I would pick up Randall Hyde's books on "How to Write Great Code" series - he starts out with machine fundamentals (stuff you would typically learn in an Assembly or computer engineering course minus the Assembly).
Then I would learn some type of Assembly (again I recommend Randall Hyde).
Then, IMHO follow @BlackJack's comment of subject matter.
Then I would pick up Randall Hyde's books on "How to Write Great Code" series - he starts out with machine fundamentals (stuff you would typically learn in an Assembly or computer engineering course minus the Assembly).
Then I would learn some type of Assembly (again I recommend Randall Hyde).
Then, IMHO follow @BlackJack's comment of subject matter.
NOTE: I'm a self educated programmer.