I especially agree on your last remark, maybe because that's exactly how programming classes were set up at my university. In the first year, we start with functional programming, to give the guys who have been coding in C/Pascal/ a bit of a shock.
This way they find out that there are more ways to program (and therefore more ways to look at a problem) than the imperative or object-oriented approach they've always been using. Add a class in programming techniques to that (using both imperative and functional languages, and implementing some functional algorithms in imperative languages), and you're set.
Besides, I've never officially learned any programming language in all those years at the university (as a Comp.Sci. major!); the teachers expected you to teach yourself a new language if it was needed for an assignment. Worked out fine when I got a job, because right now it means I'm switching programming languages every couple months, and picking them up pretty fast.