This piece was originally written for Your First Year in Code by @isaacdlyman . Even though it didn't make it in the book I still wanted to share it with the community and hope that it helps at least a couple of people with some of the tips.
The title might seem a little vague because it could mean a lot of things. You could contribute to charity, your local community, ... This will also help improve yourself. But the specific topic I will be sharing here with you is how contributing to open source projects can help improve yourself as a developer. This is something I try to apply myself as much as possible and I can confirm that it has helped me learn new programming languages, environments and tools.
One of the first projects that I contributed to was for an Android library that I used in a personal project. I added Dutch translations to the library, it was only a couple of strings in an XML file so it was very small but still I learned a lot from this contribution.
I just got my bachelor degree and started working as a professional programmer so I didn't have much experience with Git and Github at the time. So with this contribution I learned how to make a fork of a project on Github and how to pull it in locally on my laptop so I could work on it. After committing the changes to my remote project on Github I also learned how to make a Pull Request to the project.
This small contribution was for me the start of many small and some bigger contributions to many projects.
Look around on Github (currently the biggest platform for open source projects), go through articles from people sharing their project or maybe look at one of the applications or tools that you use there is a big chance that at least one of them is an open source project that you can contribute too. The most important part of finding a good project to work on is that it also interests you. It is something that you use or something that you think does important work. If you decide to work on something that you might not find useful or interesting there will be a big chance that you will never finish your contribution.
If you have found a project that you want to contribute to here are a couple of tips to look for before diving in.
I think this is a very important one to look for. Check if the project has been active in the last 3-4 months. It would be a shame that you might have put lots of hours into your contribution and that it will remain an open pull request that never received the glory of being merged.
Looking at open issues is also a good indication how active a project is. However having lots of open issues doesn't mean it is a "dead" project it could also indicate that it has an active community so it is also important to look at the dates of issues.
Also looking at open issues is also a good way to find something that you can contribute. Lots of projects also use the label system, this might help find a good beginner friendly issue.
This is not a requirement but does help a lot to get your contribution approved. Does the project have good guidelines? Do they describe how to send in contributions, do they have coding standards that you need to follow, testing tools that they use and so on. The more info they supply the smaller the chance that your contribution will get denied (if you follow their guidelines).
This might not apply for every type of project but still in many cases this is needed. Is there a well written and up to date installation documentation available? This is extremely helpful if you are setting up a new environment that you have never worked in before.
Especially for newer programmers it might be scary to contribute to a project, even a smaller one. Trust me I have been there. You might think that it will be denied (for whatever reason) or that you might write "bad code" and they will just smash your confidence.
For me this has not been the experience, each community that I contributed to have been very open to contributions and if something wasn't correct they pointed that out and I adjust my code. So don't holdback and dive in!
Doing a contribution doesn't always have to be a new feature there are lots of things you can contribute to a project:
- Documentation, lots of projects love these contributions
- Bug fixes
- Improvements of existing features
- Updating packages/libraries
- Refactoring older code
It is easy to work on a project in an environment that you are comfortable with but this is an opportunity to work on something new, something that might require you hours of searching online or asking for help. This is a good thing, here you will learn the most from.
If you work in PHP try working on a Node.js project, if you work in Java why not try a Python or Ruby project, etc. Learning new environments might give you a different perspective about solving a problem. You will learn the benefits compared to a different language. Why some languages work better in specific use-cases.
Besides learning a new language you might work with new tools that are being used by the project. Building tools, testing tools, linting tools, ... maybe even something small like a Github bot that you can use yourself in your next project. There are lots of tools that have a free tier for open source projects.
Start with something small, like a documentation improvement. This gives you the opportunity to get used to things like Git, Github, the environment (if needed for your contribution) and the reviewing and merging process.
After getting your contribution ready and making a pull request on the project there is always the possibility that it won't get accepted and merged right away but it is also not denied. There might be a comment from a maintainer or a community member requesting to change something. You shouldn't see this as a negative comment but take it as positive feedback, learn from it. This could be as simple as a coding style error that you made, a missing space or a variable that they want named differently.
Of course the main benefit is learning a new environment, gaining new knowledge and as a developer you should always keep learning and try to break out of your comfort zone.
Other benefits are learning new tools, coding styles and/or code testing. Depending on the type of project there could be a lot of things you can learn from just making 1 small contribution. You gain knowledge and the project gets improved, it is always a win-win.
Other than the knowledge benefits mentioned above there is also the networking benefit. While working on different projects and interacting with different communities you will learn new people, they can give you advice or even become friends. You can connect on social media platforms and reach out in the future to your network if you need help or maybe if you are looking for a new project or a job.
Besides these benefits there is also a long term benefit, you can show what you have worked on. Lots of recruiters or companies look at public Github profiles, this shows them what environments you have worked in and might indicate what interests you have and if you might fit in their team/project.
Contributing to open source is a fun way to learn new things while supporting the projects that you like. For you personally as a developer this will always have short- and longterm benefits.
As a developer it is okay to make mistakes, even senior developers do. By contributing your changes will always be reviewed by at least one person before it gets merged, if not that is the project maintainers fault but that is an other topic.
The only source of knowledge is experience.
-- Albert Einstein