By the way, I can't recommend going out and reading massive textbooks. That might be useful in a vacuum, but in reality you only have so much time. Programming should always be number one on this list; followed by:
-building something completely different than your used to (either in scope, by features, or by language)
-looking at code from open source projects
The main thing: always challenge yourself. When your at the inflection point of your learning curve, do something different. Expanding your boundaries will not only help you learn different technologies, but it will give you a better perspective on your actual specialties.
Some things are better found in books though. I've been reading Lisp in Small Pieces for a while now, and there's some great stuff buried in there. I don't think I would have stumbled upon it just hacking away on toy Lisps on my own.
There might be other places to find some of these things, like other compiler texts or the actual source of some Lisp compilers and runtimes, but books are often laid out in a nice pedagogical way. Reading the SBCL or Racket source would be a steep way to get to some of these ideas.
I would amend your recommendation to say, pick the massive textbooks you read carefully. Don't suffer through big, poorly written books.
The main thing: always challenge yourself. When your at the inflection point of your learning curve, do something different. Expanding your boundaries will not only help you learn different technologies, but it will give you a better perspective on your actual specialties.