It’s easy to fall into the language trap, which is to say it’s easy to convince yourself that learning just one more programming language will make you magically more productive.
All you really need to know is one popular language (Java, Ruby, C, Python, etc.) and one emerging language (Erlang, Haskell, OCaml, Lisp, etc.)
It boils down to libraries. Popular languages have libraries for doing almost anything. Emerging languages don’t.* Every library that you can leverage is one less library that you need to design, write, test, and debug from scratch. The widely-known language makes you an effective developer and pays the bills.
The emerging language, on the other hand, expands your brain. It breaks you out of the “the Java way” or “the Ruby way” and allows you to consider more approaches when solving a problem.
Remember the old saying: “No matter how good she looks, somebody, somewhere, is sick and tired of dealing with her shit.” It applies equally well to programming languages.
Of course, emerging languages, in certain cases, have libraries (or functionality) that popular languages don’t. Think Erlang’s parallelism, hot code loading, and distributed message passing, which are amazingly helpful for writing distributed systems like Riak. Or think about Haskell’s robust type system that allows for writing provably correct programs. If you have unique needs, then choosing a lesser-known language is a huge competitive advantage.