My Journey & Guide for Google Summer of Code
Tags: gsoc, python, psf, opensource
Published: 2020-09-12 06:25:13

Hey there, *GSoC '20* has finally come to an end and I am very excited to share that I have successfully completed the program. I was selected for GSoC' 20 at sub-org [FURY](https://github.com/fury-gl/fury) under the umbrella organisation of [Python Software Foundation](https://www.python.org/psf/) for the project titled ["Create new UI widgets & Physics Engine Integration"](https://summerofcode.withgoogle.com/projects/#6653942668197888). In this blog, I would like to share my experience with this amazing program and also my journey so far.

> The Google Summer of Code, often abbreviated to GSoC, is an international annual program in which Google awards stipends to students who successfully complete a free and open-source software coding project during the summer. The program is open to university students aged 18 or over. [Wikipedia](https://en.wikipedia.org/wiki/Google_Summer_of_Code)

Don't worry, at the end I will also be sharing some tips and tricks to ace your gsoc application. The majority of the questions that I get asked by other GSoC aspirants are quite similar in nature and I end up repeating myself most of the time. So I decided to answer them all **here**.
***
# My Journey
## First Steps
The first time I heard about GSoC was in an online article about Free and Open Source software. I was an open source enthusiast since my high school days and I was the kind of guy that preferred open source alternatives compared to the paid and proprietary ones. I wasn't exactly sure of how GSoC was related to FOSS at that time, but I knew I had to take part in it to satisfy my love for Open Source.

I was first introduced to programming in my 11th standard. We were taught to code in Turbo C++(Yes, this 20 year old 16 bit compiler is still used to teach programming in many Indian schools and colleges). Initially I was bad at it because I was not able to acquire the mindset required to code and the blue screen of Turbo C++ wasn't much of a help either. Eventually I managed to learn how to code, I was also introduced to OOP at this stage. I still remember the day when I successfully wrote my first program to check palindromic strings on my own. The fact that a computer does what I instruct it to do made me feel like a GOD and at THAT moment I realised that this is what I want to do for the rest of my life!

## You may delay, but time will not.
Later on when I joined college, I completely forgot about GSoC. I was carried away by the new environment that I was exposed to. Somewhere in January 2019 I received an article suggestion about GSoC in my news feed and I realised that I had a goal to achieve. The proposal submission deadline was around march so the stupid me decided to procrastinate instead. Finally a week before the deadline I decided to work on my proposal and looked up some sample ones online. To my surprise they were very detailed and I realised that proposals were meant to be the work that I am supposed to do during the summer and not something random. I felt demoralised and didn't bother applying.

## Trying again
Fast Forward to Jan 2020 and am back with more enthusiasm and seriousness. One of my college seniors and also a senior from a different college who was previously selected for GSoC provided me with some guidance. This time I was determined to get selected. From Jan 2020 itself I started short listing my organisations. I created a [spreadsheet](https://docs.google.com/spreadsheets/d/12ObKQ8K2KyB-2FiZVBb1KAaKdGZXdL-tkaJ0WJeegMQ/edit?usp=sharing) of orgs whose main projects were built using python. I kept shortlisting the list until I was left with around 3 orgs namely *Django*, *Sympy* and *Pitivi*. I tried making significant contributions to their projects but I failed to do so. By this time the officially selected orgs were announced and I gave **Python Software Foundation** my final shot.

## Ray of hope
Python Software Foundation usually participates as an umbrella org for GSoC which means it acts as a representative to several other sub-orgs. I started browsing their sub-org list. The sub-orgs list looked rich and sophisticated but only one caught my eye. It was **FURY**. Still to this date, I am not sure why I chose fury but I followed my instincts. By the time I learnt about fury, it was already late. **ALL** the beginner friendly issues were taken and was in active development. I joined FURY's slack channel and introduced myself and received a warm welcome from the community. I kept following the project for a week and tried understanding its code-base until I noticed that one of the assigned [issues](https://github.com/fury-gl/fury/issues/108) were inactive. I kept stalking that issue like a predator for a couple of days and finally asked my mentor (then maintainer) if I could work on that issue and fortunately he asked me to go ahead with it. I knew this was my last hope for GSoC and I wont let it go in vain.

## It's not about the Code, It's about the Community
I was still struggling to understand the code-base so my progress was quite slow. I knew I had to make a PR with significant changes before its assigned to someone else. After some sleepless nights I finally made a PR. It wasn't perfect at all. Visually it was close but functionality wise it was far fetched. I kept myself calm and worked harder to solve it and was finally successful in implementing the feature. I was still doubtful about my implementation but my mentor approved it. As I was new to open source and to a real world software project I had no idea what PEP8, CI or even unit-testing meant. So my mentor advised me to cleanup my code and write tests for the newly added features, and Oh Boy the tests were a whole new world. They were overwhelmingly huge. Each feature had it's own tests. Sometimes I would get confused whether the code I was looking at was actually python. But I knew I had to do it. I was already successful in implementing the feature and I shouldn't be scared of implementing the respective tests. After some prolonged debugging sessions I was finally able to reverse engineer one of the existing tests and after pushing my changes I got this response from my mentor:

![mentor response](https://cdn-images-1.medium.com/max/800/1*ypUGjXSqf7Cxr1FIxeYJLw.png)

After reading this my joy knew no bounds. I was jumping around in my room making weird noises like a maniac. It felt as if I had already cleared GSoC. At this moment I realised that Open Source is not just about the code, but its actually about the community. My mentor and the community's polite and welcoming behaviour is what kept me going. Had it been the other way round I would have given up already.

Shortly after this, I was called for a Zoom interview by the core team. We exchanged information about ourselves and discussed in details about the objective of project FURY. I was also asked to showcase one of my personal projects and they asked me about my Idea that I plan to work on for GSoC.

## Keeping the streak alive
I kept contributing to the project till the official GSoC date. By that time I was able to make 7 major code contributions and I was also one of the top 5 contributors (number of commits) of that repository. And the rest is history.

![final evaluation](https://cdn-images-1.medium.com/max/800/1*qmNw-sILBcgjFhh4FUtJqg.png)

In conclusion, I was fortunate enough to be a part of GSoC. This was a life-changing experience for me and now I observe and interpret everything from a different perspective altogether. I have grown into a better developer and a person since GSoC. I would like to thank all my mentors and especially Serge for his immense support and mentorship.
***
# Frequently Asked Questions about GSoC
Well if you made it this far, Thank you for reading my blog and now its time to treat you with the good stuff. Here are some of the questions that I am frequently asked about gsoc:

**How frequently did you contribute?**
I chose my organisation during mid February 2020 and kept actively contributing to it till the student announcement date in early May 2020. So in total I actively contributed for 4 months for a total of 7 PRs before getting selected for gsoc.

**How do you prepare the proposal?**
Preparing a strong proposal is very important for GSoC. It should describe in detail how and what you would be contributing to the project during the summer. It doesn't have to be fancy but the content that you mention is very important and should be thought of carefully. A typical proposal consists of the following headings:

* About Me
* Contact Information
* Previous Code and Project Contributions
* Project Information
* Stretch Goals
* Project Timeline
* Commitments and Availability

To briefly explain, **About Me** will be the section where you would introduce yourself and you would explain how your selection will be beneficial for the org that you are applying to. This is similar to a cover letter that one mostly writes when applying for a job or an internship.

**Contact Information** will basically contain your name, email etc along with you IRC/Discord/Slack username.

**Previous Code and Project Contributions** is the section where you would mention your previous contributions to that respective org. Make sure to select the important and relevant ones only.

**Project Information** will be the section where you would explain your project idea in detail.

**Stretch Goals** are the sub-projects which you would work on if you complete early during the program.

**Project Timeline** is where you would explain your activities/commitments/deadlines that you create in order to implement your project idea. Its basically a time estimate of the completion of the sub-parts of the project.

**Commitments and Availability** will be the section where you would mention any additional commitments that you need to follow along with GSoC(mainly refers to semester exams, vacations etc). Keep in mind that it's a requirement to dedicate at least 40 hours a week for GSoC.

**How to make yourself stand out with the competition?**

* Follow proper open source ethics and contribute code instead of documentation.
* Make sure you are following the org's recommended standards for coding and writing tests so that the mentor doesn't have to review your code and suggest the same changes again and again. You should know what the project wants and have it ready beforehand.
* Make sure you have done extensive research about a problem before asking for help. Provide enough data/information that can help others narrow down the problem.
* **DON'T ASK TO ASK**. You'll hear this phrase sometimes on IRC, and it means "please just ask your question, don't say something like 'can I ask a question?' first."
* Google intends this to be a way for new contributors to join the world of open source. The students most likely to be selected are those who are engaged with the community and hoping to continue their involvement for more than just a few months. **It's more important to be a good community member than it is to be a good coder.**
* You should help other fellow community members that you interact with in the community chat. TL;DR whatever you do, think about the community first and just be a decent human being, that's all.

**How do I select an organisation?**
Choosing a project or an organisation is a pretty personal choice. You should choose something **you** want to work on, and I can't tell you exactly what that would be. I recommend you to select an org that respects the essence of open source and follows proper open source ethics for e.g not allowing racing, providing friendly environment etc.

**How to handle project ideas that seem very difficult to implement?**
The only way to answer this question is to contribute code to issues related to that particular project idea. For e.g if a project idea is related to UI elements then you should contribute code(Perform bug fixes or add new features) which is relevant to UI elements. Once you start contributing you will understand the implementation details.

**Whats the first thing to do when joining an org?**
I would recommend introducing yourself in the public chat and feel free to mention that you want to participate for GSoC.

**What issues to mainly focus on?**
Focus on code contributions only, i.e bug fixes or feature additions. Documentation or Typo fixes are fine initially but they don't add anything useful to your application.
Apart from code contributions you can also contribute by creating tutorials that explain newly added features in a user friendly manner.

**How to prepare yourself for GSoC?**
Apart from whatever I have mentioned above, you should have a good grasp on version control systems like **git**. Commands like rebasing, stashing, branching etc should be at your fingertips. Also you should have a good grasp on **Object Oriented Programming** concepts as they are extensively used in most projects. Programming languages or frameworks depend on the org that you are planning to apply for.

**Is it difficult to get selected in this program?**
6,626 students from 121 countries submitted 8,903 applications for this year's(2020) program, out of which only 1,199 applications/students were selected from 66 countries. [Source](https://opensource.googleblog.com/2020/06/google-summer-of-code-2020-statistics.html).

**How to get started with Open Source?**
* Choose an Open Source Project
* Try solving beginner friendly issues
* Interact with the community
* Solve harder problem related to bug fixes or feature additions.
* Become a mentor or maintainer for that project
Repeat

**I wanted to know if someone who is well versed in the fields of ML can apply?**
Anyone who passes the eligibility criteria for GSoC can apply. It doesn't matter if you are from an ML background or not.

**What is the level of python proficiency required to contribute in PSF (Python Software Foundation)?**
I would let PSF [answer](https://python-gsoc.org/students.html#knowledge) that question.

**How many orgs to target?**
Before the orgs announcement try out as many orgs as you want but make sure to focus on only one org once the official list is out.

**Should I start competitive programming or should I focus on projects?**
I would recommend you to focus more on projects as you will be exposed to multiple frameworks or libraries that might help you while contributing to an Open Source project. Having knowledge about Competitive programming is good but I don't see any benefit of it in the context of GSoC.

**I'm a little overwhelmed with what to study and not, can you direct me to a right path?**
If you like problem solving then I would recommend you to focus more on competitive coding. But if you are more into projects then go for development coding.

**Which programming languages I must learn for contributing in open source? Which ones did you learn?**
Again, it depends on the project that you are trying to contribute to. For contributing to a JS project you need to learn JS and in order to contribute to a python project you need to learn python. I have noticed majority of the projects in GSoC to be python and JS based. **Python** so far has never disappointed me.

**If I get a CSE branch, do I have to learn the above languages explicitly or will they be included in the curriculum?**
I wouldn't recommend you to be dependant on your college. If you feel like learning something new, go ahead and learn it yourself. There are a ton of free resources available online.

**Do you have any idea about the criteria of selection of proposals, as I assume each org receives multiple proposals? Do they focus on a particular aspect of their project, say suppose UI/UX or feature addition?**
It's completely the org's decision, but all the mentioned project ideas are given equal priority. Sometimes they might drop project ideas just because they didn't have a good enough candidate for it.

**How much of an importance is given to past contributions in OSS, and to contributions to THAT org in particular?**
Having past OSS experience is very beneficial for your application. It proves that you are knowledgeable about basic software development tools and terminologies. For most orgs it's compulsory to have a contribution to their project before applying for GSoC.

**If I learn a language ,for ex. Python, really well along with its ds-algo , will that be enough?**
Apart from that you also need to have good knowledge about Object Oriented Programming as most of the OSS projects follow these concepts. Knowledge of version control is very important. Depending on the org that you are applying to, you might have to master a specific framework or library for that language.

**Like we have various sites for practising ds-algo (codechef, codeforces, leetcode), is there any such site where we can practice and in turn improve our grasp in the field of development code? If yes, do name them. If no, how can we practice them?**
That's a very good question. In order to gain experience related to open source or development coding in general, I would recommend you to participate in Open Source programs which are similar to GSoC that takes place throughout the year. To name a few (not in any particular order):
* GirlScript Summer of Code
* Major League Hacking Fellowship
* Open Source Hack
* Hacktoberfest
* MSP Summer of Code
* Winter of Code
* Season of KDE
* Bountiful Open Source of Summer
* ESA Summer of code
* Outreachy
* Rails Girls Summer of Code
* and many more!

I purposely did not provide any links as they keep changing and new programs emerge every now and then, so its better to look them up yourself. Again, if you feel like it, you can directly contribute to an OSS project irrespective of such programs. Here's [something](https://github.com/tapaswenipathak/Open-Source-Programs) you might find interesting.
***
# Do’s and Don’ts for Open Source/GSoC
Finally I would like to provide a list of do’s and don’ts that you should follow:

## Do’s
* Follow proper project guidelines as mentioned by the organisations.
* Actively interact with the community. Help the ones in need and don’t hesitate to ask for help.
* Politely ask for permission to work on an issue.
* Discuss everything(almost) on the public channel.
* Ask mentors to review and provide feedback on your proposal before the final submission.
* Fix your proposal based on their feedback.
* Make it a habit to credit other’s work. If you are finishing someone else’s work, make sure to rebase your PR on top of that person’s branch instead of copy pasting their work.
* Respect community members.

## Don’ts
* Don’t hijack someone else’s issue. Issues are assigned for a reason. Racing through an issue will only lead to inefficient code and it will be annoying for the maintainers to manage the chaos.
* Don’t ping your mentors/maintainers excessively to review your code. They receive notifications for all the activities that takes place in the repo.
* You should respect their time and availability.
* Don’t ASK TO ASK. Just directly ask what you want to ask.

In conclusion, I would like to say that be passionate about the project that you plan to contribute to. Your passion is what will keep you going till the end. Consider the project as your own and not just a commodity that will help you get selected for GSoC.

Lastly, I wish everyone good luck for the upcoming GSoC programs and I hope your dreams come **True!!**