Last month, I wrote about my journey to becoming a C++ developer before I was CEO, and it got me thinking. Not everyone’s path will be the same and perhaps others might benefit from some top tips on how to either further their C++ career or get into C++ in the first place.
Here are 11 top tips to get you where you want to be with your C++ career.
Get some real world experience by contributing to open source projects; it doesn’t matter if you create the project or if you contribute to an existing one.
You can either contribute to an already established project through pull requests (PRs), or you can start your own brand new project. For example, on my GitHub profile, most of my open source C++ contributions were on the Synergy project (and that was a long while back), but I also have a project that I wrote in university called ViMRID which is essentially a 3D stereoscopic DICOM file viewer… a bit of a novelty but it was fun to write.
Does the company you’re interested in have a GitHub presence? Open up one of their projects, fix a bug or make a useful change, and send them a pull request. There is literally no better way to get the attention of a team you want to work with than to send them a helpful patch. If you’re already working with them, and they can see how competent you are, why would they turn down the opportunity to talk to you?
The great thing about open source is that it’s almost always public, so you can use GitHub as your resume/CV. Include a link to your GitHub profile on your resume/CV and LinkedIn profile. Any projects (passion project or commercial) should be shouted about, and could make a big difference to your job application.
Let’s talk about Upwork (other freelance platforms are available). It can be a bit tricky getting started in the freelance world. Quite often, there are weird jobs advertised, clients that don’t know what they’re doing, and a whole bunch of other problems that freelancers have to deal with. But, it can be well worth it if you approach it right...
To get the best out of Upwork, pick up a few small jobs and present yourself well. After a while of persisting, you’ll gain valuable experience and build your reputation (via the two-way rating system). As your Upwork rating improves, you’ll find it easier to land new jobs on the platform. Yes, you’ll have to deal with a few time wasters and you might not always get the job you want, but look at the big picture (and remember, as long as you’re professional, you can walk away from jobs if they’re not working out). It might also make it a little easier to only work with clients who are closer to you geographically and/or culturally (until you get a bit more experienced).
Pro tip: When you’re starting out, respond quickly and professionally to client messages; there’s nothing more annoying than a freelancer who takes ages to get back to you. You’ll be competing with more experienced Upworkers that already have a reputation to their advantage, so don’t make clients wait.
Nicola, our Internal Recruiter here at Symless tells me... “I was chatting to someone (a young C++ developer) just yesterday about how to upgrade their CV by picking projects up on Upwork while based out in their little surfing village of St Francis Bay, South Africa. Upwork is a really useful platform for experience building, especially if you’re in a remote location!”
Read this C++ book: Effective C++ by Scott Meyers (or Effective Modern C++ which covers C++14). This book taught me so many fundamental skills and principles needed to be a C++ developer. This is actually where I learned all about const correctness, and other really important topics. What’s great about the book is that it gives you about 50-ish easy to remember rules-of-thumb and why they’re important (plus it’s a fun read).
Fun fact: Instead of aiming to be the first book you should read, Effective C++ was actually written to be the 2nd book on your reading list (so if you’re a total beginner, something like C++ Primer by Stanley B. Lippman et al. might be a better place to start).
But don’t stop there, check out other books as recommended by the Stack Overflow question, “The Definitive C++ Book Guide and List”. Read as many C++ books as you can, it will make a huge difference to your code and will make life easier and more enjoyable (and of course, it’ll make those interview questions much easier too).
My favorite place to ask questions when I was starting out was Stack Overflow (SO). I have asked countless questions on SO over the years. I started using the Q&A site in 2009 and started with the most basic questions, such as “When should I use the new keyword in C++?” Many developers would have been embarrassed to ask such simple questions, but as you can see by how many times that question is starred, I’m not the only one who was asking.
Granted, SO is quite mature now, and all the language-oriented questions may have been asked—which makes it one of the most valuable resources to search when you think of a question—but, there are plenty of new questions being asked that aren’t duplicates. New questions are usually library or technology specific, and are often related to new technologies.
Join Slack communities such as Cpplang; these friendly communities give C++ developers the opportunity to learn from each other. These community groups are also places where you can engage with recruiters and hiring managers. The good ones will be more than happy to have an informal chat over those platforms.
Consider engaging directly with recruiters on Linkedin (either external/consulting recruiters or in-house recruiters at the company you want to join). Recruiters are often very friendly and open to having a quick chat. It doesn’t even have to be formal. A simple message like “Hey, I want to grab a virtual coffee and chat about my career” can open up great opportunities. Worst case, if there are no jobs available at that time, at least you’re now connected so if a future opportunity comes up, you already have a foot in the door.
As well as being a great way to connect, LinkedIn also offers a huge amount of niche groups that anyone can join. This is worthwhile whether you want to learn more about a specific topic, keep an eye out for new jobs (recruiters will be on those groups), or simply connect with members of the community. By joining these groups, you have more access to new content within your field.
“Finding a mentor can be highly beneficial. I know of a developer at Symless who mentors junior developers, as is the case for a few others that I have spoken to.”
— Nicola, Internal Recruiter at Symless
Where do you start with this? Well, the most important thing is to find the right mentor (and know the difference between a mentor and a coach). A mentor is someone who will simply advise through sharing their own experiences (as opposed to a coach who will most likely prescribe exercises for you, which is also an option but it’s a bit more intense and usually not free). First, on your journey to find a mentor, understand what you want to accomplish; set a SMART goal. Then, think about who you look up to (if you can’t connect with that person, try to find someone similar). Is there someone already in your network who you can approach? LinkedIn groups and Slack workspaces could also be a great way to identify mentors by simply reaching out to people in these communities.
When you’re ready to ask someone to be your mentor: Get your elevator pitch nicely practiced; an elevator pitch is a short sentence that describes who you are and what you want to do (seriously, keep it brief, people have short attention spans especially when it comes to strangers). Once you’ve delivered your pitch, mention specifically what you like about their work (flattery will open many doors). Be clear with what you want: ask to set up a video call to have a quick chat to see if you’re the right fit for each other.
Ready for the call? Make sure you have a list of things you want to talk about; put together an agenda for the meeting (but keep it casual and informal). Talk about your goals, share your challenges (e.g. what you want to improve), and try to build a relationship. Make sure you set a date for the next meeting (either during the meeting or very soon after). Monthly meetings can work well, or you could suggest weekly if you’re on a tight schedule.
In your meetings, there are some important things to remember. Feedback (positive and constructive), for some people both can be hard to take onboard, so try to be open minded and allow your mentor to be candid. You don’t have to agree with everything they say, but you do have to listen (try active listening; it will make an enormous difference). Take notes and follow up after your meeting with those notes, so that your mentor knows you’re taking everything on board and it’s a good use of their time. Set and keep boundaries; it’s not therapy and this person may or may not be a friend (and that’s ok). In most cases, your mentor relationship will end at some point, but don’t feel bad, that’s the natural course of things.
Do you have a very niche interest? Don’t let that stop you from digging deeper into it and becoming highly specialized in a specific technology (e.g. embedded systems). You’ll still be learning valuable transferable skills that you can apply outside of your specialization, and if you’re passionate about your niche, it’ll give you something real to focus your efforts on.
Some people are afraid that specialization too early can close doors to other jobs, but this simply isn’t the case. People change specializations all the time, and most software development skills are transferable, especially when it comes to C++.
Take the C++ assessment on LinkedIn. It’ll show potential employers that you genuinely can code C++ and the questions are quite interesting. This puts your skillset into a provable simple format that recruiters can easily grok. Even if you don’t end up sharing the test results with a potential employer (though maybe you should show off your result if you do well), it’ll help to refresh your memory before any potential tests in the interview process.
Pro tip: You can even sign up for a free trial of the same pre-employment test platforms that employers use (such as TestGorilla who have two C++ tests). Other test platforms such as Tests4Geeks are available, though not all of them have a free trial available.
LinkedIn is a powerful way to discover new people and grow your outer-network. It can be awkward to connect with a stranger without someone to vouch for you, so leverage your network and ask for intros. Many people are afraid to do this because it feels like a big ask, but if your connections really care about you, they’ll be more than happy to introduce you to people they know.
Search for people on LinkedIn in your 2nd degree network that you find interesting (e.g. a C++ developer at a specific company or industry if you’re looking for advice) and LinkedIn will tell you which 1st degree connection you know in common. Ask your 1st degree connection for an intro, and you’ll be surprised how many of them respond positively. People like to help! If they don’t reply, don’t be discouraged, they probably just aren’t that active on LinkedIn. In this post-Covid world, online intros can be equally as valuable as in-person intros.
Ok, this one isn’t for the faint of heart, but here’s the thing: if you launch a startup, you may fail to create a profitable business, but that doesn’t matter! You’ve probably heard some kind of horrifying statistic like “half of business fail in the first year”, but that’s not necessarily true. Apparently, only 20% fail in the first 2 years… but these numbers aren’t very important. What’s important is giving it your best shot, getting valuable experience, and not losing too much in the process (ok, easier said than done).
One of our newest employees, Jeffrey Mechielsen (Technical Support Agent at Symless) started his own business, and here’s what he had to say:
"I actually started a business before I joined Symless, it was tough because it was something I had never done before, but it was a fun adventure because I had my own freedom and time to explore markets and different approaches to a job I had done for years before. The experience changed me as a person. I now see a lot more opportunities and it’s made me more engaging towards other people; I notice a lot more events that would normally go past me as opportunities to market or network. Anyway, things turned out great because the team at Symless thought it was fantastic that I had given running a business my best shot, and gained valuable experience being an entrepreneur!"
You never know, founding a startup and failing could be the most successful thing you ever did, as it could lead to you landing your dream job. Or, you end up as a CEO of your own company. Good result either way.
Pro tip: Did you know that you can sell open source software?
My advice with any job (not just C++) is always: if you think you might have a shot, apply anyway. I get it, many people worry about wasting time and energy (either for yourself or the person reviewing applications) and fear rejection. Applying for jobs is really tiring, but like most things in life, it’s simply a numbers game. If you can be persistent, you’ll tip the odds in your favor (but don’t be afraid to adapt if you find that something isn’t working).
Quite often, candidates that apply to jobs won’t actually meet all of the requirements (even the must haves). So here’s a tip, it’s about how you play the numbers game; recruiters and especially hiring managers in most organizations will look past some missing qualifications if the candidate makes up in other areas (and how do you know what those areas are until you start a dialog?). Not only that, as time goes by, if they’re not finding the right candidate, businesses tend to relax their requirements. In some cases, things like experience and even timezone requirements (for remote roles) can be relaxed for the right candidate if the org is keen to fill the role. What I’m getting at here is that job screening processes are far more flexible than candidates ever realize.
The recruiter also may not realize how transferable some skills are; for example, they may not realize that if you’re experienced in library A, and they’re asking for someone with library B experience, you can explain that they’re really not that different and you can easily learn the other (most programming is done through Googling things anyway). The hiring manager will usually know this, but always keep in mind that recruiters very rarely have any software development experience (so make it easy for them).
Also, men and women behave differently when applying for jobs. Women are less likely to apply for jobs if they don’t meet all of the criteria (while it’s not quite as bad as HP and Lean In both suggested, but there is still a bias). Software development job ads are also often written by a man (since it’s a male-dominated industry); unfortunately, men tend to use different styles of writing which can put off female candidates. But remember, the job ad often doesn’t necessarily represent the culture, so try to look past any male-oriented language. What is most interesting, according to LinkedIn, is that while women tend to be more selective in applying to job ads, they’re more likely to get the job when they do apply.
If you aren’t successful, leave the door open, as the idiom goes.
Definition of “leave the door open” : to make it possible for.
"The boss rejected our idea but left the door open for discussing it again next year."
Make sure you leave a good impression so that next time you apply you have better odds. Even if you don’t plan to apply again at that company, things can change and people have surprisingly good long-term memories (especially when it comes to people being a jerk). Nothing makes a recruiter doubt themselves more than when a candidate is super nice to them after being disqualified from a role.
Giving a company a good public sting (either via social media, Glassdoor, etc) might be extremely cathartic (makes you feel good in the moment), but if you take it personally and burn your bridges, you’re ruining your chances forever. Plus, you may not be doing the public service you set out to achieve; other candidates often ignore negative reviews or comments because they’ll think “Oh, that’s just sour grapes.” This makes good general advice for any situation in life really; always sleep on it and don’t become a keyboard warrior (much easier said than done, especially after a Friday night drink).
Be professional; be nice, let it go, and don’t burn bridges.
Good luck!
Nick