I've been a programmer for the majority of my life. Quite a bit more than half of it. I've been a web developer and designer even for more than half of my life. And yet, I haven't really contributed much to many open source projects. I've downloaded quite a bit of source code over the years, with every intention of going through it and trying to modify it.
Often times I look at the code and can't seem to get my head around all the eccentricities of it. It's really hard to understand really complex code often times. Unfortunately, software coders are often really bad at documenting their code and some are likewise very bad at commenting their code.
But the primary reason I never contributed to quite a few software packages, even after I understood enough of the code to contribute is that coders in general suck at bringing in new people into their projects.
Imagine for a minute that you find this really awesome open source application that you love. Maybe it does some cool thing that you just can't live without. Maybe it's a really awesome game. For whatever reason, you love it, and you want to help make it better. You go to the webpage, read a ton of the documentation, and go to the forums and the IRC chat, and you start talking to them. You will likely run into one reaction to anything that you want to do.
You want anything done, you have to just do it yourself, and no one's going to help you in any way to do it.
Or they'll tell you to do something that's incredibly easy, and anyone can do.
They don't want to waste any time helping you to understand anything. They don't want to help with anything that you consider a priority. They don't even want to help you to figure out how things work so you can help to complete anything on the todo list.
Basically, talking in the IRC channels and forums is utterly useless. They're assholes. Don't bother talking to them. They'll just break any hope you have of contributing in any significant way.
Don't bother.
Just jump in the code and try to understand things. Modify things. Break things. Change things. Revert to the previous stage and break it again!
After years of trying to contribute to open source projects, this is what I've decided is the only way to be able to contribute. If you talk to them, they'll break your spirit. They'll tell you not to do some idea that you want to do. Fuck them! Just do it! If you do it and they don't accept the change, then just fork it and you'll have your own cool version that they might just accept eventually.
Image by NeKoKaWaii-chan 6 December 2017 CC BY-SA 4.0 (source)