Before deep diving into CS theory, I would go deeper into programming first to better understand how a computer really works. The best intro on this topic I found is "Programming from the Ground Up" by Jonathan Bartlett [1].
"Programming from the Ground Up" starts at the bottom with CPU architecture and goes up from there to how functions work, dealing with files, code libraries, high-level languages, etc. Having a solid understanding here will provide immediate benefits in coding and serve as a strong foundation for some of the other recommended texts.
If you're interested, I recommend buying directly from Bartlett Publishing [1]. Bartlett published the book under the GNU Free Documentation License and there are multiple copy-cat versions on Amazon.
[1] http://www.bartlettpublishing.com/site/catalog/programming-f...