I use open source self hosted software everyday. I love the community and I would love to be able to contribute to some of these projects.
As far as code goes, I basically no nothing about how it works. I see the development section of the repos I use and again, I’ve go no idea how it works.
How can I teach myself how to offer small improvements to the projects I use?


Echoing that the best place to start is to get a handle on programming as a concept. Not because we’re trying to gatekeep the good stuff behind the scary programmer voodoo, but because otherwise you’re basically attempting to edit a book in a language you don’t speak (and the reader is very picky about grammar).
That said, you can absolutely teach yourself to code! Hell, if you figured out self hosting I’m willing to bet you’ve probably already got a handful of transferable skills.
In the interest of disclosure, I learned programming as part of my degree (took a Java class as a resume booster my first semester and ended realizing that I preferred coding to calculus and switched my major), so I’m not exactly a wealth of knowledge in the self study department. However I would recommend a course that has labs/ challenges/ projects to practice what your learning. Everyone learns differently, but I’ve personally found that I picked up programming concepts better when I got hands-on and applied them in my assignments.
The programmer’s open secret is that generally once you know one programming language, it’s pretty easy to pick up another. For example, Java and Python might write them in different ways, but at the end of the day a loop is a loop and as long as you know you need to repeat some code until some condition is met, it’s perfectly acceptable to Google “loop in Python” or “[Java concept] in Python”. In other words, it doesn’t super matter which language you start with; just pick something and stick with it (bonus points if you can turn around and tinker with an OSS app with what you’re learning).