I consider myself a beginner-moderately skilled programmer (dabbled in a number of languages now, settling on PHP for web development now) looking to better myself.
I've spent a great deal of time on the stack exchange sites and I often see a lot of programming terminology or concepts discussed that I don't fully understand. What books would you recommend that explain programming concepts that can be applied in a multitude of languages?
I've never fully understood terms like encapsulation, polymorphism, garbage collection etc.
What are some good books for explaining programming concepts that every programmer should understand?