When do you guys recommend that I learn a new programming language ?
Also, thanks for all the answers.
I learnt a single language when I started programming. After a few years of working with it, it began to dawn on me it was the only language I knew. So I expanded to C# and Python, and today I use at least three major programming languages regularly with experience in many others, some general, some scripting, some domain-specific, and even more software technologies (and I still have much to learn). Yet all this only took me about 3 additional years on top of the time spent learning my first language. It's important to realise that once you've gotten well past the beginner stage in your first language of choice, learning more languages is generally much easier. Knowing a programming language can be roughly broken down into four major knowledge bases:
(1) Abstract programming: understanding infinite loops, conditionals and branches, indirection, abstraction, referential transparency, closures, composability, algorithmic complexity, this kind of stuff, as well as a clear mental representation of how these notions generalize and relate to one another;
(2) Syntax and semantics: understanding how the language's collective keywords and constructs map to those abstract concepts, and knowing them well;
(3) Base utilities: being fluent with the development environment provided by the language to perform concrete tasks like renaming a file or communicating over the network, for Python those are the built-in modules, for C# it's undoubtedly the .NET technology stack, for Java it's its expansive standard library, and so on;
(4) External utilities: being familiar with a number of third-party libraries which are not provided by default with the language, the more you have in (4) the more valuable you are as a developer with that particular language;
Note that (1) does not depend on any specific programming language, and while you will need to add information to it over time, in general, say, 60% to 80% of what needs to go in (1) [in terms of how often you will need it] is learnt within the first two years of messing with your first programming language, and the more you have in (1), the easier learning (2) becomes for any language. Then for your second language you bootstrap (2) and (3) by writing the usual introductory programs suitable to that language (such as hello world, guess my number, hangman game, etc..) and after that it's only a matter of using the language regularly and challenging yourself to keep putting more stuff into (2), (3) and (4). Also, interacting with other programmers is a very good way to build up (4).
Also don't forget that it's not all about learning programming languages. Knowing how to develop an effective workflow is important. Experience in many different build systems and toolchains is also a very important aspect of being a programmer. Knowing how and when to use different languages together to benefit from the strengths of each is also important. Having strong debugging and testing methodologies is critical. There's so much more to being a programmer than just typing code.
All this to say that learning another programming language is not, and should not be, a big deal. Most software developers do it fairly often. If you feel you know enough C++ (is that right?) that you can successfully extend that knowledge to another language without needing to go over the basics again, then go ahead. You are pretty young, so I would personally recommend from experience to spend a few more months honing your C++ skills (have you covered lambdas, for example?) but it's ultimately up to you to make your own decisions. Oh, and this should go without saying but just to be clear: you are not expected to know every language - only learn those relevant to your career and your personal interests. Actively learning for the sake of accumulating knowledge is of no use whatsoever unless you intend to use it, and it often turns you into a jack of all trades but master of none, which is not a good thing for a software developer given the high competition and fast pacing of the industry.