Most people would recommend an easier language as the first one, but I think it's just fine to learn C++ first. It will certainly provide you with a much better understanding of how computers work than if you went straight to a higher level language. |
I think it was true about 20 years ago. Now C and C++ hardly reflect the model how computers work. The physical model of computation used by modern CPUs differ greatly from how you code even in some pretty low level laguage like C. Pointers don't point to physical memory addresses. Instructions are not processed sequentially. Both branches of "if" are taken simultaneously. The same instructions don't take the same numbers of cycles. And so on, and so on. There are so many levels of "magic" below, that you cannot claim you understand how computers work, if you only know C or C++. You only know some simplified model of it. Just the same as if you were programming Python or Java, except the Python's or Java's model are even simpler.
If you want to know how computers work, you should study first analogue, then digital electronics, computer architecture and finally some assembly language. So you should probably start from getting yourself an oscilloscope and multimeter instead of PC.
Regarding the original question:
I think it is more important to learn some general concepts like assignment, iteration, function call, recursion, type, compositions and inheritance, some common data structures like hashmaps, higher-kinded functions, currying, pattern matching, generic and higher-kinded types, exceptions, streams etc. For this a single language is probably not enough, however, I don't think C++ is the best one - it has just too many things that are not needed at all to be a successful application programmer, and it natively supports too few of that general programming concepts (or the support for many is only partial - recursion, ok you can do it, but tail recursion is practically useless).