Learning any language that requires you to rethink your programming habits is a must. A sure sign is the pace at which you skim through the documentation of a language's core (not library). Fast meaning fruitless here.
My short list would be, in my order of exposure and what were the concepts I learned from them:
- Assembly, C: great for learning pointers and their arithmetic.
- C++: same as C with an introduction to generics, as long as you can stand the incredibly verbose syntax.
- Ruby/Lua: scripting languages, dynamically typed, writing bindings for existing C libraries.
- Python/C#/Java: skipped, these languages look to me as a rehash of notions originating elsewhere with a huge standard library. Sure the whole packages are nice, but you won't learn new concepts here.
- OCaml: type infererence done right, partial application, compiler infered genericity, immutability as a default, how to handle nulls elegantly.
- Haskell: laziness by default, monads.
My €.02.