views:

842

answers:

11

I’ve seen job listings recently for positions I’d like to apply for, the problem though is that they usually have a working knowledge of c++ listed as a job requirement. The jobs are doing .NET/C# development for internal applications but their retail applications are all c++. I don’t have experience in c/c++ and am wondering what exactly a working knowledge should include so I can learn some of this before applying.

Update

Now that I'm reading the comments I realize I should have mentioned a bit more about the actual work. The main one I’m interested in does video games with the xbox 360 as their main platform so that should give an idea as to the version of c++ is being used (I’m guessing VC++ 8/9?). The position is, from what I can tell, internal apps along with data collection & processing which I’m guessing is for game stats, match making etc. Some of the qualifications listed are:

  • 3+ years experience with c# & sql server
  • Experience in WCF or .Net web services
  • Understanding of database performance and tuning
  • Familiarity with Windows server platforms
  • Working knowledge of C++

By the sound of it the c++ requirement is probably more for reading existing code for integration then writing new code. Thanks for the great answers. It looks like I’ve got a lot of good reading ahead of me now.

+11  A: 

What would you say was a working knowledge of C#? Take that, and substitute C++. But basically the term is meaningless - different jobs will have different "working" requirements.

anon
+7  A: 
  1. Find a C++ book that has exercises at the end of each chapter.

  2. Do one exercise from each chapter.

Example book: http://www.doc.ic.ac.uk/~wjk/C++Intro/CourseStructure.html

S.Lott
+5  A: 

In addition to Neil's answer I would say the best thing to know about C++ is what you don't know. Be able to identify patterns you don't understand in C++ and avoid using them until you have thoroughly researched their use and in particular their consequences and common slip ups.

JaredPar
+18  A: 

Most of the time it seems that the "C with Classes" level is enough for "a working knowledge". In other words, the employer stopped following development too long ago, and consequently has a limited understanding of modern C++ -- they may not have heard of smart pointers, RAII, et al. And of course something like SFINAE is typically way beyond. However, probably they can make questions about inheritance, polymorphism and other basic stuff that are there in the other OOP languages that they know about.

At worst, they don't even care about the STL, because they are happy with the linked list implementation that MFC gives them! (Well, I guess that is still better than sticking to an in-house linked list class that somebody wrote them in the eighties...)


You might find this question relevant: What are the often misunderstood concepts in C++?

A quote from there which says exactly what I've been trying to express here:

"C++ is much more than OO, if you look at it just as an OO language, you are missing important features like generic programming". – Ismael Feb 18 at 14:05

Anyway, the answers as a whole make a good list of what is unique in C++ -- because much of the confusion comes from the fact that people treat C++ as some combination of, say, Java and C.

Pukku
Personally, I've found that even "Proficient" or "Expertise" with C++ may not include those concepts. Also, in some companies, C++ and COM programming are often confused. "Boost" should also be a mandatory concept, even if its only "I wish they would allow us to use Boost."
James Schek
+3  A: 

I think that is a subjective sort of thing. But in a general sense, I would assume this would constitute one knowing how C/C++ works in general. Familiarity with the language, i.e., keywords and basic language constructs like loops, syntax, classes, OOP, exceptions, templates, pre-processor directives, macros, pointers, deconstructors, Memory allocation/deallocation, etc, that are specific to C++.

I would assume this would also entail an individual being able to read C++ source code and understand (on a general level) what is going on or trying to be accomplished within the program. I would expect the ability to fix minor bugs within a C++ program. Maybe have an academic understanding of C++ constructs like far, near and null pointers, function pointers and call backs. Also, maybe some conceptual understanding of ATL, WTL and/or MFC and COM if it's a Microsoft based environment - including a basic idea of what STL is.

bbqchickenrobot
far and near are not C++ constructs
anon
true, but it still may be good to know during an interview...
bbqchickenrobot
basically Neil, i'm giving the guy specifics to what he asked about and what he *might* hear or be asked to discuss during an interview. No need to get picky.
bbqchickenrobot
+5  A: 

You might consider starting with Learning Standard C++ as a New Language by Bjarne Stroustrup.

aem
+1, excellent resource.
greyfade
+1, fun read, thx
Emile Vrijdags
+5  A: 

Depends on the employer. Like Pukku said, in some places you're just expected to be able to code C, and know what a class is. In others, they're going to expect you to actually code modern C++, with RAII, Boost, exception guarantees and the whole things.

Personally I'd say you have to know enough of the language to avoid shooting yourself in the foot.

Know how to avoid memory leaks, know how to avoid accessing arrays out of bounds, know how to use the standard library, know how to write classes that correctly implement copy constructor, assignment and destructor and learn to recognize common cases of undefined behavior.

That's about the minimum I'd require in order to have a even a small amount of trust in someone else's code.

Of course if the job is to write C# or another language, and just requires you to be able to read C++, the requirements can probably be relaxed a bit. Being able to read code that lives up to the above would satisfy me then.

jalf
A: 

I'd say that C++ with std library is a decent start.

Maciek
+2  A: 

Mi piece of advice would be that first you might read any tutorial you can find on the net and play around with the language doing some small designs using with OOP, memory allocation, some stl stuff and so on.

After all that then should read (I should say must ;-) ) this book: Effective C++: 55 Specific Ways to Improve Your Programs and Designs by Scott Meyers. This book will show you all the mistakes you had probably made till that moment. Yes you had been shooting your foot all the time without knowing it :-).

Another good source of information about c++ pitfalls would be this FAQ. There are a lot of very interesting points on this site that can save you a lot of frustrating hours debugging.

After that you will be able to answer some questions about the language and write some modern C++. It might be enough to pass an interview actually.

fco.javier.sanz
+1  A: 

I think the term "working knowledge of language X" is a terse way of saying "can get work done using language X". That is clearly dependent on both what you know and what you will be required to do on the job.

You should be able to bound how much you need to know based on the job description. At least at any decent company.

MSN
+4  A: 

I have often seen "Working Knowledge" to mean "know enough to read and modify existing 'legacy' code" for the purpose of bug fixes or adding minor features. While the hiring manager may think they want more, that's what it usually boils down to.

Personally, I think any one claiming to know C++ (beyond basic syntax) would be able to describe and use the concepts listed by Pukku (RAII, Smart Pointers, STL) as well as concepts such as Template Meta Programming (perhaps not design software, but at least know why this is different than OO), and have used or know what's in BOOST.

And I'd consider that a relatively junior level C++ developer.

Another major headache in C++ is which standard or flavor? VC++ 6.0? C++ 2.0? C++98? COM C++? TR1? C++/CLI? Or the yet-to-be-finished C++x0? Depending on the standard and platform they are using, the specific C++ concepts needed can vary drastically.

Add to that, sometimes "C++ Programmer" really means "COM Programmer", "Win32 Programmer" or "C Programmer" (sometimes known as C+ Programmers).

James Schek