There are lots of different ways that you can contribute to open source projects:
Open issues - often projects will have open issues that you can help out with, providing support or patches so they can be closed.
New features - perhaps a library is missing a killer feature, can you add it? Often it’s worth speaking with the maintainer before starting big features to see if it will be merged.
Documentation fixes - clarifications of parts you find confusing, inconsistencies with current behavior, spelling and grammar fixes, etc.
Convention fixes - are most binary checks named IsFoo() but one is named Foo_exists() ? Do a quick refactor patch for it. Is one Exception named oddly, or have an unclear message?
Examples - does an example highlighting something you’re confused about exist? Once you figure it out, whip up an example and contribute. Others are also confused about it - I promise.
Code commenting - do the comments contradict the code? Is there something in the code that confuses you? Once you figure it out, fix it and submit.
Testing - clone the repo and run the tests. Do you get any failures? Do you notice any areas lacking in coverage? Testing is also a great way to find out more about the internal workings of the project.
Looking for other projects to help? Check out these great initiatives:
Give back to open source, one issue at a time, with CodeTriage. You’ll get one issue from your favorite repo per day to help you dig deeper, learn more, and stay involved with the code you rely on.
Easily filter through issues across 800+ contributor friendly projects and get curated recommendations.