You are making the unwarranted assumption that he has the necessary tools to learn at that point. He has no reason to go learn how caches and pointers work, because they aren't relevant to his experience.But presumably if they're at the point that they want to do it professionally then they're already invested and motivated to learn.
And that's kind of my point. 5 years down the line he's going to end up at a shop that works in both Python and C++, management will have him start pitching in to write low-level code, and then he and his uneducated hacking become my problem...
If management is stupid enough to put a high-level coder into a low-level job without letting them train and without allocating time for a senior developer to shepherd them, then there isn't much you can do anyway besides try to correct issues as they come up and make them aware of issues.
And cache is a horrible example. No language I know of ever exposes it or brings it up. Not even assembly. It's a thing the CPU does that you have zero control over and can only arrange your data in a way that you hope works better and won't completely break when the next CPU revision comes out.
It's just a thing you have to learn as you profile your code, and while C++ gives you more control over it then, say, Python, they aren't going to learn it just by switching languages.
A better example would be memory management which a lot of higher level languages handle for you - but even then, most high level languages do NOT manage other resources like files, handles, network connections, or a myriad of other things which the programmer has to manually manage anyway. So if they already know how to properly handle non-memory resources, it's not going to be too hard to teach them to do memory too.
But I feel we're getting off topic - apologies for the derail.