Why contribute to open source and how to get started
Tags: opensource, github
Published: 2020-08-01 21:17:44

Contributing to open source is a fantastic way to gain valuable experience collaborating with others and working on a "real-world" project.

This is one of my favorite topics to talk about, especially with other students at my university. Open source isn't something you typically learn about in a computer science degree program.

And yet, it can be an incredibly fun and useful way to gain real-world experience with software development.

It is great experience to put on your resume, and can help you land your first internship or even a full-time job. It's useful regardless of whether or not you're a student.

In this article, we'll go over the basics of open source and how to find interesting projects.

We'll also look at a good resource for learning how to actually make a contribution to a project.

If you're already familiar with contributing to open source and you're interested in [maintaining your own open source project](https://dev.to/compscilauren/10-tips-for-maintaining-an-open-source-project-2non), feel free to check out that article instead!

# So, what is open source?

When software is open source, it means that anybody can look at the code.

Anybody can see how it was made, and they can typically make their own copy of the entire project.

They can use their copy however they want, and change the code if they want. It won't affect the original repository.

![Conference room with glass windows all around it](https://dev-to-uploads.s3.amazonaws.com/i/tulufbqy8gv86kbbrlcz.jpg)

> Image by [Free-Photos](https://pixabay.com/photos/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=768441) from [Pixabay](https://pixabay.com/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=768441)

Open source projects are like rooms that you can easily look into and walk inside. You can interact with the things inside the room.

This is different from proprietary software, whose code cannot be viewed openly by the public.

![A locked door](https://dev-to-uploads.s3.amazonaws.com/i/ojev0r3xm39qy7preya1.jpg)

> Image by [John Collins](https://pixabay.com/users/draconianimages-182808/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=2352669) from [Pixabay](https://pixabay.com/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=2352669)

You can think of that like the company keeping their code behind a locked door, only available to people who have access to the room.

It's worth noting that neither option is guaranteed to be more secure than the other. Each option comes with its own vulnerabilities.

They are simply two different approaches, each with their own pros and cons.

You can find all kinds of passionate debates about which one is better online. We won't cover that debate in this article, though.

# Who uses open source software?

Well, pretty much everyone. There are various places on the Internet that cite different statistics. I won't cite any here, but just know that it is incredibly common both as a user and a company.

![Examples of open source software](https://dev-to-uploads.s3.amazonaws.com/i/hz428216vb8jwxegwydp.png)

Take a look at all of this. Each one of these is either fully open source or involved in open source in some meaningful way.

And that's not even the surface of it. There is a ton of open source software out there. Many, many tools used to develop software are open source too.

It's pretty much everywhere these days.

# Why people care about open source

A lot of people are deeply passionate about open source (aka FLOSS; Free Libre Open Source Software). I love this quote, from an article titled "[What is Free/Libre, Open Source Software?](https://www.control-escape.com/linux/opensource.html)"

> By sharing our improvements and ideas, pooling our resources with thousands, even millions of others around the world via the Internet, the open source community is able to create powerful, stable, reliable software, at very little cost.

That's one of the coolest parts about being in the open source community. And yes, it is very much a true community. It is full of wonderful people, and many tend to care deeply about ethics and freedom.

When people in the community say "free software", they aren't referring to cost. The [Free Software Foundation](https://www.fsf.org/) has this to say about it.

> Free software developers guarantee everyone equal rights to their programs; any user can study the source code, modify it, and share the program. By contrast, most software carries fine print that denies users these basic rights, leaving them susceptible to the whims of its owners and vulnerable to surveillance.

# What you get from contributing to open source

So how does it benefit you specifically? There's a lot of value in it, but here are some of the practical highlights.

- Improve as a programmer
- Increase confidence
- Experience collaborating with others
- Community and recognition
- Build something, create an impact
- Stand out amongst other job applicants
- Experience joy and satisfaction
- Free t-shirt

Wait wait wait, free t-shirt? Where?!

## Hacktoberfest

![Hacktoberfest 2019 t-shirt](https://dev-to-uploads.s3.amazonaws.com/i/den9bbvh60ekuuql6zgk.png)

> Image from [Recapping Hacktoberfest](https://www.digitalocean.com/blog/recapping-hacktoberfest-6/?)

That's right, you can get a cool t-shirt if you contribute to open source.

[Hacktoberfest](https://hacktoberfest.digitalocean.com/) is an event that happens every year in October to promote open source and help people learn how to get involved.

Typically, if you sign up on the Hacktoberfest website, you just need to make 4 or 5 open source contributions. Do that, and you can get yourself a snazzy shirt for free! And that's free in terms of cost. ;)

# Getting started with GitHub

![GitHub logo and several GitHub cartoon character drawings](https://dev-to-uploads.s3.amazonaws.com/i/dkcol64uzn2uraysx4y6.png)

A great website for getting started with open source software is GitHub. It’s where you and anyone else can upload their coding projects for everyone else to see.

[GitHub](https://github.com/) is a popular place to go for open source projects, and it's what I'll be using for this article. That said, here are some [other open source hosting services](https://itsfoss.com/github-alternatives/) that you can check out.

When you contribute to someone else’s public GitHub project, you are contributing to open source. If you upload your own project to GitHub and make it public, then your project is open source!

It's highly recommended that projects include licenses to protect the project maintainer and the project itself. This is more important to consider if you want to maintain your own project.

If you're only looking to contribute to a project, then you should be fine if you are acting with good ethics and read their contribution guidelines.

# Finding a project

There are [over 100 million repositories](https://github.blog/2018-11-08-100M-repos/) on GitHub! With 1.6 new repositories created every second, the options are basically limitless. So how do you choose?

## Strategy #1: Pick a "practice" project

This is an ideal choice if you have never made a pull request to someone else's GitHub project before.

The idea is to make a contribution to a project that exists solely for getting practice with the overall process.

This is useful because you don't have to worry about what you're actually contributing. It's just so you can get familiar with the process itself.

Check out the [First Contributions](https://github.com/firstcontributions/first-contributions) repo if you want to try this strategy. It's a fantastic repo for learning how to actually make a contribution to a project.

![Screenshot showing First Contributions repository](https://dev-to-uploads.s3.amazonaws.com/i/hvlleydpjn41erjx2ebw.png)

## Strategy #2: Collect interesting projects over time

This is an ideal long-term strategy.

The idea is to just keep an eye out for projects that are related to something you are interested in. After all, contributing to something you actually use or appreciate is the most fun.

You can find ideas on GitHub, random blogs, social media, etc.

As you go about your computer/phone activities, pay attention when you come across something you think you'd like to help out as a contributor.

Search online to find out if it is open source or not. If it is, there's a good chance you can find them on GitHub.

If they're on GitHub, you can “star” them as a way of bookmarking them. Over time, you’ll have a unique list of interesting projects you can contribute to!

Feel free to check out [my starred projects](https://github.com/CompSciLauren?tab=stars) for some examples.

One beginner-friendly repository I really like is the [Awesome First PR Opportunities](https://github.com/MunGell/awesome-for-beginners) repo.

It is exactly what it sounds like. You can find lots of great open source projects on there that are beginner-friendly.

![Screenshot showing the Awesome First PR repository](https://dev-to-uploads.s3.amazonaws.com/i/m8o8p2a8la3g59l9m0ax.png)

## Strategy #3: Seek out specific opportunities

There are specific programs and meetups you can find that are all about being involved in open source. The hardest part is just finding them.

If you're a student, check out [Google Summer of Code](https://summerofcode.withgoogle.com/). You can get paid to work on open source over the summer.

> Google Summer of Code is a global program focused on bringing more student developers into open source software development. Students work with an open source organization on a 3 month programming project during their break from school.

Many students lost their internships this summer due to COVID-19.

In response to this, [Major League Hacking](https://mlh.io/) started the [MLH Fellowship](https://news.mlh.io/mlh-fellowship-the-future-of-tech-internships-05-04-2020?utm_source=MLH+Master+List&utm_campaign=21648c1bf4-MLH_Newsletter_APR_2020_2&utm_medium=email&utm_term=0_454e60092c-21648c1bf4-60725521&ct=t()&mc_cid=21648c1bf4&mc_eid=d11b1ed319) to help students get experience.

That article came out in May, and stated that they would be paying students to work on open source this summer.

> We’re partnering up with GitHub to launch our inaugural 12-week program for Summer 2020. We’ll be funding up to 1,000 students to work full time on major open source projects under the mentorship of experienced engineers.

Of course these opportunities are already under way. Still, various opportunities like these will continue to pop up each year.

Finally, you can also search online for open source or coder meetups.

I live near Kansas City, so I checked on meetup.com and found this [Open Source Analytics](https://www.meetup.com/Open-Source-Analytics-Kansas-city-KS/) group.

Looks interesting! This is yet another example of how you might find open source opportunities.

Remember you can also reach out to people you know, whether on social media or in-person. Your friends or coworkers might know about some really great resources.

# How to actually make the contribution

So to be honest I wasted like an hour writing a tutorial and taking screenshots for this, only to realize that it wasn't really necessary.

The [First Contributions](https://github.com/firstcontributions/first-contributions) repo has an excellent step by step guide on their README.

Definitely check it out if you want to learn how to actually make a contribution to a project!

# Figuring out what to contribute

It can be tempting to jump straight into the code, but hold on a minute before you do that.

> Pro Tip: Start with documentation first. You'll learn more about the project and can find easy typos or grammar issues to fix.

This is my favorite way to jump into a new open source project. Even the best documentation writers are prone to accidental typos and grammar mistakes.

Sometimes a section of the documentation is just a bit vague or hard to understand.

As a new contributor to the project, you can provide a fresh pair of eyes to scan the project for easily overlooked problems.

## What if the project doesn't have documentation?

Zero documentation makes a project difficult to learn about. You could help just by creating a README for the project.

It doesn't even need to be totally filled out. Just add what information you can, like the project title and a short description describing its purpose, or how to run it on your local machine.

If it's a project that involves visual elements, add a screenshot or GIF showing the project in action.

I did this once for someone's open source project. It was a small improvement, but even adding a simple README can go a long way.

## Next steps after documentation

The easiest way to find specific problems to solve is by searching a project’s “Issues” to see what existing problems have been documented.

![Screenshot of a GitHub Issues page on a GitHub repository](https://dev-to-uploads.s3.amazonaws.com/i/3geh6hc9oip35u6zcgav.png)

Keep an eye out for labels like “beginner-friendly”, “good first issue”, “first timers only”, and so on.

You can even search for specific labels across all of GitHub using the main search bar.

For example, to search for all Issues on all public GitHub repositories that use the "good first issue" tag, type `is:open is:issue label:"good first issue"` into the search bar.

![Screenshot showing the filter option on a GitHub repository](https://dev-to-uploads.s3.amazonaws.com/i/2g3i6o9axmzg6jzgsq3y.png)

You can also filter the results on any repo by clicking the "Label" dropdown on its GitHub Issues page.

![Screenshot showing how to search for GitHub Issues that use a specific tag](https://dev-to-uploads.s3.amazonaws.com/i/sstkf9yb0q4bs9dqm9cw.png)

As you work on an existing issue or just try running the project and navigating it as a user, you might find bugs or notice things that could be added or improved upon.

You can create a new issue on the project to document the problem or new feature idea.

This gives project maintainers a chance to discuss the issue with you and hash out any important details before getting deep into writing the solution.

It's common practice to make sure there is an issue documented on the Issues page before adding the change.

If no one has added the issue yet, you can add it to the Issues page yourself.

Still, every project has their own way of doing things. Make sure you read their contributing guidelines before you try to get your changes added to the project.

# Getting an employer to notice

Put your GitHub account link on your resume. Share it on Linkedin, Twitter, or whatever other relevant social media you use.

If you have a portfolio or personal website, use that instead.

Consider adding a section for open source projects on your resume, or including it under any relevant list of projects/experiences.

GitHub is not a replacement for a portfolio, but it is definitely good to show employers if you don’t have a portfolio built out already.

Recruiters probably won’t spend much, if any, time looking at the projects. Hiring managers (and/or hiring teams) probably will.

Keep in mind, it is totally fine that your code isn’t perfect. Hiring managers aren’t looking for perfection.

![Two women shaking hands, presumably after an interview has just ended](https://dev-to-uploads.s3.amazonaws.com/i/3pjlw3d8mnbimkz1tfum.jpg)

> Image by [Sue Styles](https://pixabay.com/users/styles66-8817528/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=4835116) from [Pixabay](https://pixabay.com/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=4835116)

Be prepared to talk about your projects and/or open source contributions during your interview.

They just want to see things you’ve worked on. It makes for a good talking point that either party can bring up during the interview.

Make sure the link to your GitHub goes straight to your profile page.

You can add up to 6 projects to your profile page as featured repositories. Add the ones you want them to see.

Don't want anyone looking at your code? Totally normal to feel that way. But most developers are never completely satisfied with their code.

Something to show is usually better than nothing.

## How open source helped me get a job

I landed my first coding job, in part, to my GitHub profile. At the time I had maybe 6 or 7 projects, and I thought just about every one of them were awful.

I had never contributed to open source at this point, but my personal projects were all open source. Anyone could look at my code.

I had one project I felt was decent enough. I pinned it to my profile, and linked my GitHub profile on my resume.

During the interview, my GitHub profile was brought up.

I don't remember if they brought it up or I did, but the point is that it was brought up. We discussed it, and that discussion contributed to me getting hired.

After I had started the job, I talked to one of the people who had interviewed me. They flat-out told me that they were glad I had linked my GitHub on my resume.

I was the only one who did, and it gave them better insight into what kind of coding experience I had.

And the funny thing is, they said that while they were running it they managed to break it. There were bugs in my code and it was obvious.

![404 written using legos](https://dev-to-uploads.s3.amazonaws.com/i/dh3r8oqm42tl3f122x6l.jpg)

> Image by [Andrew Martin](https://pixabay.com/users/aitoff-388338/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=2129569) from [Pixabay](https://pixabay.com/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=2129569)

Seriously, a poorly-coded project played a big role in securing my first tech job.

Even though it was far from perfect, it was better than nothing.

I'm sure that my overall experience level was taken into account. I wasn't far along in college yet. My only other experience was working at my community college and being a crossing guard for a year.

So bare in mind that there will be many factors considered.

If you have 10 years of experience but only a few beginner-level projects, maybe don't link your GitHub.

But if you're looking for an internship, or an entry-level coding position, this kind of thing could be really beneficial even if you think your code isn't very good.

As you get better at coding, you'll have more and more interesting projects to show employers.

The code will never be perfect, but you'll continue to improve over time and it will show in your projects.

# Creating your own open source project

Another interesting way to get involved in open source is to start your own open source project!

The basics are pretty straightforward, but there are a few different key features that tend to get overlooked when you're maintaining one for the first time.

There's also the task of getting people to actually use your project. Not to mention finding people who are willing to help contribute to it.

I've made plenty of mistakes along the way with my own open source projects, and I can't wait to share what I've learned with you.

Next week I'll cover how to get started with your own open source project, plus some tips for success.

# Conclusion

I hope this article has helped you understand open source better. I also hope you will give contributing a try!

Even if you decide you don't want to do it regularly, it's a good thing to try at least once.

Remember to check back next week if you're interested in starting your own open source project, or learning some tips for success!

Have you ever contributed to open source? Do you have any recommended beginner-friendly projects that new contributors could try? Let us all know in the comments below!

This article was originally published on my personal website's blog, [Joy Bytes](https://www.compscilauren.com/blog/why-contribute-to-open-source-and-how-to-get-started).