How important is C in technical interviews

C and C ++ Developer Skills screen

C and C ++ developers don't get the same buzz as developers of other languages. They are not as ubiquitous as JavaScript developers are. They're not as well connected to hot topics like data science as Python developers are. They don't use technology as emerging as Kotlin developers. But unlike the technologies that are all making the headlines, C and C ++ are still the workhorses of many essential systems as well as areas such as embedded technology and gaming. As a result, there is still a great demand for C and C ++ developers. So the question arises, how can you test the skills of C and C ++ developers?

C and C ++ have been around for a long time, so there's a lot to learn about them. There are different versions, technologies, and resources designed for these tech stacks. You have to use specific C and C ++ interview questions as the ones you use for languages ​​like Java just aren't enough. There are concepts that you just won't see outside of C in C ++. Additionally, you need the right tech screen to see if someone has any C or C ++ knowledge. But don't worry, this post is going to tell you everything you need to know about screening and hiring C and C ++ developers.

In this guide you will find:

1. What is C and what is C ++?

The first thing you need to understand is that C and C ++ are not the same thing. As you can imagine, C has been around a bit longer than C ++. Introduced in 1972, C became the de facto standard by the end of the decade. The first C ++ version did not appear until 1984. But here, too, it only took 10 years for it to gain acceptance. In the early 1990s, C ++ had become very popular.

1.1 What is the difference between C and C ++?

For one, C is a procedural language. C ++, on the other hand, is a multi-paradigm language. It is ideal for procedural and object-oriented programming. In addition, new features make them a convenient choice for functional programming. In most real-world cases, C ++ programs will use all of the available programming paradigms to some extent. In fact, you often become onell three paradigms mixed together.

The programming paradigms aren't the only difference between the two. C is pretty close to the machine level and is sometimes referred to as the "portable assembler". C ++, on the other hand, is closer to high-level languages ​​like Java, C #, and D (although it still retains some of the low-level functions of C).

1.2 What is similar in C and C ++?

Aside from these differences, there are of course some similarities. The syntax used by these two languages ​​is often referred to as "C family syntax". In fact, because C was so popular, you'll find that C grammar and syntax is a foundation for a number of programming languages ​​including Java, C #, C ++, D, Objective-C, JavaScript, and many more.

2. What are C and C ++ used for?

2.1 What is C used for?

Because they're so close to the machine level, C and C ++ are mostly used for applications where processing speed and manual tuning are more important than development time. This includes low-level programming (BIOS), embedded programming (devices), system programming (operating systems), and performance-oriented programming (e.g. game engines, GPU / scientific calculations, cryptography).

The real advantage of C and C ++ is that the programmer has the ability to tell what is happening to the program at the lowest level, closest to the machine level. On the one hand, this gives C and C ++ an incredible performance. The downside is that there is much less fault tolerance to get the code right since they lack the memory management functionality of higher level languages. In practice, this means that it can take much longer to write working code in C and C ++ than in a high-level language like Java or Python.

Because C is so close to the machine level, it is essentially the lingua franca of the programming world. Most other programming languages ​​are built on C, and most software exposes its functions in C. Almost all other languages ​​can call C functions.

At a basic level, C is pretty easy to learn. Its syntax and grammar are pretty easy to learn the basics but difficult to master. In contrast to other languages, C lacks the tools to do the work for a developer that he would normally like to avoid.

2.2 What is C ++ used for?

C ++ was developed in part to solve some of the low-level problems of C while maintaining the C programming style. Unfortunately, this has made the learning curve for C ++ incredibly steep and it is a much more expert-friendly language. This can make it even more difficult to use someone else's code base. It is helpful that the new versions of C ++ enable safe and easy entry into a foreign code base. Still, it's up to the coding team to avoid using the unsafe constructs and enforce the rules.

C ++ used to be an extension of C, but it hasn't been since 1998. It is now a very distinct language. Most C code can be compiled in C ++ without modification, but neither language is a strict subset of the other. However, the gap between the two languages ​​continues to widen as new standards are published.

2.3 What is the difference between C and C ++?

C ++ allows most C constructs and codes to be compiled as C ++ code, and at the same time offers more programming tools such as templates, RAII (Resource Acquisition Is Initialization), classes, lambda expressions, a larger and more powerful standard library and a stronger type system.

At the same time, C has some tools that C ++ lacks. This includes Designated Initializers and Variable Length Arrays (VLAs). A general rule of thumb is that if you have a C ++ environment, then you can be one hundred percent sure that you have a C environment. The opposite is not necessarily the case.

3. What should an IT recruiter know about C and C ++?

C hasn't changed in a long time. The last two revisions, C11 and C18, were both pretty insignificant and did not offer any major changes. The future C21 does not seem to be groundbreaking either.

C ++, on the other hand, is starting to make headway after not much has changed in the past decade. A revision has been published every three years since C ++ 11, with C ++ 20 expected on time.

Almost all libraries available provide a C API or binding, even if they are written in a different language. C ++ can be used for all of these libraries. There are also some pure C ++ libraries like Boost, Qt and POCO.

3.1 What tools and techniques should a C or C ++ developer be familiar with?

Probably the most important thing for a C developer is an understanding of pointer arithmetic and what constitutes undefined behavior. Additionally, a C developer should be familiar with the use of 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.

In addition, commercial and open source projects say the most about what a developer can do.

How to verify the skills of C and C ++ developers in the screening phase

Technical interviews are expensive and time consuming for you and your candidates. You don't want to interview every applicant who applies. Instead, it's important to screen your applicants so that only those who make it to the interview have the technical skills required for the job.

RECOMMENDED READING: Complete Salary Data for C ++ Developers

4. Screening a C developer or a C ++ developer based on their résumé

The resume is the first place you can find clues about what your candidate can do. For a non-technical recruiter, this can often be a difficult start as the information is often very technical. To help you out, we've compiled a list of things to look out for on a C and C ++ developer's résumé.

4.1 C and C ++ glossary for technical recruiters

C librariesThe C standard library
  • The library described in the C standard document that is shipped with every compiler

Other, less universally used, but still popular libraries:

GTK

  • A library for creating graphical user interfaces

Cairo

AS A

  • A library for connection to the Advanced Linux Sound Architecture

BLOW

  • Basic subroutines of linear algebra. This library is used for efficient vector and matrix operations

GMP

  • GNU Multi Precision. A library that enables arithmetic operations on numbers with any precision

cURL

  • The multi-protocol file transfer library. Most commonly used for HTTP communication

OpenSSL

  • A commercial and widely used library to support cryptography
C ++ librariesThe C ++ standard library
  • The library described in the C ++ standard document that is shipped with every compiler

Boost

  • One of the most popular libraries for C ++, a set of several dozen unrelated libraries that are freely used in C ++ programs

Qt

  • The ideal GUI framework for C ++

STL

  • A controversial acronym that usually means C ++ Standard Library, but also known as Standard template libraryas if the non-template parts didn't belong

Other, less universally used, but still popular libraries:

Own

  • C ++ template library for linear algebra (matrices, vectors, numerical solvers, and related algorithms)

GSL

  • Guidelines support for library implementation, recommended by Bjarne Stroustrup, Herb Sutter and Co. in C ++ Core Guidelines

Loki

Folly

  • A set of C ++ 11 components that extend the standard library. Designed with efficiency and practicality in mind. Developed by Facebook

Abseiling

  • A collection of C ++ libraries that extend the standard library. Created by Google

POCO

  • A range of libraries to support HTTP, networking, encryption, and zip files

WxWidgets

  • A library that enables the creation of system-independent GUI applications

OpenCV

  • An image processing library designed for computational efficiency with an emphasis on real-time applications

OpenMP

  • Not so much a library as a specification for compilers on how C ++ can be extended to allow simple and well-designed parallelism

IntelTBB

  • A template library for task parallelism. Developed by Intel
CompilerThe most popular tool used to create an executable (an application) from the C / C ++ source code:
  • GCC - GNU Compiler Collection
  • MinGW GCC - Windows version of the GCC
  • Clang - Compiler of the LLVM project
  • MSVC (also, somewhat incorrectly, called MSVS or Visual Studio) - Microsoft's compiler
  • ICC - the compiler from Intel
DebuggerA tool for finding errors in running programs
Code instrumentationThis is an extension of the compiler to produce a version of the application that is focused on bug-finding rather than performance
  • Address / Memory / UndefinedBehavior Sanitizer
Static analysisAn analysis of the source code for bugs. There is commercial software out there that can find some classes of errors 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 the STL are sometimes used interchangeably, but not correctly

4.3 The different versions of C and C ++

Versions of C

Versions of C are marked with the year they were released (e.g. C89 is C from 1989). There are no intermediate versions (e.g. C06), but some may refer to pre-C89

The most popular revisions are:

  • C89
  • C95
  • C99
  • C11
  • C18
  • C21 (not yet published),
  • ANSI C

Versions of C ++

The versions of C ++ are labeled with the year of their release in the same way as the versions of C.

The most popular revisions are:

  • C ++ 84 - not a real revision, but is sometimes used to define the C ++ pre-standard
  • C ++ 98
  • C ++ 03
  • C ++ 11
  • C ++ 14
  • C ++ 17
  • C ++ 20 (not yet published)

You can also see the names the versions were given during their development.

  • C ++ 0x (work-in-progress name for C ++ 11 that should be shipped before 2010)
  • C ++ 1y (work-in-progress name for C ++ 14)
  • C ++ 1z (work-in-progress name for C ++ 17)
  • C ++ 2a (work in progress name for C ++ 20?)

4.4 How close the respective versions of the C and C ++ technologies are to one another

  • C11 / C18 - almost identical
  • C ++ 98 / C ++ 03 - almost the same
  • C ++ 11 / C ++ 14 - minor changes
  • C ++ 14 / C ++ 17 - minor changes (but enough to make the difference between C ++ 11 / C ++ 17 significant)

4.5 Which versions are completely different?

  • C ++ 03 / C ++ 11 - the biggest change in the history of C ++
  • C ++ 11 / C ++ 17 - step-by-step change via revisions
  • C89 / C99 - Major changes related to type safety and legacy problem code support

4.6 How important are C and C ++ certificates for assessing a candidate's programming skills?

There are no recognized C / C ++ certifications. Hence, it is best to ignore them on a resume as they do not say anything about the applicant's skill level.

4.7 Other things to look for in a C or C ++ developer's résumé

Make sure that the candidate:

  • Indicates the version of the language they were using
  • Worked on a typical C ++ project
  • Has participated in large projects that faced unique and stringent requirements

In addition, technical interviews can evaluate the candidate based on his publicly visible history, if the following points are mentioned

  • Speaking at conferences
  • Participation in conferences
  • Writing articles for professional journals
  • Write a technical blog
  • Contribution to OSS
  • Contribution to response pages (e.g. Stack Overflow)

5. C and C ++ interview questions for a technical telephone / video interview

It can be quite difficult to rely solely on a resume. Finally, it is important to review the candidate for their claims to see if they actually have the skills or are just claiming to have them. While a telephone interview is not a substitute for a proper coding test, it can help you understand how the candidate thinks and how they solve problems.

5.1 Questions about the applicant's experience

Q1: (C / C ++) What were the limitations for your previous projects?

Why you should ask Q1: The candidate should be able to share their experience of the given industry. For example, in embedded programming it is difficult to use dynamic memory, and in games it is very important that all calculations are completed by the time a frame is rendered.

Q2: (C / C ++) For which systems did you program?

Why you should ask Q2: In some ways the programming for Embedded / Desktop and Linux / Windows / OSX is very different.

Q3: (C / C ++) Did you stick to certain standards while coding?

Why you should ask Q3: The candidate can tell you whether he or she has experience with MISRA etc.

5.2 Questions about the candidate's knowledge and opinions

Q1: (C ++) What are the main differences between C ++ and C?

Why you should ask Q2: With this question the candidate can show his understanding of the languages ​​and also whether he sees C ++ as a small addition to the C language or as a separate language with different usage patterns.

Q2: (C) What is pointer arithmetic?

Why you should ask Q2: This is especially true for C. This question allows the candidate to express their understanding of the basic way C handles memory.

Q3: (C ++) What is pointer arithmetic?

Why you should ask Q3: This question gives the candidate a chance to express their understanding of the basic way C handles memory. Caution: For C ++, this question implies the use of unsafe and outdated patterns in your code base.

Q4: (C ++, entry level) What is the difference between a class and an object?

Why you should ask Q4: To determine if the candidate understands the basics of C ++.

Q5: (C ++) What is a lambda expression?

Why you should ask Q5: Determine if the candidate knows and understands the progress C ++ has made since C ++ 03 (lambda expressions were introduced in C ++ 11).

Q6: (C / C ++) What are locks, what problems do they solve and what are the potential problems with them?

Why you should ask Q6: This shows the candidate's understanding of locks, race conditions, deadlocks and livelocks.

Q7: (C / C ++, expert) What is volatile and how does it relate to the question of locking and synchronization?

Why you should ask Q7: The candidate should be able to explain that volatile should only be used to access the hardware and not for synchronization.

Q8: (C ++) How would you create a dynamic array?

Why you should ask Q8: This will show if the candidate is using a good approach, like std :: vector, or the deprecated and insecure new one.

Q9: (C ++) What is RAII? Is it also available in other languages?

Why you should ask Q9: This will show whether the candidate knows this basic C ++ idiom and understands what it means. Bonus points for describing similar optional functions in other languages, like using () in Python or using in C #.

Q10: (C ++) Can you throw out a destructor?

Why you should ask Q10: The candidate will be able to go into detail here. The bottom line is: you can, but it's bad practice and it's been disabled by default since C ++ 11 because destructors then implicitly notrow.

Q11: (C ++) Can you inherit a constructor?

Why you should ask Q11: The candidate can provide information that this has been possible since C ++ 11, that the functionality in C ++ 14 has changed slightly and what effects this change has.

Q12: (C ++) Can you have a virtual constructor?

Why you should ask Q12: The short answer is no, but the candidate can show quick thinking by mentioning the factory and prototype samples.

Q13: (C ++) What is an interface?

Why you should ask Q13: This is kind of a trick question because C ++ has no interfaces. However, it has abstract classes and the candidate is supposed to talk about them.

Q14: (C ++ Expert) Can you have an implementation of a purely virtual function?

Why you should ask Q14: The answer is yes, but its usability is limited.

Q15: (C ++ Expert) Can you have a virtual template function and why?

Why you should ask Q15: The candidate can understand the distinction between compile and runtime and implementation details such as vtables.

Q16: (C ++ Expert) How would you implement std :: is_same?

Why you should ask Q16: The candidate will be able to demonstrate their metaprogramming knowledge by implementing this trivial example.

Q17: (C / C ++) What is your favorite change (or series of changes) in Cnn/ C ++nn?

Why you should ask Q17: To show if the candidate is keeping up with changes in the language (s) and if they are aware of the slightly different programming language in different versions of the language.

Q18: (C ++) What are the differences between C ++ 98 and C ++ 11

Why you should ask Q18: C ++ 11 was a big change in the C ++ language, its paradigms and patterns. The candidate will be able to demonstrate their knowledge of this major change.

Q19: (C / C ++) How would you discover and fix a memory error?

Why you should ask Q19: Present the thought process, knowledge and tools that are helpful in doing so.

Q20: (C / C ++) Do you have experience with custom allocators?

Why you should ask Q20: The candidate can share his / her experience with custom referrers.

Q21: (C / C ++) You have Framework / Library X on your resume, describe your experience with it. Was it a good choice? Is there an alternative that you preferred or would now prefer?

Why you should ask Q21: This is an open-ended question that lets the hiring manager know if the candidate has a broad view of the areas, knows the alternatives, and understands the tradeoffs that will be made in choosing one or the other solution.

Q22: (C / C ++) What is your preferred build system and why? How does it compare to the competition?

Why you should ask Q22: This will demonstrate the candidate's knowledge of build systems.

5.3 Behavioral questions You should ask in order to understand how the candidate has behaved in the past

Q1: What is your greatest success story in programming? Why is that happend? How can you repeat it?

Why you should ask Q1: This question gives the candidate the opportunity to present a success story and shows the hiring manager whether the candidate is more interested in solving the problem or getting the praise.

Q2: What was your biggest programming mistake? Why did it happen? How can you avoid repeating it in the future?

Why you should ask Q2: This question gives the candidate a chance to tell a potentially troubling story and shows the hiring manager whether the candidate is open about it. It will also show if he is more interested in solving the problem or shifting the blame.

Q3: (for applicants at a higher level) Would you like to mentor a junior developer? Why? How would you go about doing this? Do you have experience mentoring other people?

Why you should ask Q3: In this way, the HR manager can assess the candidate's interest and the soft skills required for knowledge sharing.

6. Technical screening of C or C ++ developer skills using an online coding test

The thing that you need to be absolutely clear about C and C ++ developers is that they absolutely need to have immaculate coding skills. C leaves no room for error and C ++ does not allow much more. Surely a résumé review and phone call can help you weed out some of your candidates. The last thing you want to do is invite a candidate for a technical interview only to find out that they never had the programming skills you need.

6.1 Which C or C ++ online programming test should you choose?

When looking for the right C or C ++ online programming test, you should make sure that it meets the following criteria.

  • They reflect the real work that is being done
  • They do not take up too much of the candidate's time, a maximum of one to two hours
  • They can be sent automatically and taken anywhere
  • They not only check whether the solution works, but also the quality of the code and how well it works in marginal cases
  • They are as close to the natural programming environment as possible and allow the candidate to access the resources they would normally use at work
  • They let the candidate use all of the libraries, frameworks, and other tools that they would normally use
  • They are at an appropriate level that matches the applicant's abilities

7. DevSkiller online, ready-to-use tests to evaluate coding by C and C ++ developers

DevSkiller coding tests use our RealLifeTestingTM Methodology to reflect the actual programming environment your candidate is working in. Instead of using obscure algorithms, DevSkiller tests require candidates to create applications or functions. They are graded completely automatically and can be completed from anywhere in the world. At the same time, the candidate has access to all the resources they would normally use, including libraries, frameworks, StackOverflow, and even Google.

Companies use DevSkiller to test candidates with their own code base from anywhere in the world. To make it easy, DevSkiller also offers a range of pre-built C and C ++ coding tests like the one here: