Hi and Welcome to Hashnode!
Indeed, very many applications are written in C++ today, so learning C++ will give you a good foundation if you want to develop high-performance software :) While people here can help you with planning your journey, we will not be able to make you a specialist or even get you a job at one of the companies you mentioned. Those you will have to achieve yourself.
Basically, what you might need are
- A good understanding of C++ and how it is different from C. One pitfall is to mix them both up into one program. Decide for either and stay with that decision. For example, if you decide for C++, do not use
printf(), use the much more convenient cout stream.
- Knowledge about new features. At least C++11 is standard today, rather C++14 if you do not have to worry about older compilers.
- Enough practice to just start working without looking up basic language features.
- Some idea about patterns. I really recommend reading the Game Programming Patterns, as game development is all about a good architecture and good performance and the mentioned patterns can be used for anything else, too :)
- In today's day and age, additional knowledge might be good, for example how to do multithreading with atomics, what is a spinlock, how do mutexes work, etc. You might want to use a library like Boost for easy access to threads
- Also important is platform-independence. You do not have to know the exact platform differences, but you should know that it might be quite important to support different operating systems. Don't be scared, there are libraries which abstract the difficult stuff away for you :) And if you feel confident with C++ and OS-APIs, you might try to write a OS-independent wrapper for something yourself. Why not write a file IO library, which works on Windows and Linux?
- Do not only focus on one language. There are many languages with different principles. Try to understand the differences and how to include some interesting principles from some place else into your current project, when you are in need of a solution. Have a look at Rust, for example, which tries to take the place of C++, so you can understand why and what implications that has on C++ and programs you want to write in C++.
How to get them plus the necessary experience is by
- Practicing every day. Never give up. Always learn something new
- You can motivate yourself by working on the project of your dreams. You want to build a game? Why wait? Do it NOW and learn the language in the process. Start with some easy part and expand it further and further! Do not worry about graphics and UX. That kind of stuff can be done later on, when you think you can make it and release your project :)
- Don't be scared to try something completely new and unknown. Expand your horizon. Even if you fail, you will have gained something.
As for getting into one of the mentioned companies, you will have to take a look at vacancies, take a lot of time writing a CV and application which exactly fits the job description. You should make it clear that you are eager to learn and open to move to their location, or some place else if necessary. It is important that they know that you are very motivated, social and stable and that you really like the company. Do not forget to add reasons and descriptions for anything. And try to find a vacancy as jr. developer, because that's the best you can get with only three years of experience. Once you are inside the company, learn, make a name for yourself and when you think you are good enough compared to your colleagues, it's a lot easier to get a new position. Applications inside a company are much easier, so you can grow to your dream job :)