Being an Electronics & Computer Engineering major (not Computer Science), I missed out on the fun of functional programming. Having heard it's such a complete paradigm shift away from imperative programming, I had tried to teach myself Scheme, but didn't have a lot of motivation (for actual practical use).
Turns out that (while reading Alexandrescu's Modern C++ Design), template meta-programming is an excellent application! It's indeed a fun, different way of thinking (best for us used to dealing with assembly & C/C++ 99.9999% of the time!).
Just a month before, I was reading Andrew Koenig's Dr Dobbs series and this helped immensely to understand a bunch of concepts on this book. I highly recommend reading these series first, then digging into the book.
So run, don't walk to broaden your horizons!