![](https://lemmy.world/pictrs/image/ca7da707-3cb6-4fc1-bdb6-9d6e4ef4e652.png)
![](https://programming.dev/pictrs/image/170721ad-9010-470f-a4a4-ead95f51f13b.png)
Code should absolutely speak for itself. But the occasional comment is still good to explain the ‘why’ of the code when the why isn’t very obvious, often due to a niche requirement. Also any time you have to break out a hack, that needs comments up the ass, what was the bug, what URL did you find the fix at, why does this hack work, etc etc. It’s very satisfying to go back and remove those hacks after they are no longer needed, often because the underlying technology fixed the bug that had to be hacked around.
You create as many as is appropriate for the story. If you are picking the race of characters for any reason other than the story itself, you are sacrificing the quality of the story.
There are some practical concerns if your story is turning into a film. If you are filming in China you are probably going to have a lot of Chinese, if you are filming in Kenya, you are probably going to have a lot of Kenyans, if you are filming in Germany, you are probably going to have a lot of Germans, etc, etc.