If you are well equipped with the four corner languages, you will find that 95% of the rest are just rehashing the same idea in different combinations.
- C – for imperative programming
- Haskell – used for functional programming
- Smalltalk – used for object oriented programming
- Lisp – used for metaprogramming (macros, code-as-data)
If you want to cover most of the remaining 5%, you will probably be needing another set of four languages:
- Forth -> stack driven programming
- APL -> array manipulation algebra
- Prolog -> declarative programming
- Brainfuck -> Turing machines
Either way, the point I am trying to make is that learning languages is almost ambiguous. They reuse large portions of feature sets and syntax from one to another. The key to learn programming, however, is not learning what the features are, but how they are implemented to solve problems.
Remember, programming is not linguistics, it is not about the languages rather it is about problems, their solutions, and rigorous ways of describing them.