My Reasons Why I Should Do Open Source Project
Tags: opensource, senecaosd600, hacktoberfest
Published: 2022-10-25 01:57:11

My fourth PR has been sent to *nocodb* which is an awesome open source airtable alternative. The code base is really large and its community is very active. It was really tough for me to understand the code base and how it's architected. But I'm very happy with [my PR](https://github.com/nocodb/nocodb/pull/4091) to add an optional parameter to `ROUND` function to show decimal numbers in the cell. As the last contributions of the *Hacktoberfest*, I would like to write about my reasons why I have to do open source contribution. 

### Open source participation is a chance to learn the tech trends
I have known many languages, frameworks, and tools to support the eco-system. But I tend to use the ones that I'm comfortable most for my project. So I have limited experiences to some frameworks and tools. For example, *Angular*, *Vue*, *Enzyme*, etc. In this month, I had opportunities of using famous frontend frameworks *Angular*, *Vue*, and testing tools like *Enzyme*, *Cypress*, *Mockito*, and the popular *Docker*. There are also many CI tools like *Codecov*, *Husky*, and many others. There are probably more cutting-edge technologies if I had chosen languages more modern languages like *Go*. I read about these frameworks and tools, but there is a big different between knowing and experiencing. Open source is a great chance to use them and understand them. 

### I'm learning the programming techniques and how codes are structured 
*nocodb* has a very rich feature set as table has many functionalities and the table can be synched with SQL databases such as *MySQL*, *SQLite*, *SQL Server*, and *PostgeSQL*. It was a great opportunity to have a glimpse of how the system works and how they modularize the code, and how the tests are written. I could also have a chance to look at professional's code how to draw animations through *materializeCSS* project. I often used `!important` to quickly fix my styling issue, but that wasn't a good idea. I learned that I could implement the styling without forcibly overriding by pinpointing a DOM object. Understanding `stub`, `mock` in frontend testing is also tremendous. Through the code reviews, I learned their concerns and how I could improve my code. 

### Open source is a great way of being a part of developer community
My first PR took much longer than my expectation since it was my first open source contribution. I was implementing a feature to add typing input capability to graphical timepicker ([materializecss timepicker PR](https://github.com/materializecss/materialize/pull/290)). It was pretty rewarding experience since my change is added to [the site](https://materializecss.github.io/materialize/pickers.html#time-picker) publicly accessed! After a while, they invited me to their organization. I haven't checked what's going on in the organization yet, but it is a good feeling that I can continue my contribution as a member of *materializecss* family. And people in other communities are very welcoming and friendly. I should definitely do more after *Hacktoberfest* and my *OSD600* course. 

### Conclusion
There are many ways to improve our skillsets and knowledges. But I think there are some things that we can only learn in a real world project. Especially the one with large number of users and developers. Finding a way to know the code base, understanding popular frameworks and version issues, writing effective tests, how to construct large system are eventually what we are going to do in a real workplace. Open source is definitely a game changer for me. I'm looking forward to more .