tags:

views:

1055

answers:

10

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?

+4  A: 

Standard Template Library

http://en.wikipedia.org/wiki/Standard_Template_Library

Dynite
Note that when C++ programmers talk about the "Standard Template Library" (STL), they almost always really mean the Standard C++ Library. The STL served as the basis for much of the Standard C++ Library, but the STL is obsolete except for those C++ implementations that don't implement the standard.
Kristopher Johnson
+12  A: 

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)
aku
Yeah, I thought that was given. Sorry if it wasn't clear. I was talking more about business technologies, if any. It's not about what C++ need to know, but if there were any further widely adapted concepts used in professional circles.
Firas Assaad
+3  A: 

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.

Konrad Rudolph
The most stable C++ code I've worked on didn't use boost. While it is common it isn't quite industry standard yet.
tloach
come to think of it, it didn't use the STL either, we had internal code that fulfilled the same purpose but was specific to our business area.
tloach
@tloach: even if you don't end up using them, knowing them is crucial. Least of all so you don't needlessly duplicate existing features.
Konrad Rudolph
@Konrad: true, fair enough.
tloach
+1  A: 

In no specific order

  • COM/ATL
  • DirectX
  • MFC & Win32
  • STL
  • GDI
  • BOOST
TG
+1  A: 

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.

tloach
+5  A: 

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.

gbjbaanb
+15  A: 

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.

Mac
+1  A: 

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.

OldMan
A: 

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

Fede F
A: 

The popular way to use C++ in the mobile space would involve learning Symbian OS development.

http://developer.symbian.com

QuickRecipesOnSymbianOS