I've been asked about getting involved in open source projects a couple of times before, so I decided to write up all the advice on this topic I have.
Not that long ago I too was having problems finding a project and sending my first PR. So here's how I would approach it today.
Contributing to projects you like
Having interest in the project you are contributing to helps with motivation. The downside of this approach is that, as a beginner, you might not be exposed to that many open source libraries. In that case, I suggest building a few small pet projects and paying attention to what tools you rely on and what they let you do. After familiarizing yourself with a library or two, check out their issue pages. Chances are you'll be able to find something you can work on.
Your First PR
This initiative has been very helpful by publishing approachable open source issues and encouraging people to contribute. In their own words:
Our goal is to make the open source community more accessible to new contributors, by helping project maintainers lower the barrier to entry through the use of well written issues and documentation.
And while the Twitter feed seems to be a bit stale, check out their issue page for some things to work on.
exercism.io is a platform for practicing your coding skills by solving exercises in a variety of different languages. It has separate repositories for each language and those tend to have beginner-friendly issues that would be a good place to start.
Language specific tips
Since I like Haskell and Rust, here's a few examples of how to start contributing to projects in those languages.
Rust is a great example of consciously working on community involvement. I recommend subscribing to the This Week in Rust newsletter, it has a Call for Participation section that lists several issues every week along with their difficulty levels. Furthermore, projects like Servo and Rust itself have labeled issues that target newcomers.
When it comes to Haskell, there are labeled issues on some projects. There's also a newsletter called Haskell Weekly which has recently added a Call for Participation section as well! There is still more to be done here and actively encouraging the project maintainers to label their issues, outline the solutions for newcomers, and even offer to provide mentorship is something we can improve on.
Benefits of contributing to open source projects
While reading other people's code and figuring out how things work might seem daunting at first, it is still very much worth it. Not only do you get to learn more about writing complex projects, you also get to collaborate with others, and build up your GitHub profile too. That last part will come in handy for your portfolio.
I had a lot of fun working on Ballast together with Chris Allen, you can see some of our discussions here. Chris provided guidance and overviewed the architecture of the project, as well as answered any of my questions.
But I got lucky there and that won't always be your experience. Things don't work out sometimes, and eventually you might find yourself with a PR that won't get merged. Don't despair, focus on the fact that you've gained new knowledge and practiced your skills. That's all the guarantees you can expect.
Conclusion and helpful links
If you are struggling with getting involved in your programming language community, consider reaching out to package maintainers and offering them your help. For example, I strongly feel that adding a CFP section to all the weekly newsletters is a good idea. See if your preferred language's newsletter is lacking that section, and if so, reach out to the maintainer and suggest adding it.
By actively talking to people and taking the initiative to encourage others to participate we can improve our communities, fix those pesky bugs and become better programmers together.
24pullrequests.com has a great collection of articles and posts on this topic: https://24pullrequests.com/contributing.