views:

2691

answers:

25

Like most people, I learnt C++ after C. I learnt C++ because it was one of those languages which fetched jobs. I am still studying (doing masters) though. One of my cousins has been working as a developer for around 12 years.

He advises me to learn Java so that I can land up in a good job. He says only few sectors like tele communications use C++ and almost all the enterprise software is developed in Java. I am working as a student technician in my university. The job involves Windows programming in C++. I learnt core Java. I do not know any of those Struts, Hibernate or whatever is out there.

To be on the safer side, I am planning to master both. But I think Java is an ocean, though it's easier to program in Java than C++ (this is my opinion. C++ lovers don't kill me).

What do you geeks and professionals out there advise me. Do you think I should learn both of them. Which sectors of the software industry use C++?

+9  A: 

Video games still use C++. One example that comes to mind is the Torque engine which can be used for iphone and xbox game development.

zmf
+2  A: 

Keywords: Banking (financial institutions), games

Oh, and also particle physicists and other scientists using the (in)famous ROOT framework.

And check out this list of C++ based applications.

Anonymous
In my experience, banking and financial stuff is almost never C++. If it's recent, it's Java; if not, COBOL.
Michael Borgwardt
Jobsearch using keywords C++ and banking/finance seem to say something different.
Anonymous
+50  A: 

Best advice I ever got as an undergraduate was from my languages professor, who told me (paraphrasing here): "Don't memorize languages; don't marry yourself to a language. They're just tools. They all do the same basic things. Instead of learning a specific language, learn the foundations of good software development. Then you'll be able to take any language and be successful with it."

I feared learning new languages before he told me that. Afterwords, I took his advice to heart and it's made all the difference. Languages are just tools in your toolbox. If you can program and write good software in one language, you can do it in another.

Chris Holmes
Sure they are tools, but they come along with toolboxes (standard libraries) and it takes some time to find the best hammer for the given problem.
Anonymous
In a purist sense, I agree. However, when the deadline looms and you don't know the quriky weirdness of a given environment (libraries, OS, drivers, providers, etc) then the theory goes out the window and you have to know the details of the implementation.
Dave Swersky
Are programmers generally not intelligent people? We tend figure these things out. And yes, I've had to do it on a tight deadline on a language I'd never touched before. I'm sure there are lines of code in that project I'd write differently now, but it was successful, and that's what counts.
Chris Holmes
I wonder if the maintainers of that code were also that optimistic ;)Remember the Pareto principle...
Anonymous
The maintainers of that code actually got me my next two jobs as references. I was quite pleasantly surprised when they said they thought I had built a great base of code to build on.
Chris Holmes
Excellent advice. I was also told this by a colleague, and have found it gives you a powerful edge in the industry. Learning new languages gets easier over time, and it allows you to adjust to new tools more efficiently when your job/career requires it.
seanhodges
Would you not consider C++ to be a special case in learing languages, given the need to deal with memory allocation and pointers? I think that going to C++ from most other modern languages to be an uphill climb (and all the more valuable for that.)
Dave Swersky
For certain - going from a low-level language to a high-level language is always easier than vice versa. Which is why I would always expect CS undergraduates to learn less abstract languages like C or C++ first, prior to learning a higher level language. But once you know that, then it gets easier.
Chris Holmes
@Dave: The OP said he already knows C++; he's just wondering if he needs another language.
Michael Myers
@mmyers: I know, that was just for my own personal edification :) I keep meaning to learn C++ but Halo keeps getting in the way :)
Dave Swersky
No harm in learning another language. All software professionals should learn several languages.
David Thornley
@Dave: All languages have to deal with memory allocation and pointers, they are a fundamental aspect of software development. Just because a language hides them from you, doesn't mean you can forget about them.
seanhodges
@Mark: I didn't say "don't learn". I said, "Don't memorize". A skilled programmer can discover what they don't know about a language, which makes them fearless about learning a new one. There's no reason to have to "choose" which new language to learn if you have the right attitude.
Chris Holmes
@Sean: Absolutely... I didn't mean to suggest that those using C#/Java/etc don't need to understand allocation and pointers, just that with C++ the level of understanding has to be much higher because of the need to manipulate those things directly.
Dave Swersky
+15  A: 

C++ is not even close to being dead.

My experience:

Bloomberg, Reuters, and all their bank/trading clients who want low latency market data feeds use C++. (Fidelity, JPMorgan, BNP, Citibank, etc.)

The defense industry uses C++. (among other languages - Java is also popular)

These industries also use java and other languages, but C++ is hard to beat. Note also that there is a HUGE existing C++ code base that will take a long time to go away (if ever)

It is not hard to know and use them both. Don't worry too much about a particular language. That is not the real crux of developing software.

Tim
A lot of embedded controls/systems and PLC's also use c++.
Syntax
A lot of the defense industry uses Ada and C++
ceretullis
+19  A: 

C++ is still used extensively for performance intensive tasks. For example, I do a lot of work with video compression and decompression - it's all C++. Partly because we need the performance, and partly because all the 3rd party libraries which need to use are C++ so it's easier to integrate with them if we're using the same language.

+4  A: 

Many defense contractors, especially when dealing with hardware, use C++

Many makers of advanced medical equipment (e.g., MRIs) use C++.

I say learn both if you can. It's good to have the C++ foundation even if you end up in a sandboxed language like C++/C#. Too many people don't understand the basics.

Note that different cities have a majority of jobs in a specific language. Go to the craigslist job boards for the city you think you'd end up in and see what they seek. For example, Pittsburgh is a C# town whereas New York is more balanced.

Uri
+18  A: 

A brief off-the-top-of-my-head listing of projects that use C++:

  • Device driver development
  • Games
  • Advanced engines (audio, image processing, etc)
  • Telecom
  • Embedded software (devices and such)
Dave Swersky
Embedded is less common as time goes on? Not really: the number of embedded devices is only going to grow larger.
Zan Lynx
Not the number of embedded devices, the use of C++ on them. It seems to me that higher-level languages are becoming more common on embedded systems.
Dave Swersky
Dan
If you consider C# and Java to be higher-level than C++, then .NET based handhelds using C# and Blackberrys running Java ME are examples of devices running something other than C++...
Dave Swersky
@Dave: I have to agree with Dan. Embedded systems capable of running managed runtimes are vastly outnumbered by those that can't. I think the number of embedded systems programmable with C++ will increase, although I also think C will remain the dominant embedded systems language because of the simplicity of C-based toolchains (C++ tools still need to be ported, and most embedded vendors don't write their own toolchains).
Ben Collins
+2  A: 

Your university didn't have any Java based courses? That's odd!!

You should learn not just C++ and Java, but should be exposed to several languages and paradigms

hasen j
+10  A: 

Some site calling itself Google reckons it uses C++ extensively. Thank God they don't need performance to index the few websites out there.

If this Interweb thingy takes off, they'll be in real trouble though. (-:

Seriously though, apart from the current change of channel (reversion?) to C and Perl, the previous four projects were all C++.

  1. a large scale departure control system for several of the world's major airlines (30,000 10MB log files per day)
  2. a flight training simulator and ground based software proving platform for a new military aircraft
  3. a large scale framework for an existing air-traffic control simulator that was used to incorporate the new Aeronautical Telecommunications Network (ATN)
  4. an advanced radar processing and display system for an on-route air traffic control centre

All really interesing.

Rob Wells
I wonder what the internet would've been like without Google!!
hasen j
If not google, someone else would have been their in some other fancy name! (jibjaw, jiggle, nibble... anything crazy)
AKN
+1  A: 

Java is great until you have to start caring about the details it abstracts away. Most people don't need to do that.

MSN
A: 

C++ is heavily used in embedded systems. It is being used in UI development. For eg. famous QT framework is written in C++.

Ultimately it depends on what you want to do. If you want to work in embedded systems, better learn C/C++.

chappar
+5  A: 

C++ is still used extensively in engineering applications, such as high-end CAD/CAM systems.

I think the death of native code is much exaggerated. Even Microsoft has backed away from making C++ all about .NET in Visual Studio 2008. It seems to be actively improving its native C++ development tools again as well as making interop with the managed world more easy.

Nick
To be honest, I think Microsoft just wanted a competitor to Java. :)
Jake Petroules
+1  A: 

My advice is to master whichever language you enjoy more. I know C++ and Java well, and have used both professionally. However, I would never accept another C++ job because I find C++ tedious and mind-numbing. I rather invest my time mastering more interesting languages.

Craig P. Motlin
+2  A: 

I tend to agree with your cousin. Java definitely is used in more enterprise applications (think things that a bank or insurance company would need), while C++ is used in more "niche" markets. I also agree with you that Java is easier to learn and master than C++. No shame or offense in admitting that.

We use both where I work, writing embedded software in C++, but communicating with it from GUI apps written in Java. There's definitely plenty of room in the software industry for both (and many more) languages.

Bill the Lizard
+1 for "No shame or offense in admitting that."
AKN
A: 

I use C and C++ regularly at my job where I work on embedded devices. We're not talking super low level stuff, here, either. I do mid-level and UI work. Think Qt, Gtk+, Windows Mobile SDK, etc.

Evan Shaw
+1  A: 

I've been writing in C++ primarily for internal and external desktop applications within manufacturing and telecom companies for a long time, and only worked full time with Java for about 1 year out of 16.

Java never seemed to take over the desktop like they were predicting back in the mid 90s when it first came out, and now C++ seems to have more competition from .net and AJAX/web applications.

I can't really speak for it's use in back end systems, but I have seen more of it there than I've seen C++, so it depends of what kind of programming you are talking about (e.g. user facing vs. internal systems).

crashmstr
A: 

C++ is heavily used by ISVs. Think Microsoft, Adobe, Oracle, Sun, Symantec...

Nemanja Trifunovic
+5  A: 

C++ is not anywhere close to being dead, and as suggested by others, don't marry yourself to a language. If you're learning C++ in terms of job prospects, I'd rather suggest you pick up a representative of a programming paradigm.

  • C - Imperative programming
  • C++/Java/Obj-C - OOP
  • Lisp/Haskell/Scheme - Functional Programming

Getting adjusted to the paradigms is usually harder than picking up the language itself. Hope others would chime in for other suggestions.

Calyth
+4  A: 

My advice, learn C#. These days almost 50% of the job listings were Java and almost the other 50% were C#, there were only a few listing C++.

That said, the people using C++ know why they are using it and probably have good use cases for it... meaning you would really learn how to use the language at the highest levels... meanwhile companies slogging out business logic applications in Java/C# will probably not teach you as much about programming as quickly.

If you do decide to take a C++ job, make sure the shop uses the STL effectively and that they are using Boost. Not looking at using Boost/STL, but actually using it.

ceretullis
...or Qt. C++ alone even with STL is only for masochist programmer Boost or qt can boost productivity in c++ many times than bare STL.
mhd
+2  A: 

Most packaged software is still written in C++. That means games, office applications, graphics and video editors, and operating systems. In fact, if you think of the software you use every day that isn't online, chances are it is written in C++ (or C or objective-C). It's not written in Java, Python, Ruby, Perl, etc. While packaged software is becoming less prevalent, it's still used a whole lot and isn't going away anytime soon.

Operating systems, whether embedded or for the desktop are almost exclusively written in some C language. Attempts have been made to write them in Java or C#, but none of those have worked out. All of your drivers are written in some C variant as well. I don't see this changing any time soon.

Steve Rowe
A: 

I had to scroll all the way to the bottom to finally see a post mentioning video games. C and C++ are huge in that industry.

As far as the "What should I learn question." That's pretty open ended, you want to learn as much as possible. So yes, you should learn both of them. As a few people have said, C# is a good one too. You should also learn Python, Ruby, or PHP and some web frameworks (Rails, Symfony, Django, ASP.Net). Web apps are pretty big these days.

If your bubble consists of only C++ you aren't going to be very marketable.

EDIT: Oops, I guess games were mentioned a lot more than I initially saw in here. My bad.

Carter
A: 

Game industry looks like go with C++ forever.

Jace Jung
+1  A: 

Well I suggest learning more than a couple languages. I work in the communications industry and yes we use C++, however a lot of projects we are working on are in Java as well.

I suggest you learn:

1) C++ / C 2) Java 3) Erlang or Haskel 4) Ruby

This will help you understand concepts that exist in one language but not in another. Also helps with marketability.

Take a look at the tiobe programming index and you will get a feel for languages on the rise.

Signal9
+2  A: 

Bjarne Stroustrup has a list of companies/applications written in C++.

Richard Corden
A: 

In my career I've developed C++ for:

  • Server applications (Securities industry)
  • Embedded software (Wireless telecoms)
  • Desktop application software (Wireless telecoms)

I've also seen a lot of adverts for C++ developers in the defense industry. There is work out there for C++ developers, not as much as there has been in the past, but still plenty of work.

Though I say it wouldn't hurt to learn Java, it is a good skill to have under your belt.

Dr. Watson