Possible Duplicates:
As a programmer without formal CS training or a CS degree, what am I missing?
How to make up for lack of a computer science degree?
I have 7 years experience as a computer programmer doing high level languages like C#, VB, Java and Ruby on Rails. I know these technologies pretty well, but I got into programming by accident and am totally self taught. I majored in business at university and never took a CS class, so I feel like I don't understand a lot of the lower level concepts like registers, gates, stack, heap, assembly language, algorithms, embedded systems, UNIX, functional languages, and so on.
Are there any good books or online resources that will help me fill in these gaps? The basic CS books I have seen are aimed at people with no previous programming experience at all. The ideal book for me would use the high level knowledge I already have to help explain the low level stuff.