Contributing to an open source projects is a great way of learning too. It forces you to read and understand the project’s code and concepts behind it. Then you practice coding by implementing your new feature. You also need to test it thoroughly. Finally, you will get a code review for your code.