There are many ways to learn, and many ways to implement solutions, as we all know.
Lately I mentioned that I barely knew C++ before I started my first job as a C++ programmer, and someone asked me how on earth that was possible. I also had very little grasp of hardware architecture. I was a programmer whose job it was to create creative installations. I was working in free, open source C++/OpenGL engines (Cinder, Openframeworks) that have plenty of open source sample code online. In addition, my company had built up forks of these engines, customized for the projects we worked on.
I was really successful at it. I was able to build up beautiful, nicely built applications. Within months, I was leading the development of entire projects on my own. I still didn't know how everything worked, but I got good at building things without having that full knowledge.
We always need to do that anyway, right?
As I went forward in my career, I learned about hardware architecture. I studied algorithms, learned the theory behind different methods. I could maybe pass a whiteboarding interview full of C++ algorithms (despite hating every second of it). I got good at writing efficient, neat code. Learned about modern C++ features and different libraries.
I think one of the things that made me successful in the first job was creativity and good communication skills. I was great at communicating with clients and setting up my project so that I could still get it done in a reasonable timeframe. I was great at thinking up creative solutions and brainstorming alternate ways of doing things and collaborating with other teams to make it happen. I got really good at planning and piecing things together and being creative despite not knowing everything about the components.
And looking back, I still use that skillset every day when running my business, and I think despite writing code every day and knowing the importance of that, I'd place this skillset at a higher priority than being a great C++ programmer when looking at candidates. If you have the drive to learn and can push ahead-- if you work well with people and get work done despite not knowing everything now, you'll grow. You'll figure it out.
Sometimes I look at the internet and see a lot of debate about what a great programmer looks like or what the ultimate method for building something is, and I wonder about the social and creative aspects not being discussed. I also wonder whether someone could learn those things quickly, if they were only welcomed into the field more.
A woman told me the other day that she didn't feel adequate because she'd just picked up programming a few years ago, whereas her classmates had been studying it since childhood.
It's absolutely excellent to study something passionately for years. But there's also a lot more to being a great programmer than algorithms and theory and writing code. We need to be great creative problem solvers. We need to figure out how to work with components we don't entirely understand. We need to work with people. We need to figure out which problems we should be solving. You can pick up the C++ as you go.