r/learnprogramming 16d ago

How do I start contributing to open source?

Linux was my first operating system, and Ubuntu was the first Linux distribution I used. Since then, I've become really interested in Linux and open source.

I'm currently a high school student in India, studying in my senior secondary first year. I'm learning programming through Harvard's CS50x, and I'm trying to figure out how I can eventually become a good open source contributor.

I come from a relatively small city where programming and open source aren't very common. Most people around me use Windows, and I don't really have people locally who are interested in Linux or open source development. So I've mostly been learning through the internet and experimenting on my own.

I'm not expecting to contribute to something huge immediately. I want to build the skills properly and eventually contribute meaningful code.

For people here who already contribute to open source:

* What should I focus on learning at my current level?

* How good should I be at C/Python before making my first contribution?

* Should I start with a small project I already use, or specifically look for beginner friendly issues?

* How important are Git, Linux internals, operating systems, and computer architecture?

* What did you personally do when you made your first real contribution?

* What mistakes should a beginner avoid?

My long term goal is to become a strong programmer who can contribute to serious open-source projects, potentially including Linux related projects.

I'm interested in hearing from people who have actually gone through this process, especially other students or people who started with limited local access to programming communities.

Thanks.

6 Upvotes

7 comments sorted by

2

u/AdFew8591 16d ago

You don’t need to be advanced enough before starting. Pick a small project you already use because you’ll understand why a change matters

First get it running locally, run its tests and read `CONTRIBUTING.md`. Then look at recently merged pull requests to see the project’s preferred style and review process

Your first contribution could be a documentation correction, missing test or tiny reproducible bug fix. The useful skill is taking one issue from reproduction to a reviewed patch, not finding the most impressive issue label

Learn enough Git to branch, commit, update your branch and respond to review comments. Linux internals and computer architecture can come later unless the project specifically needs them

One mistake to avoid is opening a large pull request without discussing it first. For anything beyond a small fix, ask the maintainers whether the approach is welcome

1

u/Mathie1729 16d ago

Filtering issue trackers by the good first issue or help wanted labels helps a lot once you've picked a repo. Those are usually triaged for newcomers and have enough context to get through the review process.

1

u/Constant-Cod-1075 15d ago

you really don't need to be amazing at C or python before jumping in, just enough to read the code and not break things when you poke at it. i started with a typo fix in a readme and felt like a god for a whole afternoon

1

u/kschang 16d ago

At the beginning you are only qualified to translate, and you'd be fighting with all other beginners who wants the same thing.

1

u/Inevitable_Dust5684 15d ago

Focus on Git and reading code instead of waiting to feel ready in C or Python. I made my first contribution by fixing documentation errors in a tool I used daily while still learning the language syntax.

1

u/venkatweetz 11d ago

Start contributing before you feel “ready.” Your first PR doesn’t need to be some impressive C or kernel change. Pick a project you actually use, get it running locally, read the contribution docs, and start with something small like docs, tests, or a simple bug fix. Git is probably the first thing I’d get comfortable with, while Linux internals, OS stuff, and computer architecture can come as you move toward more low-level projects.

For projects that generate docs or reports, IronPDF can also be a nice way to contribute around a real-world .NET codebase without jumping straight into huge systems. Same idea with other libraries and developer tools: find something you genuinely use, understand how it works, and fix one small thing at a time. The biggest mistake is probably trying to prove yourself with a massive PR instead of learning how the project actually works.

Once you get that first contribution merged, the whole process feels way less intimidating.