I find this recent book (sort of available online) by Mark Jason Dominus to be very CS-friendly. The reason: Closures!
The Perl Review: Why did you write Higher Order Perl?
Mark Jason Dominus: [...] But I had a few hidden agenda items as well. The book is about how to use closures, and I think there are too many languages around that have no easy way to use closures. Java, in particular, seems to me to be a giant step back towards the languages of the 1970s.
Two interesting tidbits from the book are:
- The term memoization was coined in 1968 by Donald Michie.
- Data marshalling is so named because it was first studied in 1962 by Edward Waite Marshall, then with the General Electric corporation.
In a previous job, I have done a lot of programming that involves data marshalling, now the term finally makes sense!