If you have a position where C++ experience is essential, would you consider someone who has little C++ experience but is experienced in both C and Java?
yes, especially if they have a good understanding of the language, and of object-oriented programming.
It depends.
If the task to perform require absolutely command of C++, like creating the base of the application, then no.
If th task to perform are more related to maintain and support to other developers, I would say it is ok, for the core of the app would be already written.
Java experience would help to catch OO features.
C experience would help to get the lower bits.
So, it depends.
If C++ is essential, no.
If it's a "team member" with a handy coach to introduce the intricacies of C++ on an as needed basis, then perhaps.
If it's on a short time schedule, certainly not.
You really can't judge the skill of a computer programmer by his knowledge of a particular language. The ability to pick up a new language depends upon the eagerness and experience of the programmer (at least). Take a look at what he/she has worked on before. Look at how young or how old he/she is (either can be a perk -- it depends). Try your best to evaluate the individual for strengths/weaknesses instead of experience with C or Java. This, I feel, will help you make the best decision.
No, you've already stated that C++ experience is essential so I assume you think it's pretty important.
If no C++ people come forward, you could consider it, but keep in mind that the jump from C to C++ is more complex than Java to C++ (in terms of mindset). So I wouldn't hire a C coder, given the other options. But if your guy has both C and Java, he'll probably make a decent fit.
To be honest, Pascal, Java, Fortran, C, C++ are all similar enough procedural languages that can be picked up. In my interviewing of candidates, I've always concentrated more on their personality traits. How will they fit in with the team? Is their ego bigger than their ability? How do they handle criticism?
I think those things are far more important than which language they know (up to a point; I wouldn't hire a Forth programmer to do PL/SQL no matter how well they fitted in to the team).
I'd have to say a categorical No...
I learnt C and C++ before I learnt Java et. al. C++ is enough of a beast in its own right that it is horrendously more complicated than both C and Java... or even some hideously unearthly combination of the two (which is most likely what you'd end up with if you hired a C/Java guy to do C++).
I think the use of a language is more than the language itself, but the culture that surrounds it. Do they know how "mainstream practitioners" do it? (Do they read comp.lang.c++.moderated for example?)
Also, for a C++ project, does it just use plain-jane C++? What about Boost? ACE? ATL? etc. If it uses any of the frameworks mentioned here, there will be a huge learning curve, whether you're from C, Java, or even C++ (from a different framework).
It depends , if he knows Object oriented programming well then picking up C++ shouldn't be that difficult. But then again if you are schedule bound and you absolutely need quick C++ code from him may be "no"
I've always said that a good programmer can program in any language. However, transitions take time. If immediate productivity is needed, the more experience a developer has with the tools in use on the project the shorter the ramp up time will be.
I'd be concerned about anyone who says they know C and Java well, and have never personally shown the curiosity to understand how the conceptual core of Java was first worked out in C++. There's a mental model gap there. I wonder how they ever made the transition straight to java in the first place? I know I first worked it out just because I knew the mechanics of C, but had to understand how all the neat stuff (scope, function pointers/callbacks, etc.) mapped into a much cleaner model.
I'd hand the guy a sample of good clear C++ code like what you'd expect him to produce, and ask him: "Can you work any of this out? What questions does it raise as you read through it? How would you answer them? How would you find out why it was done the way it was done?" Then take a couple examples and talk through them, and see if he starts to get the drift. If you can have a healthy conversation at that level, there's hope. A good C/java dev should at least grasp the logic flow, and have some idea of the possible interpretations, and what the applicable patterns are, and where in the man pages (and GoF and Refactoring etc.) to find the answer.
Having done this before.
No.
Though a lot depends on the person and the style of C++ you are doing
if you are using vanilla C++ basically C code wrapped in classes in a nice OO way. Then yeah, a C / Java guy probably would work out ok.
If you are making a lot of use of templates / metatemplate programming / std libaray / boost / generic code etc. Then it really pays to get a C++ programmer, someone who is keen on C++ and knows how to make it fly.
Ok don't want to seem heretic here, but C++, especially modern C++ ISN'T an Object oriented Language. Objects just happen to be available, but most "pure" C++ code these days is based upon the principles of Generic programming, more so than object orientation. Problem is Generic programming isn't major in either C or Java, so they would both have a challenge to reach the same mindset of a Modern C++ programmer.
Note: My definition of Modern is related to the heavy use of templates, meta-programming, and generics.
If the experience with Java includes Java generics, then yes, I would hire such a person for a C++ job, because I view the experience needed as
- Objects
- Unsafe language
- Templates/generics/polymorphism
C++ is overloaded with other junk (pun intended), but anybody who masters the three technologies above can be productive in C++ right away.
My two cents... If you have some lead time and the ability for the potential hire to tap other experienced C++ programmers for questions, then absolutely yes. But if you really need someone to hit the ground running and/or operate alone, then no. I happen to have extensive C and Java, and I would want to have the time to put to bed some foundation before diving into production code.
I'd be careful with it. C++ isn't easily learned, and both C and Java are full of idioms and techniques that would be horrible if applied to C++. But on the other hand, you can't judge a programmer solely by which languages he knows. If he's keen to learn, and not too stuck up about the Java or C way of doing things, it might be worth a try.
In particular, many common OOP techniques in Java are considered bad in C++ (deep class hierarchies, virtual functions everywhere, and even just making everything member functions). In my experience, Java programmers may have a hard time adapting to that.
Although there are lots who say no (and I'd agree, if command of C++ is absolutely necessary), you may find that there are less and less new graduates that actually has command of C++.
Lots of school have moved to teach their students Java/Python/etc so that they aren't encumbered by the lack of garbage collections, and pointers, etc... Good portion of these students either didn't bother learning C++, or learn it poorly.
If the person has both Java and C experience, it shouldn't be too hard, with a decent mentor, to get them to pickup C++. YMMV.