No, NO! C++ is horrible for a beginner. Go with Lua instead.
What do you intend to teach him that way? That is like saying "Driving a car is horrible for a beginner, I can teach you to call a taxi". Because that is essentially what you do with Lua. Lua is a language to interact with C99/C++ modules. You can only do as much, as the C++ programmer of the hosting application permits. And Lua makes you feel this.
I would be the last to complain about Lua, it is my favorite embedded script language, but it is not more than that. A small compact language, that is quite capable even of complex scripts, but still, it is not made to develop complete application, but to extend existing applications.
The reason for this is that you will be forced to take care of things you aren't yet prepared to. It's not about laziness, it's about frustration and usefulness. After you get experience on how things work on the surface, you may then want to venture under the hood, and when you do, it'll be way easier than if you had jumped to C/C++ right away.
So he will NEVER be prepared for them at all? Great teacher. A child will never learn to swim, if you always tell it that it is not prepared for swimming yet and should stay in the one-foot-deep pool for toddlers. You need to make it swim when it is still easy to abort the attempt, and then encourage it to swim longer, and into the deeper water, if it is prepared enough. The trick is to start swimming at all and then keep on trying it.
Most current programming languages are based on common elements, and when you've mastered, or gained experience on how one specific programming languages does (or rather, implements) a specific feature, it'll be much easier and hassle-free to explore other options. Actually, a programmer, specially on the professional field, is expected to quickly grasp new technologies, including new languages. Don't do the complicated thing first, but build up your skills.
True and wrong. While there are many common elements in a family of programming languages, there are many different families. Lua is similar to C++ because both use structured programming as core doctrine, but both are so different that you start again at a new language, even if you mastered already the other.
C++ is a compiled object-oriented programming language. Lua is an embedded imperative-functional script language. Two different worlds.
Don't believe on the 'Learn C++, because it's useful', because it actually means 'Learn C++, because it's useful to the experienced'. It's not a flaw, but actually a feature. It's how the language was designed, and it's why you shouldn't expose yourself to it right-away.
I have never read such a huge pile of rubbish about C++. C++ is not for the experienced. Assembler is. Brainf...k is. I would even say that Clojure is. Because all such languages require you to think more than just around one corner for explaining a computer what to do. But C++ is not more useful as any other full programming language. It is a tool. Not more.
But there is something that you need to know about tools: You can use a stone for hammering a nail into the wall. But a hammer can do that better, so if you have access to one, use it. And learning to properly use a hammer as soon as possible in your life pays out quickly, because the simple primitive hammer that you have at home is actually the result of 2500 years of technological evolution and experience - a good hammer is a high tech product. The hammer will always be better than the stone, and even more so in the hands of somebody experienced.
Lua is the stone. It is primitive enough to be used everywhere for everything, but it can't do anything good and relies on the existence of proper tools to achieve any effect. Without installing a C++ library, Lua can't even do basic file system operations (Lua + Penlight + LFS on the other hand is something that you will never want to miss again). C++ is the hammer. You need to think a tiny bit more for putting a nail in the wall (eg, choose the best side of the hammer), but then it does it much better and faster than the stone could ever do, and does not exhaust you as quickly. You can put a picture on the wall with the stone, but with the hammer, you can build the house in which you want to hang the picture on the wall.
C++ is a very explicit language. It does almost nothing, that you did not tell it. There are no secret hidden surprises, like you can have for example in Lua (Just throw a table into a function that expects a string - if the programmer of the function was smart, something happens. if he was not, the program crashes silently.).
The problem what many people have with C++: It does always do what you tell it. It does not treat you like a child, going on like "That makes no sense, maybe he actually meant to do that. I'll fix it without telling him." It will try to do what you tell him, and if it can't do that, it will tell you that so often that you can get frustrated, if you never learned the true first rule of C++ coding: If you fail to solve a compiler error, ask a more experienced programmer for help. C++ is nothing for people who think they are smarter than them all. C++ teaches you programming in the real sense of it. It teaches you to solve problems before you program them.
Of course you need to learn concepts for C++. Like the data types. Or basic historic program patterns, that come from having evolved in primordial times of computing. Luckily, because C++ evolved from C, which was intended to be actually a very simple high-level language that is still so close to the hardware that you can use it without a huge operating system around it. It has only very few rules, just like chess. You can use goto in C++, but there are better statements in it, that do the job and tell other programmers what you intended with the statement.
It is not better for the experienced. That is actually the biggest misunderstanding that you have about C++. C++ permits you to program already great programs with medium skills. It gives you a harder start, because you need to know a bit more before you can write even a simple Hello-World-Program, but then, every new lesson you learn brings you quickly closer to greatness.
If you are really experienced with C++, you can do stuff, that only few other programming languages can. And you only can get that experienced, by programming in C++. If you tell people to give up C++, because the first steps are the hardest, you are doing them a bad service. because the first steps in any programming language are hard, and for some languages, the steps remain hard. Not so for C++. After you survived the first traps, the only enemy for you is yourself. Because C++ does what you tell it. It even crashes right in front your face, like a good loyal dog, if you tell it to do that.
And I won't lie there: C++ requires you to really think about what you want to do. Lua doesn't care what type a variable has. You can turn a number into a string and back, and your program will crash on runtime, if you don't watch for it. C++ will complain already before you can run the program. And it will not be very diplomatic then. That is the price.
I would even go so far to claim, that Lua can never teach you programming. Because all that aspects, that really define programming, the art of formulating problem solutions in a way that a computer understands them, are not taught by it. It teaches you only to do Lua. You can do great things with Lua, if you understood it, and if you really learned programming somewhere else, learning the dark magic of Lua is much easier because Lua does not know stuff that complete programming languages don't have.
C++ is not about knowing how to program with a pointer to a pointer to a pointer to a pointer to a pointer to a pointer to a pointer to an int that you can use as index for accessing an array of characters that is defined by a pointer that is located at the target of a pointer, etc. That is sometimes needed if you program C++ on a small embedded device, like the controller of a car engine - but only very few C++ programmers
ever get good enough for solving their problems that way without punishment.
It is the extreme example that brings the language in discredit, because it does not give you limits on what your program can do - the only limit is the hardware that has to run the program.
But in reality, in 99% of all cases, good C++ coding will be about preventing such language constructs to ever happen to you, or your unlucky successor who has to deal with your program code. And C++ lets you do that as well. You can write great software interfaces that any beginner can use - and luckily, martins was closer to this kind of C++ when he did the Orbiter API.
Programming C++ programs for Orbiter is much easier, than for example making the same with for example just Windows. Even with wxWidgets or MFC, making a simple windows application is about 20 times harder than making a orbiter module.
So, in that sense, it is even easier to learn C++ with Orbiter, than anywhere else, including Linux/UNIX.
One last tip: don't follow formulas and catchy words, unless you understand them. Be it agile, oop, functional, elegant, test-driven. Each and every one has it's flaws and virtues.
Never do anything if you don't understand it. Should be the first rule of survival, but you make it sound like you can actually get old without ever learning it. "Uh, what happens if I stick this needle into this tiny hole in the wall?" is a good start of curiosity, but usually also the end of it.
The same applies to
C++ - if you don't understand it, don't talk about it.
Stand back in awe and watch us move code.
Or ask us a question and don't be afraid that we might give you the answer in return. I have never met a C++ programmer yet, who was really reluctant to help somebody who wants to learn C++. You have not really understood something, if you can't teach it somebody else.