Simple answer to this, perhaps, million dollar question is “Experience.” Now that’s vague enough to be applied to every other language on the planet. So what really does make someone a good C/C++ coder. Btw, do not even dare asking this question to Bjarne Stroustrup or Dennis Ritchie or perhaps guys like Linus Torvald 🙂 since they surely have their own definition of being “good” which comprise only themselves :).
Following is an excerpt of an email that I wrote to someone suggesting him which areas to explore to attend an interview for the game dev team at ReliSource Ltd:
“1. Thorough understanding of pointers and memory related stuffs. Which may include understanding of all memory related operations like malloc, free, calloc, new, delete , delete . We will try to figure out how you plan to deal with not writing or at-least avoiding memory-leaks. Even the best programmers add memory leaks, so we will try to figure out how you might plan to detect memory leaks and fix them.
2. Understanding of Function Pointer and how it might be used.
3. Tricky application of MACROS.
4. Thorough understanding of OOP (which i guess you already have since you do a lot of Java ). But the important thing here is C/C++ way of doing OOP is different (Hint:virtual keyword, multiple inheritance). It also includes understanding of how C/C++ achieves OOP (Hint: vtable).
5. Very good understanding of “Copy Constructor” and why and where it might be absolutely necessary.
6. Singleton design .
7. Understanding of Templates and fluency in STL .
8. Optimization: This is extremely important specially for our projects. You must know which code produces faster executable. How OOP may slow down your process. Code Bloating introduced by Templates. How normal C can be used to make OOP-alike features (Hint: Function Pointer).”
Well, the list can grow bigger but exploring the above areas pretty much makes someone a good C/C++ coder. Obviously this article doesn’t consider the algorithmic, mathematical and problem solving skills of a person which is unrelated to any specific programming language.