I would say:
- C or Assembler to understand how the processor work.
- Smalltalk (or C#, Java, Python, Ruby, etc) to understand object oriented programming.
- Lisp (any Lisp, Scheme, Common Lisp, Clojure) to understand high level programming, meta programming (macros), etc.
- Haskell to understand type inference and other functional concepts.
If you are into distributed systems, I'll consider learning Erlang too. Those are the language I recommend learning, even if only superficial, only for the sake of learning even if you never use them to write a real application.