What technologies do C++ programmers need to know?

Viewed 23072

C++ was the first programming language I really got into, but the majority of my work on it was academic or for game programming. Most of the programming jobs where I live require Java or .NET programmers and I have a fairly good idea of what technologies they require aside from the basic language. For example, a Java programmer might be required to know EJB, Servlets, Hibernate, Spring, and other technologies, libraries, and frameworks.

I'm not sure about C++, however. In real life situations, for general business programming, what are C++ programmers required to know beyond the language features? Stuff like Win32 API, certain libraries, frameworks, technologies, tools, etc.


Edit: I was thinking of the standard library as well when I said basic language, sorry if it was wrong or not clear. I was wondering if there are any more specific domain requirements similar to all the technologies Java or .NET programmers might be required to learn as apposed to what C++ programmers need to know in general. I do agree that the standard library and Boost are essential, but is there anything beyond that or is it different for every company/project/domain?

10 Answers

As for every language, I believe there are three interconnected levels of knowledge :

  1. Master your language. Every programmer should (do what it takes to) master the syntax. Good references to achieve this are :
  2. Know your libraries extensively.
    • STL is definitely a must as it has been included in the C++ Standard Library, so knowing it is very close to point 1 : you have to master it.
    • Knowing boost can be very interesting, as a multi-platform and generic library.
    • Know the libraries you are supposed to work with, whether it is Win32 API, OCCI, XPCOM or UNO (just a few examples here). No need to know a database library if you develop purely graphic components...
  3. Develop your knowledge of patterns. Cannot avoid Design Patterns: Elements of Reusable Object-Oriented Software here...


So, my answer to your updated question would be : know your language, know your platform, know your domain. I think there is enough work by itself here, especially in C++. It's an evergoing work that should never be overlooked.

C++ developer have to grok std and boost libraries.

List of other technologies largely depends on project type. For sure you will have some interaction with SO, so you will need to know API of your environment.

As for data-access and other stuffs there are tons for different solutions. C++ is much richer than some managed langs in that sense. 99% of old popular systems have C/C++ interface.

After you clarified your question a bit in the comment to my answer I can recommend:

  • Good code browser (SourceInsight or Understand For C++ for example)
  • Static analysis tools (Link, KlockWork Inforce, etc.)
  • MySQL\SQLite (I encountered these DB in a huge number of C++ projects)
  • UI technologies (OpenGL\GLUT, DirectX, GDI, Qt, etc)

technologies you should know as a C++ programmer (and therefore more technically knowledgeable than lesser programmers ;) ):

performance issues - what makes things go slow, how to find and fix such issues. I also mean stuff like context switching, cache lines, optimised searches, memory usage and constraints, and similar stuff that your average VB/C# developer doesn't care about.

threading issues - how to get the most from a multi-threaded app, how to detect and fix abuses of the same.

low-level communications - especially being able to connect to obscure systems that no-one else has written a toolkit for (especially radio comms), latency and bandwidth management.

Otherwise, for specific tools - it depends on what you're targeting, Windows dev will be different to Linux, different to embedded.

This will largely depend on the used platform and other constraints. As a general rule, a good (C++) programmer is (or should be) able to learn a platform-specific API in a very short time. For C++, it's much more important to understand the different tool chains (e.g. a Windows programmer should also know the GCC tool chain) and differences in compilers. Programmer should also understand limitations and platform-dependend behaviour of the language.

As for libraries, C++ programmers absolutely need to know STL and Boost. No discussion.

Besides the stuff everyone listed, keep in mind that C++ programmer have space on the embedded systems market (much more than most other high level languages).So familiarity with embedded systems and development may open a lot of doors and job opportunities where you will not be competing so heavily with Java development for example. So learning to code compact code (compact after compiled) and low memory usage techniques is a good bet.

if you're using gcc you should definitely know gdb. Actually, you should be proficient with the local debugger for whichever compiler you're using. Other than that there is such a wide range of libraries used that being able to quickly pick up an API is more useful than any specific one. I would suggest learning doxygen though.

If you are using linux then Valgrind is a very usefull tool for checking how your program deals with memory access.

In no specific order

  • COM/ATL
  • DirectX
  • MFC & Win32
  • STL
  • GDI
  • BOOST
Related