What I learned about open source through Outreachy!

A little about me!

I’m a Computer Science and Engineering postgraduate at the National Institute of Technology. In this blog post, I want to recount my experience with the application process of Outreachy internship program. This program is my first step towards open source contribution and I would love to become an active member of the open source community.

How I got started?

I learned about Outreachy from the seniors and juniors who had been outreachy alums as well as GSOC alums during my under graduation. I never applied for it as I thought I was not prepared enough. 
During my post graduation’s first year, a friend encouraged me to apply as he saw me getting more interested in programming. I started finding out what Outreachy is. At that time, autumn applications were opened but I couldn’t apply as I was preoccupied with my classes at college. So, I made up my mind to apply for the spring round. During that time, I started doing research on it and reading many blog posts of outreachy alums. 
When the application period opened, I started browsing the list of projects announced and a project caught my attention. I learned how to use IRC and joined it. Unfortunately, I didn’t get much of the help from the IRC. So I decided to look up for other projects. Luckily, another project “Improve Suricata-Update” from the organization Open Information Security Foundation opened its application. The project description matched my skills and intrigued me so I targeted to this project.

Initial Contributions!

I started by joining the mailing list and introducing myself to the community members. I acquainted myself with the structure of the project and its codebase and set up its development environment and was ready to tackle a “beginner-issue”.

My first contribution involved addressing the bug which involved removing an error thrown when suricata-update is run by no-merge option. Through making this small but important change, I learned how to build and reproduce the bug and learned to write “clean code” — code that is readable and maintainable. In the process, I learned several new things, both OISF-specific (how to use Redmine, what Suricata is, what are rulesets) and general (how to use a mailing list, work on a new issue).

For my second contribution, I addressed an optimization issue, which involved cleaning up the imports in a module and making them compact. I separated this issue into two parts. Firstly, I found an unused import import types and removed it. Also, I used isinstance()instead of types as it is the preferred way to access the type. Secondly, I found a lot of names of a module were imported from a package by writing multiple import statements. Instead, I used Python’s standard grouping mechanism (parentheses) to write the import statement to make them compact.

In the process of application, I got more hold on git commands. I learned squashing commits into one , configuring git on my system and resetting git.

It has been an extremely enriching experience where I got to learn so much! Throughout the application process, I found the mentors to be very helpful. They helped me a lot in reviewing my PR’s and guiding me at each step. The constant feedback of the mentors helped to learn new things. Being the first time contributor to open source ever, my PR’S had so many flaws and I had to change it quite a number of times before finally getting it right. I also ended up making mistakes while writing commit message but thanks to such patient mentors who helped me at each step, write a better commit message and made me familiar with Python PEP8 standards.

After my contributions, it was time I started working on my proposal. This was a set of questions I filled out with lots of information about the experience with FOSS, contribution to the project, time commitment, etc.

Not an end but a beginning…

I don’t know whether I will be selected or I will try again next time but I know I will keep learning because this is not an endpoint but a beginning to grow and learn.