First off, I’ve never met anyone who has mastered C++. I doubt that even Bjarne Stroustrup is a master of C++, and he made it. There are even serious discussions about whether C++ semantics can be formalized, that is, whether it is mathematically possible.
Anyway, there are five prongs to becoming an expert in computer programming. I’m not going to condescend to you, and I’m not going to suggest anything I haven’t done myself.
The first is becoming an expert in computer programming. The way to do this is to program a lot of different things, a lot. Of all the buzzwords that keep coming out, one of the most useful is “design pattern.” I call this the art of making up names for things you already know how to do, but you can get a lot of good ideas. But mostly, you get to be an expert by doing it. Over and over. Work on free and open source projects. Build your own stuff for fun.
The second is understanding computer science. This is math and logic, but a somewhat unusual kind. Learn Boolean algebra, not just the basics to do logic, but the system by which logic can operate on the algebra itself. Learn algorithms and data structures; objects are pretty much just both in one box. Learn automata and grammars and their relationship to each other. Learn graph and set theory. Learn complexity and optimization and finite math, and a bit of calculus helps, too. These are not simply ways of learning how to program; they are ways of understanding the relationships within programs themselves.
The third is understanding computer engineering and architecture. This is the part that most never do; it seems to be a big leap. Get an Arduino or something and program it in assembly. Learn about basic gates. Wire things up yourself, using chips or relays or discrete components. Learn how software makes the switches go and the electrons flow.
The fourth is understanding people. This goes far beyond UI and UX and whatever it’s called this week. Every program you will ever write involves a person, even if you are the only one. Learn anthropology, sociology, psychology, and cognitive science. Learn literature and poetry and foreign languages and cultures.
Recommended by Forbes
MOST POPULAR Photos: The World’s Top-Earning YouTube Stars 2015
TRENDING ON TWITTER 7 Things That Make Great Bosses Unforgettable
MOST POPULAR Photos: Forbes 20 Best Foreign Retirement Havens For 2015
MOST POPULAR YouTube’s Richest: Behind The Scenes
The 10 Best-Paying College Majors — And Why Business Isn’t One Of Them
Hounded By Recruiters, Coders Put Themselves Up For Auction
Are Programmers In C/C++ More Preferred At Google Than Programmers In Java?
The 10 Cities With The Most STEM Job Openings Right Now
The fifth is understanding bullshit, because you are going to encounter a lot of it. You’ll get a lot in hot new buzzwords and development methodologies. You’ll see things that you think you don’t understand but really do, only you didn’t recognize the name. Learn about how ego works, even (or especially) your own.
If you do these things, you’ll learn things that nobody can teach you, and that is the difference between the expert and the merely competent. You’ll see connections between seemingly disparate things, and your brain will rewire itself. You’ll see underlying principles. You’ll see possibilities that others can’t.
Doing this is guaranteed to make you an expert. However, there is a cost and a caution. Becoming an expert is not necessarily good if you want a career, because most people who hire others aren’t experts and are doing the hiring because they aren’t experts. They’ll look at you funny, and it will be a struggle. Sometimes you’ll wish you weren’t an expert, but you won’t be able to go back.
But if you have already decided to become an expert, here’s more.
As you are doing this, I suggest hamstringing yourself. C++ is a big language with a lot of features, and it’s easy to get lost in how fun it is. But you can’t really appreciate a feature without knowing what it’s like to do without. So do things with limited resources. Make a binary adder using falling dominoes. Make a functional digital clock with neon bulbs, resistors, capacitors, diodes, wires, and a wall plug. Make a Turing machine with LEGO blocks. (Use a crank to run it.) If you’re really ambitious, make some logic using fluidics with a router and some Plexiglas and the nether end of a vacuum cleaner.