Really for most programmers it is a list of 10 books I want to have on my bookshelf so I look important when someone comes over. A list of ten programing books programmers <i>wish</i> they read.<p>Much more useful is the list of "... ten books that I really enjoyed, and that I'd recommend to anyone who's a computer programmer, regardless of their preferred language and platform."<p><a href="http://steve.yegge.googlepages.com/ten-great-books" rel="nofollow">http://steve.yegge.googlepages.com/ten-great-books</a>
"Challenges" is kind of subjective. GEB is really a bit fluffy (as I said in another comment here), and SICP is only challenging if you've never seen a functional language before. PLP is also not particularly challenging as such, but it is a satisfyingly informative treatment of the practicalities involved in implementing a conventional programming language from the ground up.<p>On the other hand, while I've not read all of <i>Types and Programming Languages</i>, it definitely starts to get into some challenging (and very interesting!) material.
<i>Types and Programming Languages</i> was one of the books used for my (undergrad) programming languages course. This article made me feel much less guilty about not actually understanding most of the small amount that we did end up actually reading.