I am dealing around with C# .Net for almost around a year now. I got lots of experience (I owe most of it to guys at stackoverflow).

Now I am thinking to start working with C++ as well. Mainly because I would like to be able write codes resulting in applications that are not .Net dependent so they can be executed in most of environments also having cross-platform in mind. Although I have to confess, writing code in .Net with C# and Visual Studio can not be easier nowadays.

Of my other reasons I can name, since I am studying electrical engineering, who knows maybe I later need to write drivers for hardwares!

My questions are:
1- Am I right with the idea of learning C++ I mean is it add to my value if say I am going to work as a developer later?
2- What tools will I need to start programming in native C++ that is perhaps compilers and IDE

I think adding any new language is going to add value to your resume, but since this is mostly a question about the tools you need to get started the faq suggests SO would be the better place to ask - voting to move it over for you.
–
DKnightJan 6 '12 at 12:47

5 Answers
5

1) C++ and C# looks very similar, but their similitude ends just there (in the look).

2) "Native application" -on both Windows and Linux- are not C++, but C since C is the native language for both the OS kernel API. In this sense, all C++ libraries interfacing the OS are just one level of abstraction away

3) C# libraries (.Net in particular) is strongly based on an OOP hierarchy. In C++, OOP is just one of the possible programing paradign, and not always the most efficient, but ...

4) C++ had a long standardization process that lasted decades. During this process it changed a lot either as a language and as the standard library. Unfortunately many frameworks and libraries developed to support OS native interface where written decades ago, and still have long no-more standard backlog. As far of today, there is just no C++11 GUI library that is really inspired by C++11 itself, rather than making pre-C++11 code compilable in C++11.

5) As a result, learnig the "state of art" C++ will make you fine and efficient in deploying your own algorithms and classes, but drops you back to C wherever you need to interact with the native API or ...

6) Learning one of the existing C++ framework that abstract the GUI concept (Like MFC) sometime even on multiple platform (Like GTK, WxWidget etc.), will not make you a "good C++ programmer" since that will bring you back to C++03 or even C++98.

All that said, you have two paths:

a) Learn a framework and through that learn C++ (or ... that part of C++ used to sustain the framework itself). This will make you fast productive, but less efficient in code structuring and proper reuse. (you use "past techniques", and "framework specific tips & tricks")

b) Learn C++ for what it is (start with book that teach C++ together with its library: avoid all books that talk about pointers and array before vectors and containers), and once you understood the proper practice, develop yourself the API wrappers (is not that difficult) to sustain your own apps, but be ready to replace them as soon as new framework will come for C++11 GUI system.

"Native code", on Windows, generally refers to code that is compiled straight to x86 or x64, not through the CLI and not requiring .NET. It can be written in any language, and pretty much any language can work with the Win32 API. There are also frameworks (like MFC) that handle that interfacing for you. Calling C the native language of Unix/Linux is reasonable, since you can frequently see the source code, which is normally in C. In Windows, typically all you see is a C API, usable by any language.
–
David ThornleyJan 6 '12 at 22:44

I have never used Visual C or windows environment, so my answer will be biased. I feel if you want to learn c++, you should do it in on Linux. As Linux is open source platform, and used extensively on heterogeneous environments such as server, mobile, desktop, you will find lot more support when you run into problems as opposed to windows.

Next, you would do much better if you begin with plain c++ as opposed to Visual C++ as standard c++ can run on multiple devices. Also it is good time to jump into C++ as the new standard C++0x introduces lot more capabilities. Here is what the creator of C++ has to say about the new standard

“C++11 feels like a new language.” – Bjarne Stroustrup

Lastly, C++ is not a small language and will require at least a year of continuous learning and coding to get familiar with it. So sooner you start, the better it is. Also, if you decide to jump into Linux environment, you will sooner or later feel the urge to learn C, which looks similar to C++ on the skin, but is a very different beast under the skin.

+1 For suggesting to learn C++ and C the Linux way! Which means you can later move to other UNIX flavours rather easily, or even program on Windows using cygwin or mingw.
–
GiorgioJan 6 '12 at 17:09

"Standard C++" run on multiple device only for console character based apps, since that's the only IO model the standard C++ library support. Everything else is "beyond the standard" and cannot work "properly" on multiple devices without castrating then to a shared common denominator.
–
Emilio GaravagliaJan 6 '12 at 20:43

Learning nearly anything new adds value. If you've got a spare time for it - just do it, without questioning the reasons.

As for this specific case, C++ is quite an interesting language, its numerous pitfalls and ill design decisions contributed more into the modern languages design than any other language. Learning from the mistakes is always a good idea. But do not forget to pay enough attention to the other languages too.

for some of the basics you could use visual studio to learn c++, but visual c++ is different than regular c++, so you may want to branch out into something different after a while, but all the basic stuff is the same in visual c++ and if you fee comfortable with visual studio its less to overcome in learning a language.

In what way is Visual C++ different from regular C++, except for standards conformance issues? Are you thinking of C++/CLI, perhaps? (The OP wanted to make native applications, and so wouldn't be using it anyway.) Or supporting frameworks like MFC?
–
David ThornleyJan 6 '12 at 17:27

Learning something new is always positive, but some things might be more useful to learn than others. Since you suspect you may be working on device drivers in the future then getting under the hood is exactly what you should be doing. For the most part, just learn what interests you.