As a person who started with high-level languages, I will say that they severely hinder one's understanding of how systems really work. I recommend having him start out with the C programming language or a similar low-level language.
Some exercises that you could have him do include:
- Programming a ranked-choice-voting algorithm
- Writing a program that takes a PPM image (I have never seen an easier image file format to work with) and performs a box blur with the surrounding pixels, spitting out the new image to a file
- Writing a text adventure in the terminal. Don't force him to use regex, though. Just have it have numbered options.
On programming games:
If you want him to program a game for himself, I would recommend SDL (SDL2 or SDL3) if he's doing it in C. It may be in his interests to program the game in another language than C, though, since C can be difficult to program games in, for beginners.
Some good ideas for a game to start out with are Yahtzee (like the KDE program Kiriki), Minesweeper, Pong, or Breakout. If he's doing it with a game engine, I recommend having him start out with Godot. It's FLOSS, and GDScript is easy to learn.