Ok, C++ is at the top for pay, but limited jobs. You are about 15 years too late for the C++ peak.
I still get calls for C++ programming since is so difficult to get folks for it.
C++ is still the standard in the CAD/BIM industry, and IMO that's unlikely to change any time soon. And that's if you're lucky -- I'm sure there's still lots of Fortran code if you dig deep enough into some of the products.
I probably was not clear, but the point I am trying to make is that OP needs to hit the sweet spot where you are paid high, but there are plenty of jobs available if you want to move.
In terms of career advancement/job opportunity, I would definitely look for technologies where the jobs are not in niche industries (ie, not many jobs or chances to job hop) and where the pay is high.
Unfortunately, since there is not much new C++ development, most of the work will be maintaining older code and writing small updates. For a software developer who likes to build things, this is quite a let-down. That is why I do not take those jobs even with the higher money being offered.
That's not how it works in this industry: there is still a huge number of "new things" that need to get built (on the forefront of computer science, no less: large-scale simulation, augmented reality, AI, etc.), but the existing codebases are way too big to throw out and start over. Besides, the prevailing perception (not that I agree) is that managed languages like C# would be too slow anyway.
If the OP is in the CAD/BIM industry and wants to stay there (as opposed to getting some random software dev job that has nothing whatsoever to do with his Tekla Structure drafting skills), then C++ is the language to learn. And IMO, being in that niche between software dev and some specific problem domain is exactly the right career strategy.
(That said, I agree with Ender that it's not the best language to learn
first. The OP's goal is definitely not an easy one.)
If the market moves in 'waves' (which makes sense), what came immediately before and after C++? Assembler? Also, you say that there is a low job market for Cpp but then also state that it is hard to find people to fill those jobs. That seems contradictory...? Are you basically saying there is little demand for C++ and because of that there are significantly fewer options out there, but it is still easy to find a job? Just curious.
In the CAD industry, the progression was probably something like Fortran -> C++. Before Fortran, computers weren't really capable of CAD anyway (at that point we're talking about mainframes using punchcards and line printers for I/O).
IMO the real issue is that the CAD industry is small compared to the "social web app
du jour" or "boring as shit line-of-business application" industries.
I'm guessing your referring to SolidWorks... (And hopefully not CAD :p) Always interesting to see how the other half lives... :)
I'm not sure if this is a response to my "I work for a competitor to Tekla" comment or my "Fortran if you're unlucky" comment.
(I hesitate to reveal my employer publicly on the Internet, but it isn't SolidWorks either.)
I would be okay with entering into the industry through this window. My specific circumstances allow for creation rather than just maintenance and I can always learn more and expand if I need or want too. What would be good to learn aside (or in addition to) Cpp? Where is the industry going?
As for "where is the industry going," I'd say higher levels of design (e.g. attempting to automate the job you do as a detailer so that the architect can just draw the building and generate shop drawings himself that aren't nonsense), augmented reality so that clients can walk around in their building before it gets built, computer vision so that a robot can scan the structure and the software can automatically generate as-built drawings, analysis (structural, energy, etc.) incorporated more quickly and earlier in the workflow so that (for example) the architect can site his building for passive solar or figure out that the ridiculous cantilever he wants to do isn't going to work while he's still in the space planning stage of the design... stuff like that.
However, C++ isn't really a language I'd ever suggest people learn as their first language.
A whole variety of reasons.
I would like to hear the reasons if you wouldn't mind. If I go this route, I plan to learn html and css, practice some in that with a few mini projects, then learn Java, then expand into Cpp. Is that necessary? Is java unnecessary? Thanks!
First of all, HTML and CSS are not programming languages. They're markup languages -- they are used to create documents, not programs. They're so easy to learn that there's no harm in doing so, but you shouldn't expect them to be relevant in any way unless your job is something like "write some glue code to extract the code checking output from this model and stick it in a web page" (which might very well be a good starting/intermediate project for you, actually...).
Second, the thing about C++ is that it's kind of the "kitchen sink" of programming languages. It's got so many different features and there are so many styles of doing things in it that it's almost possible for two different programmers to both be competent at their own subset of C++ but unable to read each other's code. It also spans the gap between being simultaneously
both a low-level language like Assembly (which is all about managing the fine details of the computer -- in particular, manually keeping track of where particular bits of data are placed in memory) and a high-level language like Java (which is all about creating abstract data types that model the problem domain). You need a
lot of computer science background to be good at it, whereas it's easier to get by with less in other languages (and less complicated industries -- like that line-of-business stuff I mentioned before).
Third, "learning Java" (or "learning C++," for that matter) is the wrong way to go about the whole thing. "Learning object-oriented programming concepts and coincidentally implementing them in Java" is closer to what your goal should be. Before that, though, you should "learn about algorithms, functions iteration and recursion" using a language like Scheme or Python, and later you should not "learn C" but instead "use C to learn about pointers and memory management." By the time you do all that, being able to program in C++ (or any other language) means not much more than looking up the syntax.