| What languages do you already know? What problem are you trying to solve? I would learn C++ if you need to know it to get your job done. Like others have said, C++ is a complex language. Some people don't like it as a "language", some people like all the features it has. But at the end of the day, it is complex to learn and understand. Also you have to think about a lot when programming in C++. You have to think about objects in terms of their life cycle. Compared to a garbage collected language, this accounts for mental overhead that could be applied elsewhere. A couple of other negatives about C++: 1) Its harder to interface than C. 2) It has many different flavors that vary depending on what platform you are on. 3) Up until C++11 it didn't have built-in regex. A couple of positive things about C++ and learning C++: 1) The STL is great, and has patterns that you can apply to other languages. 2) Generic programming to write re-usable code in C++ can be quite fun, and you can learn how the compiler can help you during compile time (+). 3) Learning OOP in C++ can be an artform, and can be fun. There is a lot of bad C++ out there, but there is some very elegant C++ out there as well. 4) You will learn that C++ is not C. You will also learn to chuckle at anyone that writes "C/C++". (Hint, if they write this, then they do not know C++) (+) Note on this point: Some people from the more dynamic languages might poo poo this as not needed, and that in their favorite language you don't need to define types. This is a mixed bag, on one side, that is true and can let good programmers work faster. However, they either have to not test, or perform all tests at run-time. A compiler and linker can tell you much faster if you have done something stupid like call a method that doesn't exist. In a dynamic language, you have to write tests and hope you happened to test that branch of code where you made the mistake. |