Open Source chronicles - First week's adventure
Tags: opensource, github, git
Published: 2020-08-28 05:40:09

Ever wondered how someone completely new to the vast space of Open Source starts exploring it? There are numerous ways of doing it, and today I am gonna tell you about how I started exploring this field :)

In the past 10 days, I got selected for  [Contributor's Hack 2020 by HakinCodes](https://hakincodes.tech/), an Open Source event where participants and mentors come together and participants contribute to the Open Source projects of mentors.
I started contributing to 2 projects,  [Git-set-go](https://github.com/garimasingh128/gitsetgo)  by mentor Garima Singh and also  [NeoAlgo](https://github.com/TesseractCoding/NeoAlgo)  under mentor Harsh Bardhan Mishra. I also joined [Eddie Jaoude](https://github.com/eddiejaoude)'s community, on discord and [GitHub](https://github.com/EddieJaoudeCommunity).

Git-set-go is a useful tool that can generate a resume for you based on your GitHub profile and then allows you to download it in pdf format as well.

NeoAlgo is a public repository under Tessaract Coding, a community made by Microsoft Student Ambassadors to help newcomers in learning about Open Source contributions, along with spreading knowledge on Algorithms and Data Structures. It aims to bring all DSA concepts in multiple languages under one repository, so anyone can have a look at them.

# Issues I worked on:
## Git-set-go
Under this project, I worked on 2 issues. 

1. **Improve the code quality rating from B to A according to  [Codacy](https://www.codacy.com/)**
This was a daunting task since I had never worked with code standards or styling rules. But thanks to Codacy and GitHub webhooks, this work became easier. I made changes as Codacy pointed out and after every push, Codacy would tell my code's rating. And so, I brought down the code issues from 70% to a mere 5% and got A rating. I was really happy when I saw that A-rank :D

2. **Retain data from the user and components even after site reloads**
Being a newcomer to React it was a bit challenging but with a little research, I was able to do this with the help of `sessionStorage`, which stays active as long as the current session is active. I saved the username entered and the data fetched from the GitHub APIs in this and it worked like a charm

## NeoAlgo
Here I took up 4 issues on different algorithms.

1. **Bucket Sort in Java**
A great algorithm to sort Uniformly distributed data over a range. We use this range, divide the data into buckets of equal sizes, and sort individual buckets. Then we concatenate them and we get a wonderful Time complexity of O(n).

2. **Find minimum number of swaps to sort an unordered array of first N consecutive integers in Java**
Yep I know, long name... but the problem turned out to be easier than I expected! The trick here is to check if a particular element is at the position it should be since they are all just consecutive natural numbers starting from 1.
You getting it right? Easy-peasy

3. **Knutt-Morris-Prat Algorithm in JS** A pattern searching algorithm for strings where there is a repetition of letters. As against Naive search, here we do a lesser number of checks, as we do not check the repeating letters again. The time complexity of O(m+n) woohoo!!!

4. **Heap Sort in Java** This is a comparison based sorting technique based on the Binary Heap data structure. Similar to selection sort where we first find the maximum element and place the maximum element at the end. Time complexity is a decent O(N log N).

# Important things I learned from all this.

- Documentation is really, **REALLY IMPORTANT**.
- When writing the documentation, make sure to write everything but in precise form, with examples or sample input/output.
- There are a lot of advantages of using Code checking tools, for example, the flow of your code becomes a lot better.
- Never EVER be afraid of taking difficult issues. The mentors are always there to help you and the internet is full of helpful resources so you can be sure to get help on the issue you are solving.
- Be patient to get your P.R. reviewed. Maintainers have more work than you would know. :)

These were really important points I learned as a newcomer to the Open Source world. I would really advise any newcomer to Open Source development to keep these things in mind.

Thank you for your time to give this blog a read. I hope this would be of help to you to know what things you will be facing as a newcomer in Open Source :D