Some high-level ideas here:
There's lots of opportunities in programming to make mistakes, or where they're faced with big open-ended problems that a programmer can build an entire career in dealing with in themselves. Being aware of what resources you need to look for and learn from is one of the first steps to getting what you want out of your interactions with those areas. If he persists in learning programming, he will soon run into these areas, and how well he handles them will play a large role in determining how successful he is as a programmer. A small number of examples of different domains that have unexpected nuances which suddenly become important to a new programmer, and catch them by surprise:
Internationalization
Password handling
Interacting with the host operating system and filesystem
Interacting with programmers from groups with different social norms and standards than they're used to - this is partly solved by READMEs and project documentation, but only partly. Social skills are important.
Interacting with end users
Programming languages often have weird corners to them which can waste a lot of time, cause a lot of confusion, and cause bugs. Looking at C and C++ especially, but no programming language is blameless.
He'll have to test his code. If he needs to do involved tests on his code, which he might eventually, there are a few areas of testing code are virtualization, unit tests, and fuzz testing. These all take significant effort to learn how to do.
Ethics, legal issues, and politics.
GUI programming
There are plenty more areas, of course. I'm not saying this to discourage you or your son - learning about these sorts of things can help your son grow as a programmer and maybe even as a person if he's fortunate. But my biggest piece of advice is to be very careful where you put your time and attention on, in programming, and probably in life in general. There's no limit to the time you can waste on being foolish, except the limits you have for yourself.
My second biggest piece of advice is that maybe he should switch to using Linux and Free and Open Source Software at some point. It's very convenient from the perspective of a programmer who's very motivated by being engaged with a community or by benefiting others - he can learn about a community he's likely to want to engage with in the future, he'll be more able to change aspects of his computer to suit his needs or desires, and honestly, my experience as a Linux user who's learning programming is that learning how to use Mac and Windows feels more like work than learning Linux does. Learning how to use Linux feels like learning how to program.
Maybe you would want to introduce him to Godot and Blender, since they're FOSS software, and less at risk of weird decisions being made with them like happened with Unity, where companies pulled a very weird and developer- and user-hostile and security-hostile decision out of nowhere.