Here’s my take on the whole issue…
C++ definitely isn’t a core language for us, but I think it’s good to have someone on the team who knows it. If C++ is an option for you probably depends on what you do and which DCC packages you use. If you’re in a Maya shop you’ll probably encounter more C++ than C# and it might be the opposite if you’re in a Max shop. Personally I recommend C# for Max and C++ for Maya for people who want to move on from MXS or Python respectively.
At the core C/C++ is not a difficult language. You just need a command line compiler and a text editor and you’re ready to go. (confused about header files and such? The make code easier organizable and compilable, but they’re not a must at the beginning) You can make it more difficult by choosing an IDE-suite but then again if you’re a newbie to Python you probably don’t want to go through a full fledged Eclipse setup either. You can make C programming as difficult as you want, just like with any language. The more “pythonic” you write your code in Python the more confusing it will be for outsiders, and the same is true for C. The good thing is that C is very fast and we don’t really care for milliseconds like an engine programmer does, so even if we don’t fully optimize our C code and instead write it nicely and readable, it will be much faster than anything in e.g. Python.
If you want to learn C, then start with ANSI C, which will teach you the basics - data types, functions, arrays, memory management. Then move to C++ and get an overview how classes work (you can skip operator overloading and advanced stuff for now but look it up later when you’re more advanced). Then I really really recommend Qt. It shields you from C’s old fashioned default memory handling by giving you awesome convenience classes. At this point you can be productive, but keep learning about what’s going on behind the scenes (e.g. how C’s memory handling works). Not only will you encounter this sooner or later, but it will give you deeper understanding about the mechanisms you find in most other programming and scripting languages and some of their quirks may make sense after you learning how C deals with it.
It’s like being a Max/Maya user and when you first pick up e.g. “Akenine’s Real Time Rendering” book it suddenly makes sense why some stuff in Max or Maya behaves the way it does. It is the same when you learn C and then look at other languages.
What makes C++ difficult to read/learn is usually your environment - e.g. the OS, your UI framework, etc. This is just my opinion, but I find Windows UI code in C just a mess, whereas Qt code is really easy to read - actually you can often take C++ Qt code and port it right away to Python - it’s that esay.
Sure there’s some advanced concepts in C, like pointers, but they have - sometimes more limited, sometimes more elegant - equivalents in other languages.
How can you fit C++ in your pipeline as helper language?
- Extend Python: use third party libraries and make them callable from Python. We took a maya IFF reader library and turned it into a Python module. We did the same with a library calling Hansoft and the same with a library that creates NTFS junctions.
- Extend Photoshop: we use this to add new commands to Photoshop’s extendscript and now we can, for example, talk directly - no more COM - with it from other apps.
- Extend ZBrush: same thing we did with Photoshop
- Qt: We got tired of the huge memory footprint (and some packaging issues) of some py2exe programs. 4mb vs 34mb.
- small CLI apps with no dependencies: use them for installers, pipelines, etc. Runs when there’s no Python, no NET framework, no Powershell or whatever helper that’s required. Totally failsafe.
- Speed: especially loops tend to be really slow in Python. We have some crazy requirements from clients about UV shells, distance between UV points and whatever crazy things float their boat. Iterating through every vertex, face, UV point, etc is just much faster done in C.
Having said all this, if you come from Max, I’d say C# is the better choice