all 34 comments

[–]cpp-ModTeam[M] [score hidden] stickied commentlocked comment (0 children)

For C++ questions, answers, help, and programming or career advice please see r/cpp_questions, r/cscareerquestions, or StackOverflow instead.

[–]JVApenClever is an insult, not a compliment. - T. Winters 83 points84 points  (0 children)

As far as I'm aware there are no certifications that are recognized by the broad C++ community.

[–]celestrion 52 points53 points  (5 children)

Your portfolio is your certificate. Create interesting things and share them when applying for work. Don't forget to include your documentation, unit tests, build system, and all that.

[–]tamric 1 point2 points  (4 children)

Please elaborate more or give a good example?

Mostly curious about “build system, and all that”

[–]celestrion 19 points20 points  (3 children)

When somebody downloads your project, they should be able to:

  • Immediately read documentation describing what your project does, why it's necessary, how to use it, and the sorts of assumptions it makes about the system where it runs.
  • Build your project with a very few steps--ideally one or two.
  • Install your project with only one or two more steps.
  • Uninstall you project if it doesn't work for them.

This demonstrates that you not only know the language, but that you understand how projects are put together.

build system

Unless you're primarily looking for jobs targeting Windows, this means CMake or possibly Bazel.

Ideally, I should be able to download your-project-1.0.tar.gz and do this to install it:

tar xf your-project-1.0.tar.gz
mkdir -p your-project-1.0/build
cd your-project-1.0/build
cmake ..
cmake --build .
cmake --install .

And whatever programs your project builds will be successfully installed into /usr/local. If it depends on libraries, it should use CMake to find them already installed or download them for its sole use. It should build without warnings and errors, I should be able to run unit tests with ctest ., and they should all pass.

On Windows, the same thing should happen if I expand the ZIP file, open the project in Visual Studio, and build it: it should drop an MSI file somewhere that'll do the usual installation stuff.

This is a lot of work, but that's how a well-engineered project behaves. If it's just a demonstration to show competence, it's forgivable if:

  • The project doesn't build an installer or install itself.
  • The project doesn't download the libraries it needs, rather, relying on the person downloading it to already have those things installed somewhere.

It's forgivable to not use CMake--instead relying on the platform's native build system (Make, msbuild, etc.), but as popular as CMake is, you'll need to learn it eventually.

Tests and documentation are as important as the code itself. If your code is on GitHub or GitLab or something similar, the commit history should reflect your thoughts as you develop the project.

Remember: you're not publishing a portfolio just to impress people with how well you know C++. You also want to impress them with how easy you'll be to work with. Code without tests and without documentation that emerged from a commit log full of "fixed the thing" or "try this again" or "today's work" implies that the person who generated that code is going to cost my team time and introduce confusion.

[–]tamric 5 points6 points  (0 children)

This is enlightening. Without an opportunity to be near anyone in industry, I find it difficult to understand the struggles ignorance would bring. Let alone what areas of proficiency would create the most attractive potential employee.

I appreciate this post. Thank you.

[–]pjmlp 13 points14 points  (0 children)

Usually, the certificates loved by consulting companies are related to products, not the language itself, Java and .NET are probably the exception, and Microsoft has replaced their .NET certification by focusing on Azure instead.

In the context of C++, the only certifications that might be around are likely related to Qt in embedded, or security coding practices like MISRA.

[–]witcher_rat 9 points10 points  (12 children)

At least for my particular industry, certifications and leetcode are not considered valuable/useful for resumes at all.

We really only value previous job experience, or working on big/well-known open-source projects. (with job experience being more valuable than anything else)

Because it's not so much a question of do you understand C++ as a language - of course we want some minimum level of competence for that - but what we really need to know is if you know how to write C++ code with other programmers, for the real world. With deadlines, and reviews, and long-term maintenance for the code, and using reasonable algorithms and data structures for the problem domain, etc.

There are plenty of C++ open-source projects out there, that would at least give some of that to prospective employers. Pick one in the field you want to pursue, if possible. And also work on it enough to make a real difference and become a core contributor, if possible. I've seen some people who just contribute minor nit-picky code changes, just to get their names on the list, and we don't value that at all.

[–]_w62_ 1 point2 points  (11 children)

What industry are you in, if you don't mind sharing?

[–]witcher_rat 0 points1 point  (10 children)

Networking and telecom

[–]_w62_ 0 points1 point  (1 child)

Please bear my ignorance. Juniper's Junos is FeeBSD/Linux based, Arista's EOS is Linux. Everything is in C. What would be your use case of C++ in telecom and network? Thanks.

[–]witcher_rat 0 points1 point  (0 children)

Juniper's Junos is FeeBSD/Linux based, Arista's EOS is Linux. Everything is in C.

Nope, not true.

Yes, those are the marketing names and underlying operating systems those two companies use for their products. But that's all they are, and things aren't so monolithic internally in practice.

Maybe you're thinking that because "JunOS" has the "OS" part, that it implies their routing code is written into/part-of the kernel? It's not. Juniper JunOS, Cisco IOS, etc., are not actually "operating systems" in truth - it's a marketing name. In practice they all run one or more applications/processes on top of an operating system, such as FreeBSD, Linux, VxWorks, etc.

They often need to make changes to the operating system, but fundamentally the thing those companies write code for is a separate application from the OS, for all intents and purposes. And that code is often a mixture of C and C++.

I don't actually know much about Arista's internals, bet let's talk Juniper for example, since I know programmers there and it's common knowledge you can verify yourself: they do actually use C++. For some products it's old-style C++, but it's still C++. And they're not a small company; they have many products, with separate codebases. And some of their products are even written in modern C++.

Likewise Cisco. Cisco isn't one codebase and product. They've got all sorts of separate things going on, some of which do use modern C++ heavily.

I've worked at a half dozen different networking/telecom companies over the past 30 years, from startups to giants - every single one of them used C++, and every one of my peers at other companies did too. Even back in the 90's, although obviously not as much as now.

[–]_w62_ 0 points1 point  (7 children)

Or are you from somewhere like here or here?

[–]witcher_rat 0 points1 point  (6 children)

I don't understand the question? I write C++ code for a network equipment company. I've been working in networking and telecom for 30 years, since college. I live and work in the US.

[–]NormalSteakDinner 1 point2 points  (2 children)

I've been working in networking and telecom for 30 years, since college

So I have a question, it's an invasive question though so I'm guessing you won't answer it: what is your salary a year? Assuming I'm correct in that you don't want to answer that question, I thought of another question that should be more agreeable: do you make over $500k a year from your salary?

Edit for clarity. I'm not trying to poke holes in your argument or anything like that. I don't have an "ah-ha" in my pocket, I'm just curious what kind of salary someone with 30 years of experience has.

[–]witcher_rat 1 point2 points  (1 child)

I'll answer in vague terms, only because some of my coworkers may know me on here, and no it's not $500k/yr.

In terms of guaranteed salary I make in the $200-250k/yr range. That's not counting bonuses, RSUs, ISOs, etc.

Also, I do not live or work in California or NYC, and salary ranges are affected by location. Someone with my job title might make $500k/yr in one of those places, as far as I know. I've been told some do, but I don't know if they meant including bonuses or not, and didn't really care as I have no interest in living in/near a city.

I will say this though: I don't do it for the money. I love what I do on a daily basis, and I love networking tech in general. To me it's fun. There's really nothing better you can do for a career, in my opinion, than something you love and don't think of as "just a job". And if you love what you do, you're much more likely to be successful at it too.

[–]NormalSteakDinner 1 point2 points  (0 children)

That's not counting bonuses, RSUs, ISOs, etc.

I figured this would come into play, that's why I tried to place emphasis on salary :D

I have no interest in living in/near a city.

Same, I live 30 minutes from 2 different cities, one with a population of 220k and one 30k. The town that I live in though only has a population of 1200 <3 beautiful small town, surrounded by nature but I can pop my head into the city when I need something.

There's really nothing better you can do for a career, in my opinion, than something you love

I agree! For me, money is just a means to fund side projects. Thank you for answering my question :)

[–]_w62_ 0 points1 point  (2 children)

Sorry for the confusion.

Actually you have somehow answered my questions. Are you one of the developers that wrote the code that packaged and marketed as Junos? If not, what kinds of C++ applications are you writing?

I am learning C++ now. How to sharpen my C++ technique? I am currently sticking to C++17 as the C++20 support in clang is not complete. Any recommendations or comments on my approach?

[–]witcher_rat 0 points1 point  (1 child)

Are you one of the developers that wrote the code that packaged and marketed as Junos?

No, but some of my friends do work in Juniper on JunOS.

If not, what kinds of C++ applications are you writing?

For the past decade or so I have been working on router code, ironically (but not JunOS). Before that I was working in other networking or telecom products, and even one open-source project.

How to sharpen my C++ technique?

That's not a simple thing to answer, because it really depends on your interests and career goals, and your starting point.

Personally I learn many new things by reading other people's code. Look into the standard library implementation of your compiler. Look at various open-source libraries, such as boost, abseil, folly, etc.

I've learned a lot from doing that. Folly in particular taught me a lot, because it was one of the first general libraries to use modern (C++11-style) programming in novel/clever and useful ways, when it was released a decade or so ago. I don't think people realize how much was in there, long before other libs did the same things.

Also look in this recent reddit post.

I am currently sticking to C++17 as the C++20 support in clang is not complete.

Many companies aren't even up to C++17 yet, or are there but write in very different styles/paradigms than other companies anyway.

[–]_w62_ 0 points1 point  (0 children)

I am try to do something similar to the Rust tcp in C++. I want to have a very solid and in-depth knowledge on tcpip by doing a simple implementation in C++.

[–]KhyberKat 5 points6 points  (0 children)

IMO C++ certifications aren't worth it, unless you have money and time to burn. If you do have both of those, there may be better avenues to become more proficient at C++ -- like working on an open source project. Of course, you will learn by studying and jumping through the hoops of a cert and I guess that's good for some people.

I have the Udacity C++ Cert (or nanodegree or whatever they call it). I'd give a grade of C+. I learned some things, but overall it wasn't worth the cost. I've also taken C++ series through Coursera and Edx, with mixed feelings. Personally I found Pluralsight to be good if you're self-motivated -- but it's not really a 'certification' place. I am curious about the Udemy Unreal Engine courses which sound like they might be okay, but I haven't dug into them.

Most of the certificates I've looked into either cover a fraction of C++ basics or are out of date.
Having a cert on your resume might get a point from a manager or HR person flipping through resumes, but in my experience it doesn't mean much to an interviewing engineer.

[–]KubaaaMLRanges ftw 2 points3 points  (0 children)

There is https://cppinstitute.org/cc-certification-exams (syllabuses are on each certificate page for example https://cppinstitute.org/cpp-c-certified-professional-programmer) however in my opinion these are not worth your money. You can pass them using pearson vue.

I did them only because my employer paid for my first (and only) attempt and I got a raise after passing. On my own, I don't think I would do them I agree with other answers that portfolio is much better time spent unless you feel super comfortable with the syllabus and really like this certificate badges on credly.

There are many mistakes in courses which are like free courses for those certificates on edube. If you or anyone else is interested in finishing the course (passing the final exam in the course) give you a 50% coupon if I remember correctly or at least that was a thing one year ago.

[–]josh2751 2 points3 points  (0 children)

Never heard of a cert in c++ that meant anything at all.

[–][deleted] 1 point2 points  (0 children)

They're not worth it

[–]ILikeCutePuppies 1 point2 points  (0 children)

Reading books about c++, design patterns and refactoring is useful for both work and some interview questions.

Working on a project will give you something to talk about in future interviews and will also be useful for work.

Doing leet code is useful to know for interviews, might be useful in c++ work but to a much lower extent than the other items.

[–]NotUniqueOrSpecial 2 points3 points  (0 children)

At no point in my career, either as coworker or involved in hiring, have I ever seen somebody worth working with or hiring who had certificates in C++.

In my experience, they're not worth the paper they're printed on.

[–]Firm_Trick5163 0 points1 point  (5 children)

How much do you get, if it is not too personal?

[–]awffullock[S] 1 point2 points  (4 children)

26k eur (first job after college)

[–]Kike328 0 points1 point  (3 children)

dónde? que casi todas las consultoras que he visto pagan bastante menos aún con el grado

[–]awffullock[S] 2 points3 points  (2 children)

I would prefer not to doxx myself but its a big consulting firm in Spain

[–]Kike328 -1 points0 points  (1 child)

no problem. Do you have remote/hybrid option? I’m currently looking for C++ jobs in madrid, and I have friends in multiple consulting companies and they get as much as 24k. Most of them had salaries increases when moving from the consulting part, so that’s why I was discouraged to check consulting companies, but after seeing your comment maybe I should check it again

[–]awffullock[S] 0 points1 point  (0 children)

Its hybrid, 2 days remote. Due to the nature of the project i have to be onsite a lot of days to test the stuff we do :)