Structure and Interpretation of Computer Programs - Abelson, Sussman, and Sussman
Introduction to Algorithms - Cormen, Leiserson, Rivest, and Stein
The Art of Assembly Language - Hyde
a digital logic book (not sure which is most recommended), and an architecture book (see reply by tftfmacedo)
Modern Operating Systems - Tanenbaum
Introduction to the Theory of Computation - Sipser
Compilers: Principles, Techniques, and Tools - Aho, Lam, Sethi, and Ullman (a.k.a. "Dragon Book")
Programming Language Pragmatics - Scott
A database design book (one that covers Relational Algebra, not just a book on SQL), and maybe a book on Networks. Also, Roy Fielding's paper on REST is both academic and applicable (and more approachable than you'd expect of a Ph.D paper). If you want to go all the way, an undergraduate program usually also has Calculus, Discrete Math, Linear Algebra, and Statistics. Some schools would also require Physics and Differential Equations. I'm sure I'm missing some topics, too, particularly electives.
If you can get through those and the associated problem sets, you'll have a better foundation than most.