Before I posted this, I read through the roughly 60 posts that were here. If your child is interested in the lore and mechanics of gaming, I think the prime focus should be on creativity and writing. I don't think you can necessarily "teach" creativity, but I think you can encourage it. I would probably suggest a lot of reading of fiction from as great an expansive base of styles and genres as you can. Through exposure to a variety of material, they may find something they like and build/expand upon something they like. Very little is truly a brand new idea. Most fiction is an adaptation/twist/extension on a previous idea.
If your kid wants to both write the story behind the game and the code that makes it happen, large AAA games are not what you want to strive towards. There tends to be a strict separating of responsibilities.
If your child is insistent upon that, as far as development goes, a large number of people have already post some great links to development resources. A lot of those may be over the head of a child, though, let alone a seasoned non-game developer./p?
Actually this is false. It is possible to write a language that is both safe* and compiles itself.
This is not true, at least not initially. And your example of LLVM (and clang) completely disregards its history. LLVM/clang are only relatively recently self-hosting (can be used to build themselves). LLVM & clang are written in C++ and for a long time relied upon an external C++ compiler (typically gcc) to be built.
At least z/OS has some pretty aggressive protection going on that x86 doesn't, otherwise I'd have no hope for the ol' systems (they should hardly ever have existed really then)
That may be, but it didn't stop me from crashing an entire LPAR, knocking the entire development staff off the mainframe by running a simple select sql statement against DB2.
One of the simplest constructs in C++ that makes me cringe is when I see people do:
std::string foo = "";
instead of:
std::string foo;
The reason being, although functionally equivalent, the second version results in faster, smaller code. On every implementation I've looked at the first one results in calls to strlen, a possible memory allocation and a strcpy. The second is a mere memset of the internal pointers to null. Even though us humans that understand C++, the compiler knows only the language. It typically does not know anything about the standard library. Yes, there are exceptions, such as compile-time warnings/errors for mismatched arguments to printf style functions. But, those are exceptions, not the rule, and they are few and far between.
When I see the first form, I immediately understand that I am looking at code from some whose primary language is not C++, but instead likely Java or C#.
I agree that language comes down to preference and usually comfort level. Having +10 years experience with C++, C# and Python each, while roughly a year experience with Java & Ruby, my languages of choice, in order are: C++, Python, C#, Ruby, Java.
I particularly like C++ because of it's raw unabashed power. There's very little magic, and nearly every language construct is straight forward and easy to understand. Granted, there are a ton of subtle gotchas an nuances that will trip up the inexperienced and even the veterans. I like Python because the language itself is clean, succinct and terse (but not perl level terse). It also has the benefit of generally being easily readable by non-Python folks. I hear a lot of complaints about the whitespace, but when it comes down to it, it's a non-issue when you're used to it. If you indent your code well and normally in other languages, your code looks the same, but you've saved having to type the braces. One of the other things I like about Python is how well and cleanly it interfaces with C/C++. It's C object model is one of the cleanest and most straight forward I've ever seen. It is a breeze to interface with and expose C/C++ APIs to. Unlike perl with its abomination of a library: XS. I like C# for a lot of the same reasons: mostly clean language, expansive built-in library and removed a lot of the idiocy of Java (exception specs? ew. Double is an object, double is a value, wtf?
I have very little experience with Ruby, and I'm still learning. It seems a mix of Python & Perl which, I tend to stay towards the more Python-ic approaches in Ruby because they're clearer and make more sense to me.
As far as looking for a job, money isn't everything. A year ago, I left a job pulling in $155K base with bonuses around $40K per anum doing mostly C++ & Python, which I liked. But after a decade at the company, I'd enough of the stress and the B.S. politics, so I left for a job where I'm just pulling $145K base and little to no bonus doing mostly C#, Java, Ruby and maintaining legacy Python code. And, for now at least, I'm happier. Sure, I miss the money, but I still make enough.
There are two ways to write error-free programs; only the third one works.