Once you have mastered one programming language, it is a good idea to branch out and learn some others. Each language is optimized for different things. Knowing multiple will give you a larger set of tools one of which which may solve the problem at hand better than others. Additionally, and more importantly, different classes of languages approach problems very differently. Learning languages from other groups will expand your thinking even if you stick to one language for most of your programming tasks. C++, Java, and C# are all from a similar language class. Languages like Lisp or Smalltalk are not. Learning those requires learning new ways of thinking. Christopher Diggins from Dobbs Code Talk presents a list of languages he recommends learning and what to get from them. If you are looking to expand your horizons, check it out.