C and C++ Developers Key Skills Set Requrements
What tools and techniques should a C or C++ developer be familiar with?
Probably the most important thing for a C developer is to have an understanding of is pointer arithmetic and what constitutes undefined behavior. In addition, a C developer should be comfortable with using debugging tools such as Address/Memory/UndefinedBehavior Sanitizer, Valgrind, debuggers (e.g. GDB), and static code analysis tools.
A C++ developer should be able to understand all of the C tools as well as the Boost and Qt libraries, well enough to be able to use them.
Beyond that, when looking at a developers experience, commercial and open source projects say the most about what they are capable of.
How to verify C and C++ developer skills in the screening phase
Technical interviews are expensive and time consuming for you and your candidates. You don’t want to interview everybody who applies. Instead, it is important to screen your candidates so that the only ones who make it to the interview stage have the technical skills needed for the job.
RECOMMENDED READING: Complete C++ developer salary data
4. Screening a C developer or a C++ developer using their resume
The resume is the first place that you can look to find clues about what your candidate can do. For a non-technical recruiter, this can often be a difficult place to start as the information is often highly technical. To help you out, we’ve put together a list of things to look for on a C and C++ developer’s resume.
4.1 C and C++ glossary for technical recruiters
C librariesThe C Standard Library
- The library described by the C standard document, shipping with each compiler
Other, less universally used, but still popular libraries:
GTK
- A library for creating graphical user interfaces
Cairo
- A 2d graphics library
ALSA
- A library to interface with Advanced Linux Sound Architecture
BLAS
- Basic Linear Algebra Subprograms. This library is used for efficient vector and matrix operations
GMP
- GNU Multi Precision. A library providing for arithmetic operations on arbitrary-precision numbers
cURL
- The multiprotocol file transfer library. Most commonly used for HTTP communications
OpenSSL
- A commercial-grade and wildly popular library used for cryptography support
C++ LibrariesThe C++ Standard Library
- The library described by the C++ standard document, shipping with each compiler
Boost
- One of the most popular libraries for C++, a set of several dozen disconnected libraries that can be freely used in C++ programs
Qt
- The go-to GUI framework for C++
STL
- A controversial acronym, which usually means C++ Standard Library, but is understood as Standard Template Library, as if the non-template parts weren’t a part of it
Other, less universally used, but still popular libraries:
Eigen
- C++ template library for linear algebra (matrices, vectors, numerical solvers and related algorithms)
GSL
- Guidelines Support library implementation, recommended by Bjarne Stroustrup, Herb Sutter, and Co. in C++ Core Guidelines
Loki
- design patterns
Folly
- A set of C++11 components extending the standard library. Designed with efficiency and practicality in mind. Developed by Facebook
Abseil
- A collection of C++ libraries extending the standard library. Created by Google
POCO
- A set of libraries supporting HTTP, networking, encryption and zip file support
WxWidgets
- A library allowing the creation of system-independent GUI applications
OpenCV
- A computer vision library, designed for computational efficiency with a focus on real-time applications
OpenMP
- Less of a library, and more of a specification for compilers how to extend C++ to allow simple and well-designed parallelism
IntelTBB
- A template library for task parallelism. Designed by Intel
CompilerThe tool used to create an executable (an application) from the C/C++ source, most popular:
- GCC – GNU Compiler Collection
- MinGW GCC – Windows version of GCC
- Clang – Compiler by the LLVM project
- MSVC (also called, somewhat incorrectly, MSVS or Visual Studio) – Microsoft’s Compiler
- ICC – Intel’s compiler
DebuggerA tool to find bugs in running programs
- Valgrind
- GDB
- LLDB
- WinDBG
Code instrumentationThis is an extension to the compiler to produce an application version that is aimed at finding bugs instead of performance
- Address/Memory/UndefinedBehavior Sanitizer
Static analysisAn analysis of the source code in terms of bugs. Commercial software exists that can find some classes of bugs this way
- CppCheck
- Clang
- Klocwork Static Code Analysis
- PC-Lint
- Coverity
- PVS-Studio
4.2 The most common C and C++ technology names that are used interchangeably
- The C++ Standard Library and STL are sometimes used interchangeably, but not correctly
4.3 The different versions of C and C++
Versions of C
Versions of C are labeled with the year they were released (e.g. C89 is C from 1989). There are no in-between versions (e.g. C06), but some may refer to pre-C89
The most popular revisions are:
- C89
- C95
- C99
- C11
- C18
- C21 (not published yet),
- ANSI C
Versions of C++
Versions of C++ are labeled the same way as versions of C with the year they were published.