views:

925

answers:

14

Some background - I have been programming in Java as a professional for the last few years. This is mainly using Java SE. I have also touched bits and pieces of other various Java technologies and have some basic knowledge about them. I consider my self as an intermediate Java programmer. I like Java very much. I think it is only going to get bigger.

Recently, my manager asked my opinion on whether I would like to be transferred to another team within the company that is developing a product in C++. This is mainly because my current Java team simply didn't make enough money due to poor sales and the economic downturn.

Now, I have never had any experience with C++ nor have I ever coded a single line of code in C++. I have always wanted to learn it and now is my chance. But I really want to make sure I get benefit out of it in the future, in the sense that I will have the skills that will still be on-demand in the future.

So, what do you experts think?

  • Is C++ still the language to learn these days to secure yourself for the future?
  • What will I learn more in C++ but not in Java? And are they worthy to learn considering the current and possible future demands in IT industry? (Apart from the obvious more control over memory management and something along that line.)
  • What is a good excuse to refuse the offer in order to stay with the Java team? I don't want to blatantly refuse it because you can never predict the future and I could possibly come back to my manager in the future and ask him to transfer me to the C++ team.
  • How do I say it nicely that I am taking the offer but I would like to still be involved with Java one way or another, such as when there is a new Java project I would like to be considered.

I have to admit that I am kind of 50-50 at the moment. I want to learn C++ for the sake of improving my skills and also helping my company to reduce the fund required for the Java team. But it is also hard for me to leave Java because I know Java is going to get bigger, so I am afraid of getting behind when I start concentrating on C++.

I could, of course, decide to just join the C++ team, and then spend my free time reading about Java to keep in touch with it, but I thought I would ask anyway in case some people can point out the strong points of either over the other given the current and possibly future circumstances.

+1  A: 

Always be learning.

You've nothing to lose by switching over to C++, and lots to learn. As an employer of developers I'd be very pleased to see a broad application of development skills.

Jeremy McGee
+18  A: 

From a career development perspective: it's more important that you're seen as a person who solves problems than as a C++ or a Java developer. If you value your future in the company you are working for, move to where the money is, that's where the interesting problems are. Take it as a learning experience, a good developer should feel comfortable in more than one language.

From a languages perspective, getting out of touch with Java for a few years will not destroy your future as a java developer, that is, unless you are like Homer Simpson, who forgets old stuff every time he learns something new.

Nick Kavadias
Try to tell that to HR in agency :) It's all counts when you stay in the same company or you have friends that can recommend you in company you'd like to join. But if you're on your own with HR, language is what matters not your experience or skills of solving problems.
vava
+7  A: 

With C++, you can get deeper and more hardcore knowledge, which IMO is great. C++ is still widely used nowadays, and having solid C++ skills will definitely be an indicator that you are a person who can learn anything the future demands from you.

sharptooth
+1. C++ is without any doubt one of the ugliest mainstream languages. But in a sleeves-rolled-up, getting-things-done way of ugly. It certainly expands your "technical vocabulary", the thought patterns you can build a solution with. And that's always useful.
DevSolar
+8  A: 

First of all, either choice is perfectly valid. Specializing in Java won't hurt your career, and learning C++ won't make you forget Java.

Being on a money-losing team might cost you a job, but so might being a junior C++ developer with an intermediate developer's salary.

I think the biggest deciding factor for you should be what kind of domain you find interesting. If you like programming web or b2b applications, stick with Java. If you're interested in devices, audio/video processing, gaming etc., then switch to C++.

ykaganovich
Specializing in any one thing will almost certainly hurt your career eventually.
David Thornley
I don't mean that he should forever stay one language. I mean that as an intermediate developer, staying with Java and mastering programming skills is a reasonable course of action.
ykaganovich
+27  A: 

Apologies if I read this wrong, but to me you sound like a "single language" developer, namely a Java developer. In that case and given that you would like to learn C++, I would take the C++ role if they're willing to teach you C++ properly. Obviously that's something we can't assess and people's perception of properly varies somewhat as a lot of people seem to focus on those concepts that they're most comfortable with in C++.

I know it's an old hat, but being fluent in multiple programming languages does make you a better developer. I would see C++ as an advantage in this context as the basics are reasonably close to Java so you should be able to get started easily. Due to its multi-paradigm nature you'll also get exposure to techniques that you can't easily use in Java and you can express your ideas differently. The latter is of course the whole idea behind being able to learn multiple languages. At the end of the day languages are a way of expressing ideas and not getting too hung up on the language and focusing on improving your ability to express your ideas is a big win for everybody involved.

The learning curve for C++ is harder than it is for Java IMHO - I've been programming in C++ for almost 20 years now (and yes, I also program in Java) and I'm still amazed that people find new ways of using C++. It is a more complex language and obviously it does have its own set of pitfalls, but that's just part of the learning experience.

Timo Geusch
Agree that C++ is harder than Java, especially learning manual memory management for someone who's never seen it is hard, and with template metaprogramming you can do really wild things in C++.
Jesper
Agreed, especially with the "single language" part. You can't "secure yourself for the future" by sticking with one single language. Learning multiple languages will pretty much always make you a more attractive hire than someone who only knows this week's hyped-up language. C++ is a difficult language though. You'll do more harm than good if they're not willing to teach you properly. But if they are, jump at the opportunity. And if they aren't, there's your excuse for declining.
jalf
Very nice old stereotypes.
cmdev
+1  A: 

It's a great idea to learn C++, as long as you are comfortable with the situation. Because C++, in my humble opinion, is harder than Java. If I was you I'd be starting to learn RIGHT NOW. Find the best three books on the StackOverflow list of best C++ books and read them all while coding up a personal project. That way when you get to learning on the job, you won't have a total "What the Heck Is Going Ooooooooooonnnnn!!!!" attack. =D

Good luck. :)

Alex Baranosky
+10  A: 

I went from Java to C++ - I'll relate my experience, maybe it will be useful for you. First of all, C++ has a very steep learning curve when coming from a Java background. C++ can be annoying and difficult - it took 3 to 4 times as much to feel I'm making any progress with C++ than Java. This is mainly because in C++, unlike Java, one has a lot of freedom - Java developers (me included) do now know what to do with that freedom in the beginning - it takes time to understand, but the results can be amazing.

Learning how to write proper, problem-solving C++ code has given me a deeper knowledge of how stuff actually works. It seems that the areas where I can develop as a programmer are wider when dealing with C++ than Java ("seems" being the key-word here, I don't know for sure, that's just my current feeling).

All in all, I think for me moving on to C++ was a very good move for me - it has certainly given me a greater depth as a programmer. And I feel that going back to Java would not be difficult at all - the skills I gained while doing Java development are still there, but many things are clearer now that I've seen the world from a C++ perspective. I think taking the time to properly learn C++ can only help ones career

laura
+2  A: 

Programming or software development is not about 'languages'. It is about concepts, abstractions and solving problems. The language you use is merely a tool, like a hammer or a screw is a tool for a carpenter. Java, C++, C#, ... are languages that are languages that share the same paradigm. (F#, haskell, etc... are languages that share another paradigm (functional languages).

So, what I'm trying to say is: make sure you understand the concepts, abstractions, algorithms, patterns that you can use in a language. If you know / understand these, you can apply them in any language. The only thing that is different then, is the syntax and some details that are different in any language.

Offcourse, in C++ you have to take care of much more things that Java abstracts from you, but this won't do you any harm. It will maybe help you more to understand what's going on.

Frederik Gheysels
+9  A: 

Is C++ still the language to learn these days to secure yourself for the future?

The future likely consists of a lot of languages, from Ruby and Python via Java and C# to C and C++. C++ will survive for a long, long time, although it'll probably lose some share (for stuff like desktop apps) as VMs get better and more ubiquitous. Low-level stuff will always need C/C++ to some extent, though.

What will I learn more in C++ but not in Java? And are they worthy to learn considering the current and possible future demands in IT industry?

You'll learn a lot more about how your computer actually works, low-level stuff. This is valuable knowledge for any programmer, and for your future as a Java programmer, you'll probably understand the VM a lot better after a year or two in C++. Also, as has already been said in this thread, the more languages you know, the better you get at all of them. It's a chance to get new perspectives on things, awesome!

What is a good excuse to refuse the offer in order to stay with the Java team?

How about THE TRUTH? If you think Java is better than C++ for your company in the long run, say so, and that you'd like to stay in the more "future proof" branch. (I'm not really sure you should refuse the offer though - it's not like you're signing a lifetime contract, I hope?)

How do I say it nicely that I am taking the offer but I would like to still be involved with Java one way or another, such as when there is a new Java project I would like to be considered.

Again, the truth is probably the better option here. Say that you'd love to join the profitable C++ team for now, but that you think in the long run, Java's a better option for your company and so you'd love to help out when the time comes for more Java. Any manager worth their salt should think that's a great attitude - you help out in a pinch, but keep a long-term perspective.

gustafc
+1  A: 

Its not the language , but the experience and the expertise is all that matters. No one is going to look for a programming language, what all is important is your problem solving ability and the understanding of Object Oriented concepts. Language only gives the covering wrapper.

Sachin Chourasiya
+6  A: 

Is C++ still the language to learn these days to secure yourself for the future?

Of course not. And neither is Java. Knowing Java and nothing else could secure you a job 10 years ago, when the language was seens as the solution to all the world's problems. C++ could have secured you a job 15 years ago for much the same reason.

There are quite a few jobs for both C++ developers and Java developers, and that'll still be true tomorrow or in 5 years. But there'll always be more jobs for a C++ and Java developer.

The only way to secure yourself for the future is to not marry yourself to one specific technology or language. A programmer who knows C++ and Java has more jobs available, and is better at them, and therefore a more attractive hire. IF you can also pick up Python, Haskell and a few other languages, you'll be in really good shape.

What will I learn more in C++ but not in Java? And are they worthy to learn considering the current and possible future demands in IT industry?

Here the obvious answer really applies. What you'll learn is

  • a second language, and
  • C++

You won't get either of those benefits if you stay with Java. And both are useful, today and in the future.

Right now, your employer is in a tricky position. They need to save money on the Java team, and they can't easily move you to the C++ team because you don't know the language. But if you did know C++ already, then this problem wouldn't exist. You'd be able to switch to the team where they don't have to cut costs, your job would be secure, and your employer would be happy.

What is a good excuse to refuse the offer in order to stay with the Java team?

"I don't know C++. It's a big language, and it'll take me time to learn. Wouldn't it be better if I stayed here and tried to turn the Java ship around?" The truth, basically. But from what you've said, it sounds like refusing would be a bad idea.

How do I say it nicely that I am taking the offer but I would like to still be involved with Java one way or another, such as when there is a new Java project I would like to be considered.

Again, the truth. That you're still more proficient in Java, so if they need a good Java programmer for a new project in the future, please let you know.

jalf
A: 

Numerous correct answers to a question for which there is no correct answer - wikki for sure, possible firefights - we always enjoy a good, well managed roustabout on sensitive / central issues. It has central dependencies for which there is no certainty, not even for the boss who asked you the question. Economy is burbling up, cross-language is good, sorta depends on how good your burger-flippin resume is: With ten years programming anything I would think what the boss is doing is taking a risk-known chance at broadening the programmer skill base.

Could as well be an easy slip to reduce ... I have been in the boss's position enough times to know that it's one of those things where you put things in places - just sorta shuffle to get by a tough moment. Transitioning from Java to C/C++ in that setting is solely dependent on how much resources the employer has to put at future investments, you are not going to transition from a language that has runaway pointer trapping to a language that was originally written as an os development tool by experienced workers holding doctorates and masters with 10+ years at a research facility and do that transition safely at an installation where the team lead is shuffling things - it resolves on how risk-intensive your style is and what the leader is willing to put into it for training.

For sure, something like: new Integer("neato".hashCode()); will never make sense in C/C++

This reminds me of recent beginner work I did, trying to get going on something and had the Fiestal table for aes showing up in my code - I was trying to do OCR from JNI on the C side and had a pointer way off, that is not acceptable where there is valuable property of a business entity - there is no correct answer for your question.

Nicholas Jordan
+2  A: 

You've gotten a lot of answers, but as far as I've seen, none of them has asked what I'd consider the crucial question. Most of it really comes down to what kind of programs you want to write. I'd spend some time really studying the project he's proposed moving you to.

First and foremost, is that project something you'd like to be involved with? Forget languages for the moment, and think about the end result. Assume for the moment that project becomes well enough known that a random stranger (at least at some sort of IT convention) is likely to have heard of it. If they had, would you be hanging back, hoping nobody recognized you as one of the people responsible for it, or would you be jumping in, being proud to say, "Yeah, I helped write that!"?

Second, is the team one you want to be part of? Again, forget the languages and think about the people. If you join that team, you're going to be working closely with a lot of them, probably for quite a while. Given the kind of people they are, is this something you really want to do? If you don't know them, try to (subtly) spend a little time getting to know at least a few. If they're very much an "us and them" kind of group and won't associate with you because you work on a different project or use a different language, that's something to think about in itself.

If, after really studying the project and the team, you find that you don't want to join them, raise those reasons as concerns with your boss. Even if they're really major problems, I'd advise against going to him and saying: "I think the [project|team|both] suck, I don't want to go." Instead, sit back and think about what it would take to fix the problems you've observed. When you go to your boss, you point out the problems, and outline the solutions you've thought up.

Obviously, you need to be diplomatic and open about it -- it does little good to give them a set of demands. At the same time, showing that you can think beyond the confines of your cubicle and look at the project and team as a whole is generally a good thing. So is the fact that you're really doing your homework, and working at providing solutions, instead of thinking primarily (or exclusively) in terms of your own preferences about minor details about programming languages.

That said, I'd go for it -- despite superficial similarity, C++ and Java are really substantially different languages, and broadening your horizons is definitely a good thing.

Jerry Coffin
+1  A: 

On thing to consider about the C++ Job is what they mean by C++. Lots of C++ Jobs mean "C++ With MFC and no working templates because Visual C++ 6 didn't have them and we're not going to upgrade our technology stack but need to keep this old client side program limping along." Others mean "Standard C++" or "Some Platform-specific C++ Variant" (Symbian, etc.) Very few jobs actually want standard C++; Most require some hidden extra that "goes without saying".

None of that is necessarily bad; Just be aware that there are many different worlds that call themselves C++.

Sean McMillan