Step 1: Blank slate.
The internet is full of people that will tell you that there's only one way to go about doing this stuff and they are dead wrong. It's different for every person, every project, and even varies year to year.
Step 2: Programming isn't the only answer.
If you're not comfortable writing software, that's OK. There are tons of ways to contribute to FOSS without spending money or writing a line of code. Here's a few:
- Writing bug reports
- Requesting new features or helping redesign the user-facing side of new ones
- Testing software
- Writing documentation (manuals, guides, how to articles)
- Providing user support on forums, bug trackers, and Reddit
- Helping translate software or documentation into another language
- Using your own skills to help them run the project (ie. accounting, legal matters, merchandise, etc)
- Using your artistic skills to provide assets (e.g. logos, icons, mascots, graphics for documentation, website styling)
Step 3: If you really want to learn to program, make a time commitment to spend a certain amount of time each day/week/month to work towards this.
Learning how to program takes years. There's no short-cut. You'll learn enough early on to feel like you can walk on water. Then you'll quickly realize how much you don't know. I've been programming over a decade, hold a BS and MS in Computer Engineering, and still come back to this realization all the time. Your time is finite. You will never be able to learn everything. But you can still learn enough to make a meaningful impact.
Step 4: Learn to Program
I wish I could tell you "start with <insert language>" or "go learn <insert framework>", but there's no set path for any of us. Anyone who says there is a perfect path is suffering from the early stages of Dunning-Kruger.
Every language has its merits or someone wouldn't have gone through the trouble of designing and building it. Frameworks can help speed up development, but they also can get in the way of what you want to do down the line. You aren't "rewriting the universe" if what you end up with is unquestionably better than what you could have done with existing things.
Most people benefit enormously from a course-like curriculum. There's no shame in this. Maybe you can afford community college credits, maybe you shell out for Coursera or edX or any of a number of online services, maybe someone was kind enough to put together a series of tutorials that are enough to get your feet wet.
Maybe you prefer to learn in a hands-on. That's OK too, but learn when to ask questions rather than just fumbling around with the same problem for ages. There's no sense frustrating yourself to the point you want to quit. No question is "stupid" and if people are rude when you ask, find other people to ask.
Step 5: Pick a Project
The best way to learn new skills is to put them to practice. Start with something simple and steadily increase the difficulty or complexity of the projects you are trying to tackle. Each project will force you to look at things from a different perspective, ask questions you didn't even think to ask, and send you down rabbit holes that end up broadening the corner of the universe you are trying to explore. If a project seems to big, try to break it up into smaller projects that help you wrangle that complexity while also feeling a greater sense of accomplishment as each piece falls into place.
Step 6: Learn to work with others
This isn't something you'll pick up overnight or even after years of contributing to FOSS. That's OK, every little bit of experience helps. But your goal should always be the same: find the best way to achieve your goals within the expectations and culture of each project. If it's clear that your goals aren't aligned, that's either a sign to go out on your own or that what you are trying to do isn't as important as you think it is. You might even just have to wait awhile for those goals to line up.
Once your contributions are accepted into a project: take responsibility. If your changes introduce bugs, fix them. If you added a new feature, listen to user feedback and react accordingly. If your work is undocumented, write the documentation.
Step 0 to Infinity: Reflect.
At every step of this process, take the time to sit back and reflect on where you've come from, where you are, and where you want to be. Never lose sight of the fact that all of your effort was not wasted. Even failed projects are learning experiences and practice for later things. Where you are now might not feel like it is good enough. It may never feel good enough. But remember how far you have come and just how little you used to be able to do. If your future goals start to feel enormous or impossible, try to put yourself in your shoes from a few months or years ago. Remember how what you have already accomplished used to seem unobtainable or even impossible. Keep going and you'll get to feel that way again.