The Open-Source Addiction
Disclaimer: These are my thoughts and opinions. I’m no expert or someone who has more than 10 years of open source development experience. I’m just someone who started their open source journey very recently. I’m open to suggestions and comments about the topics that I touch. I think this is just the right time (in an 8hr flight) to pen down my thoughts as I transition from an undergraduate student to someone having a full time job and open source development as a hobby.
I guess with all that out of the way, let’s dive straight into this.
As a college fresher, back in the day, I was scared of large code-bases. With little to no exposure working on giant projects, comprising of hundreds of files and dozens of sub-modules that in-turn depend on multiple third party libraries, I found myself lost.
You’ll often find yourself in situations when you start a job and join a new team in a company, there you’ll not be working on a project from scratch. Instead, you’ll be looking at a pile of code that was written by the existing team and probably makes zero sense to you on day one. Hell you will spend a lot of time just figuring out the entry point to the codebase. Also understanding how the bulk of code fits into everything else is a ginormous task. To make things worse, there is a high chance there won’t be any documentation for the existing code either and the rest of the team would be busy with their own tasks leaving very little time for them to guide you.
A lot of college students are happy solving algorithm problems on Leetcode and there’s nothing wrong with that, infact that’s really nice. Strong hold in Data Structure and Algos is always a good to have for any Computer Scientist. Ehhh, I probably still need to improve my DSA skills 😛. But what use is the problem solving skills if you don’t apply them in the real world. As an undergrad student it would be great if you can expose yourself to some real-world problems by working on a side project or contributing to an open-source project to get a feel of what’s coming your way once you graduate.
Having gone through this during my undergrad research days, I stumbled upon the open-source community by chance. What started with a desire to learn while contributing to open-source projects, eventually became an addiction (in a good way, LOL). I’d strongly suggest looking into some of the projects out there.
Let’s understand “WHY?” in more detail.
Why should you contribute to open-source projects?
There are several reasons. I’ll be precise and walk you through some of them.
Every time you contribute to an open-source project, you are learning something. Through the logic behind the code you wrote, actual implementation in a particular language, CI checks, review comments suggesting a better way to do the same etc., get ready for something new with every PR. Contributing to open-source is also one of the finest ways to inculcate some of the best coding practices as a developer.
Personally, I feel the best part of being attached to the open-source community is the reachability that you have. You can easily get in touch or talk to someone who might be 20 or 30 years more experienced than you are, without having to worry about any kind of corporate hierarchy. It is equally important for more experienced devs to take into account opinions from younger developers. Believe me all of them are really smart people. The interactions are synergetic and mutually beneficial for both the younger developer and the senior developer who might be a maintainer.
Open-source communities serve as a platform to communicate with infinite people and this alone is an invaluable asset.
A shark in a fish tank grows only 8 inches, but in a ocean it can grow upto 8 feet or more.
I believe with everything we do it all boils down to building and sharing perspectives through these interactions.
Open-source software is built by the community, for the community and is completely free of cost. Anyone and everyone is allowed to use the software. These communities offer a lot of freedom and flexibility with the kind of work an individual contributor can take up. I’ve always felt good about doing stuff based on my interests. Open-source projects generally have a wide spectrum of problems to be solved and maintainers for the projects are open to people working on topics of their interest. No one will ever force you to work on a particular module. This is majorly a voluntary job and freedom is one of the biggest perks that comes in all open-source communities.
As a matter of fact, a lot of open-source software projects today are some of the most impactful and influential software projects ever made. Let’s take one of the golden examples, i.e. the linux kernel. Anyone in the world can actually influence the linux kernel by raising or flagging issues and bugs, sending in patches for such issues and adding new features. If you think and ponder for a while, you’ll understand the scale of impact that you can have through open-source contributions. There is always an extra motivation to work on things that actually impact lives of thousands and millions of other people in the world. We are social beings and that’s how we are built. Open-source again provides a platform for anyone and everyone to get involved and make a real impact without any kind of entry barrier. That’s something very unique in the world of computer science.
If there was only one adjective I could choose while describing an experienced open-source developer, it would be “patience”. The fact that from the time of opening up a PR to the time when it actually lands, sometimes can take months and even years, is something unique about open-source. That’s not all, there might be a lot of back and forth during the review process. Patience is the key and open-source development will teach you that within a few months. Since there are a lot of great minds maintaining these awesome projects, they are very careful before merging anything. Even though there is a popular saying “Great minds think alike”, I’ve seen a lot of different opinions on PR reviews. This is not necessarily bad, infact it makes your work more robust and also helps in building a habit of thinking twice or thrice and also providing suitable reasoning/facts before suggesting a proposal.
I mention this in the end because I feel this is more of a good side-effect, as compared to the real reasons mentioned above for one to start contributing. To elaborate more, when you start working on impactful open-source projects of your own or some other existing projects, recruiters start noticing your github/gitlab profile. They will often reach out to you for open positions in their respective organizations. Trust me open-source has it’s own way of bringing up some very exciting and unknown opportunities all the time. Having said that, expecting some job “offers” or “opportunities” shouldn’t really be the motivation for one to get into this area. Just think of it as one of the perks.
Okay okay, all that sounds fun and enjoyable, but can someone with no idea about git, github, open-source software, computer languages etc. still contriubte?
Yes, you can. OSS is not only about writing code, there is a lot more to it. You can work as a technical writer to improve the documentation of a library, framework etc. Or you could probably work as a designer in some of the organizations. Think of an organization as a small company, they might have all kinds of roles even if there primary product is some software library.
How to get started?
The easiest way to get comfortable in any community is by getting involved.
- Join the IRCs, mailing lists, slack workspaces etc. for these communities where the devs hang around. This way you can peek into their discussions and maybe chime in with your questions, if any.
- Start watching the github repository for email updates.
- Follow updates on social media handles for the orgs of your interest.
- Follow relevant developers or maintainers on GitHub that you believe work on some cool projects.
I’ve personally also spent a lot of time stalking developers (their work and open source contributions, not their life obviously) on GitHub and reading through their issues and PRs, trying to understand their contributions even if it doesn’t really make a lot of sense at the start.
Small efforts like these really give you a feel of the project, helping you to get comfortable with the community and in general understanding the culture associated with them.
This is especially true when you are new to the open-source eco-system. Obviously at some point of time you actually would want to start contributing and nothing beats that. In the end the best way to learn something is actually by doing it, sooner the better.
Sometimes reading blogs about open-source software and projects, watching youtube talks from other open-source developers and listening to podcasts etc. is extremely helpful.
One final advice and probably the most important one.
- Don’t hesitate to ask your questions and getting in touch with some open-source devs if you can, but be very careful. Most of the people work voluntarily on these projects and they owe you nothing. If they don’t reply, please don’t get upset, instead try to understand that they have a life of their own and might be busy. Most of these devs are handling a job and at the same time contributing to open-source which can get quite hectic some times. Please read Mike McQuaid’s blog titled “Open-Source Maintainers owe you nothing”. People are generally very friendly and helpful but that doesn’t give you the right to misuse or exploit them.
I think the maintainers do a fantastic job, but often are not given enough credit for the time, energy and sweat they put in for every small detail. You should also read Matthew Rocklin’s blog titled “The role of a maintainer” and “The cost of an open-source contribution” by Ralf Gommers to understand an OSS maintainer’s world.
Wondering why the blog was titled “The Open-Source Addiction”?
If you have reached this part, thanks for sticking around. I say “addiction” because it really is a drug for me now. The kick you get once your PR is merged is unmatched. Knowing that your code is now a part of a library that is probably used by thousands of other developers or scientists is a different feeling. Over the course of time, I started to enjoy this adrenaline rush and something that started as a way to learn became a hobby and transitioned into some kind of an addiction for me.
That’s how much fun the open-source communities can be. I’d like to thank the community and maintainers for all the projects, you are doing an amazing job without expecting a lot in return. The least someone can do as an OSS user is to appreciate their efforts when raising an issue or a PR. Small things like this go a long way in building sustainable open-source communities.
I’ve met some of the most helpful people including my mentors in these communities. They’ve gone out of their way to help and unblock me while suggesting useful changes in my PRs without asking for anything in return. My mentors have been instrumental in this fun journey and I’ll always be indebted to their guidance. I’m sure everyone who is willing to put efforts and time in this community will find a very helpful mentor because of the culture that’s been set over the years in the open-source land.
Bottom line, Open-Source starts with expecting nothing and working voluntarily for fun but slowly transitions into some kind of satisfaction that is hard to describe.
Anyway, those are some of my thoughts about open-source communities. Feel free to share your opinion below. :))
LGTM, merging this now!