http://www.amazon.ca/The-Design-Evolution-Bjarne-Stroustrup/...
and
http://www.amazon.ca/Modern-Design-Generic-Programming-Patte...
are my two favorite books. And then if you aren't happy with these books this stackoverflow link has more books than you could ever want:
http://stackoverflow.com/q/388242/25981
This link from Microsoft is also pretty darn good:
As an account of how a programming language evolves over time with the changing - and often contradictory - needs of its users, it was very interesting.
Some of the stuff I thought was really interesting to work on was unpublishable. I once wrote a paper on how to do abstract syntax trees 30 times better than GCC, and the paper was rejected on two reasons, three reasons. The first was that we had misunderstood C++ . This was me and Gaby Dos Reis, who was the French representative on the standards committee and one of the best people on the standard. Also, he was the shipping manager for GCC. They also claimed it had been done in GCC. I mean, this was totally bogus. And then when we complained they came back and said, "Oh, that's engineering; we're computer scientists." If we had been in engineering for cars and come up with a 32-times improvement of one of the key components of gadget, we'd have been heroes.
https://www.youtube.com/watch?feature=player_embedded&v=Hdp8...
> If you give people the choice of writing good code or fast code there's something wrong. Good code should be fast.