> 5. Extend the projects of others
This is the most important part, and I think it should probably maybe be bumped to the first position on the list. Not telling you to actually do it, ofc. But from my experience this is the part that distinguishes mediocre programmers from good programmers.
When you help with other people's code, you have to read it first. So you learn new things. You learn different approaches, and that's something you won't learn from tutorials and coding by yourself.