I think a good programmer should know at least three languages:
- C or C++
- A scripting language with dynamic typing
You need to know english to be able to communicate with people online. Like it or not, most of programming resources online are in english, and many programming books aren’t translated to every possible language, but very likely there’s an english version.
Personally I also find writing code in english makes more sense, since the language’s constructs are in english already.
C or C++
The reason for C/C++? Pointers, and the general lower level approach than most other languages.
C teaches you to understand how things work on a lower level, and I think that’s a good thing even if you actually don’t have to deal with things like memory management yourself. While you may have to write more code in C to perform a task, it will help you understand other language’s concepts easier in the future, since you already have an idea how things work behind the scenes of higher level abstraction common in today’s languages.
Another thing is pointers. They’re not exactly a simple concept, but if you learn how they work, you won’t have any problems understand how things like value types and reference types work in languages like C#.
A scripting language with dynamic typing
Scripting languages often abstract away the little details of doing something – what might require ten lines in C++ and five in Java, might require just one in a scripting language.
Another thing they often have is more special language constructs, which may allow you to perform tasks faster or in a more intuitive fashion.
They can teach you different ways to achieve the same result. Often they can use regex when you might use string parsing, or might use arrays as a common easy to use data type. You will see that you won’t need to spend five hours writing dozens of classes – just one hour and some quick functions will do the job.
Essentially, they have a different way of thinking compared to strictly typed languages.
The more the merrier
While the three mentioned above can serve as a starting point, I think the more languages you learn, the better you will become.
If you learn some popular languages and perhaps some less known but powerful one, and continue learning new ones that are developed during the coming years, you will learn new tricks and new ways to do things in the ones you’ve known for years.