How much C++ do you need to know to land your first job?
Yes, there’s always more to learn, whether you’re a beginner or a professional with 20 years in the programming business. There’s no magical point at which you can stop studying and learning.
That being said, there are bare minimums when it comes to C++ knowledge; the further you proceed past those minimums, the more likely you’ll end up hired for your first job (and succeed in it). Given experienced programmers tend to get impatient with inexperienced ones, possessing more C++ know-how will likely make your office experience smoother.
Regardless of what language you’re learning, every programmer needs to know some fundamental skills. Databases, for example: Learning some combination of SQL, MySQL and NoSQL can’t hurt, nor can knowing as much as possible about selects and joins. A solid programmer is familiar enough with Linux and Windows to display some command-line and administrative skills, when needed.
Another important thing to know is source code control. These days, most people seem to prefer git, although you still see others such as subversion. Learn as much git as you can; if you’re hired as a C++ programmer, chances are pretty good your new employer will ask you to check out the code, and you’ll definitely want to know how to do that without asking.
Language Specifics With C++
Let’s face it: C++ is not an easy language to learn. Mastering the basics of C++ means you’ve developed some strong skills.
First, learn the basics of object-oriented programming; also know data structures and algorithms inside and out. For example, know how to build a linked list, even though you’ll probably use one that’s part of an existing library.
Mastered those? Here are some more items:
- Learn what stack variables are and how objects can be allocated on the heap; take this to the next level and understand that when you call new, you will typically store a pointer to the object in a variable; the object lives in the heap and the variable lives on the stack. Learn if and when these variables go out of scope. Why is this important? If you return the address of a local variable, you’re going to (a) create bugs and (b) anger other programmers.
- Learn how references truly work, and how they’re different from pointers. Understand how variables are passed in functions, and about passing an entire structure versus passing a pointer to a structure into a function.
- Learn how arrays get allocated with new and delete, and how to create an array that you can safely return from a function.
Got a handle on all of the above? You’re doing well. Here are a few new things to learn:
- Virtual methods
- Virtual destructors
- Operator overloading
- How templates work (functions, classes, and instantiation)
- Correct syntax
- The standard library, as well as Boost (practice them both)
Spend time with professional code such as some of the bigger open source C++ projects on GitHub. This will allow you to “learn from the masters,” so to speak.
Here’s some insight into how many senior developers view entry-level developers: Most aren’t patient with them. They expect the entry-level developers to be so good at coding that they’ll move up to senior level quickly. Senior level developers do not want to hand-hold entry-level developers.
In other words, if you start a C++ job and ask a senior developer what a reference is, the senior-level developer is going to get angry. It’s not that they’re angry people in general; it’s just that they have a job to do… and that job isn’t to teach programming. While they don’t expect entry-level developers to make architectural decisions, they do expect them to be strong, competent coders; they’re also impressed when entry-level developers quickly learn what they need to know and barrel forward on their own.
They say the best time to plant a tree was 20 years ago; the second-best time is today. The same is true with programming: learn everything you can today, with an eye toward the future. While C++ isn’t something that can be mastered in a week, it takes relatively little effort to start mastering its fundamental components.