As someone who learned most of his hands-on programming skills outside of the classroom, I have to say that open-source software development is one of the best ways to learn programming. You learn a lot of different skills, from actually programming to working with a team, and you get to use those skills to build software for all sorts of products and purposes. Hell, everything you can see above this text (home server, Roku TV, Nintendo Switch, Steam Deck) has some form of open-source software I have contributed to or messed around with the source code of installed, like Decky Loader!
When talking to friends and classmates who have less experience programming, one thing I always mention is working on projects outside of class. Material that hasn't changed in years and senior projects can only get you so far. Contributing to open-source software is a great way to get some projects under your belt and learn a lot of frameworks you never would in a classroom. For example, I never learned React in my college education, but I use it almost daily as a software engineer.
The one thing I struggle to recommend properly are the steps for getting involved in developing that software. I'm writing this post so I have a compiled guide for why and how to get involved in open-source software development. I'm sure there are a million guides like this out there, but I wanted to write something personal for those who want someone they know providing these recommendations.
Software developers choose to participate in open-source development for many reasons. Here are a couple that were relevant to me.
For me, this was why I originally got involved in open-source software. Even though I was enjoying my college education and just starting off as a Quality Assurance Engineer at a local company, I felt as though I didn't have many projects that I was proud of on my resume. I had made some Discord bots for gaming that I didn't think would be helpful on a resume, so I really wanted to work on something more.
Luckily, I got involved in the makerspace at my university and started working on projects with them, like a new website and Discord bot. I would later go on to work on some interesting software for the Steam Deck, like a plugin loader and theme manager. Those projects really helped me improve the quality of my resume by showing things I had worked on, not just classes I took without much to show for them.
When earning my bachelor's in computer science, I never had a course go over languages and frameworks I use today like JavaScript, Python, and React. Working on projects outside of class helped me a ton with learning practical skills in these topics. Without getting involved in the open-source software that I did, I would have far less skills to market myself once I graduated from college.
Also worth noting are the social skills you learn from working on these projects. I got most of my leadership and team-building qualities from leading open-source projects. I also got to learn how to work in a team across all of these projects. Having more experienced developers show me the ropes was a great experience and made me less afraid to ask questions.
Nowadays, this is the main reason I develop software for open-source groups outside of work. I am still really interested in the makerspace at UT Dallas and the Steam Deck, so I still work on projects surrounding those topics! Many developers just want to get involved in a community they're passionate about.
For many, this is the hardest step. You want to work on some projects, but you have absolutely no idea how to get started. That's totally fine. I lucked out with the projects I got involved in and I want to explain how I got there. That way you can do the same!
Like I mentioned, I have used or made open-source projects for everything in the featured image of this post. Finding a project to work on without any connection to its developers can be challenging, but it's not all that difficult once you know what to do.
*I have not contributed to Mealie, but I do use their software on my server. This is intended to be a general example of how to find a project and not any form of endorsement.
If you're attending a university, student organizations are a great resource for building your resume by working on some projects. I attended UT Dallas, a very computer science-focused school, and found many student organizations that had projects people were working on around the clock. Here are a few in no particular order so you can get some ideas:
This was a very basic overview of how I recommend getting involved in open-source software development. By all means, this isn't a conclusive document and you don't have to follow these methods. Honestly, I wish I had a lot of the advice above when I was starting to learn software development skills outside of college. I really hope you find some use out of this guide. If you do, please let me know!