My Google Summer of Code 2019 Experience
This summer I had the opportunity to work on a project with the Salesforce Design System React library through the Google Summer of Code program.
I am currently a sophomore CS undergraduate at Amrita Vishwa Vidyapeetham, Amritapuri, India. I was introduced to the world of Open Source through the FOSS club at our college - amFOSS, and it was through this community that I was all encouraged for the GSoC program. In my winter break last year, I was fortunate to do an internship at a startup in Bengaluru, working for which I first used React which mostly revolved around the development of a user dashboard using a component library. This was where I first came across Design System React, but however it was months later when my senior at college (Akash Krishnan ettan) recommended me this project to try for Google Summer of Code program that I actually got started with contributing to it.
Learning by Implementing
Many of us students often start learning a technology watching a course or reading a few blog posts. We settle down implementing the same thing that was on the tutorial, or mugging up the syntax and features never knowing why they mattered. When I started contributing to DSR library back in February, I had very little clarity about React, and just by contributing and working with this project for about 6 months now, I learned more React than I possibly could which would otherwise be not possible to achieve through reading tutorials or taking courses. Unlike the examples found in those which are often very limited to hello world programs, the practical examples and snippets I found in DSR presented a bigger picture of things, and how everything stacks up which for me made learning react much more interesting and easier. From this experience, I am convinced that learning while implementing is far more productive than learning everything then implementing.
Insight into how experienced developers think
The pain of setting up, and understanding a large matured project codebase is the foremost struggle that a beginner developer usually faces when trying to start contributing to a project. Unlike personal projects where just the output matters, algorithms must be written in a crisp efficient manner, often following a well documented coding practice, which makes it quite complex for starters both to comprehend and code into. Ironically, these practices are actually what makes these projects scalable, maintainable for any new developer coming in.
My favourite part about Open Source Projects is that their rich source code is a free and open source for beginners to learn from these practices and coding styles followed by experienced developers, something that can never be learnt working on their own niche projects or doing some courses. Like they say reading good books improves writing skills, the understanding codebase of and contributing to open source projects, I would say it is the fastest way to grow as a developer. The features of these projects are implemented with great insight into the project that only comes by experience, which cannot be taught but need to come intuitively. Reading the codebase, documentation, and going through the conversations in P Rs or in IRCs of the project allows a junior developer to see through the thought process of experienced developers, and grow their skills.
While these practices are followed everywhere internally, many freshers get exposed to these only after graduating and starting contributing to the projects at their job, where they do this learning. This is where I feel Google Summer of Code program really makes an impact, as it promotes student developers to contribute and work with matured FOSS projects of leading organizations under the guidance of experienced mentors exposing them to these practices, thus growing their insight, and breaking their comfort zone by making them work on a team project versus their own personal projects.
Working in a team
Another great thing about Open Source projects is the community that it forms involving all the stakeholders, right from end-users who report bugs opening up issues to the project maintainers who merge changes. Since everything from source code to chats discussing feature implementation happens transparently, a new developer joining can explore into most of what's happening. Everyone also gets a voice in the community and development often happens in a user-centric demand driven way.
Working under my mentors for the project was an impeccable experience for me, for the first time, I got the taste of collaborative development and to the inside of how the industry works. We had numerous video conferences and long chats to discuss and plan out the project, which gave direction and clarity for me on this remote internship. Though we were at two ends of the world, with clashing time differences, we adjusted times to communicate to make the most out of the project as it progressed.
Many times I was particularly helped by them when they shared other similar examples of implementation which sometimes just required just copy-pasting with minor tweaks, while otherwise it would have taken me hours. They were also actively teaching me a more efficient and cleaner way to code react, and further closely guiding me when I worked on unit testing, and web accessibility. I never used to care about these aspects for any of my projects before. Infact, the significance of both automated testing as well as enhancing accessibility became very evident for me after this internship. On the downside, I was not really consistent enough with the proposed timeline but my mentors gave flexibility and were very considerate as they focused perhaps more on my learning and growth than just getting the project done.
It was a great learning journey for me in the last six months, and I could learn and experience how real-world projects are developed & managed, how teams work together, how planning & communication happens, meeting deadlines and fulfilling goals etc. I would like to sincerely thank my mentors - Stephen James and Kevin Parkerson, who were closely guiding me throughout these months, and making this steep learning trail smooth and steady for me.