It's a common misconception that contributing to open source is difficult. You might think, "Sometimes I can't even understand my own code; how am I supposed to understand someone else's?"
Relax. Until last year, I thought the same thing. Reading and understanding someone else's code and writing your own on top of that can be a daunting task, but with the right resources, it isn't as hard as you might think.
The first step is to choose a project. This decision can be instrumental in turning a newbie programmer into a seasoned open sourcer.
Many amateur programmers interested in open source are advised to check out Git, but that is not the best way to start. Git is maintained by uber-geeks with years of software development experience. It is a good place to find an open source project to contribute to, but it's not beginner-friendly. Most devs contributing to Git have enough experience that they do not need resources or detailed documentation. In this article, I'll provide a checklist of beginner-friendly features and some tips to make your first open source contribution easy.
Understand the product
Before contributing to a project, you should understand how it works. To understand it, you need to try it for yourself. If you find the product interesting and useful, it is worth contributing to.
Too often, beginners try to contribute to a project without first using the software. They then get frustrated and give up. If you don't use the software, you can't understand how it works. If you don't know how it works, how can you fix a bug or write a new feature?
Remember: Try it, then hack it.
Check the project's status
How active is the project?
If you send a pull request to an unmaintained or dormant project, your pull request (or PR) may never be reviewed or merged. Look for projects with lots of activity; that way you will get immediate feedback on your code and your contributions will not go to waste.
Here's how to tell if a project is active:
- Number of contributors: A growing number of contributors indicates the developer community is interested and willing to accept new contributors.
- Frequency of commits: Check the most recent commit date. If it was within the last week, or even month or two, the project is being maintained.
- Number of maintainers: A higher number of maintainers means more potential mentors to guide you.
- Activity level in the chat room/IRC: A busy chat room means quick replies to your queries.
Resources for beginners
Coala is an example of an open sour project that has its own resources for tutorials and documentation, where you can also access its API (every class and method). The site also features an attractive UI that makes you want to read more.
Documentation: Developers of all levels need reliable, well-maintained documentation to understand the details of a project. Look for projects that offer solid documentation on GitHub (or wherever it is hosted) and on a separate site like Read the Docs, with lots of examples that will help you dive deep into the code.
Tutorials: Tutorials that explain how to add features to a project are helpful for beginners (however, you may not find them for all projects). For example, coala offers tutorials for writing bears (Python wrappers for linting tools to perform code analysis).
Labeled issues: For beginners who are just figuring out how to choose their first project, selecting an issue can be an even tougher task. Issues labeled "difficulty/low," "difficulty/newcomer," "good first issue," and "low-hanging fruit" can be perfect for newbies.
Maintainers' attitudes toward new contributors: In my experience, most open sourcers are eager to help newcomers onboard their projects. However, you may also encounter some who are less welcoming (maybe even a bit rude) when you ask for help. Don't let them discourage you. Just because someone has more experience doesn't give them the right to be rude. There are plenty of others out there who want to help.
Review process/structure: Your PR will go through a number of reviews and changes by experienced developers and your peers—that's how you learn the most about software development. A project with a stringent review process enables you to grow as a developer by writing production-grade code.
A robust CI pipeline: Open source projects introduce beginners to continuous integration and deployment services. A robust CI pipeline will help you learn how to read and make sense of CI logs. It will also give you experience dealing with failing test cases and code coverage issues.
Participation in code programs (Ex. Google Summer Of Code): Participating organizations demonstrate a willingness to commit to the long-term development of a project. They also provide an opportunity for newcomers to gain real-world development experience and get paid for it. Most of the organizations that participate in such programs welcome newbies.