Apr 24, 2014

My journey into Google Summer of Code 2014

This post is about my journey into Google Summer of Code 2014(GSoC) with the Python Software Foundation(PSF). I will be working on a project titled "Core Python - IDLE Improvements".(The project proposal can be seen here.)

August 2013 - My "hello world" program in Python. I'd like to share an interesting story about why I began Python programming in the first place - As a part of PyCon India 2013, a PyCampus event was planned in my college( PES University). The demand being high, I was unable to get a seat for the event. I challenged myself to Learn Python(the Hard Way) within a month, on my own. I completed that book in less than two weeks. I was hooked to Python!

January 2014 - Looking out for a FOSS project to contribute to.
In late January, I downloaded the CPython source code. It was also the first time that I used a version control system(Mercurial HG) from the command line. I had never run anything from source before( I was happy with binary installers till then). 

February 2014
February was by far and away the month in which I learnt most about working as a community. It was also the first time I had a conversation with Terry J Reedy(my current GSoC mentor). He has been really supportive and helpful ever since. I also submitted few patches to CPython. Some were documentation patches, typo fixes and few others were test patches. All were trivial and straight forward to implement. But most importantly, things had started to move and I had made some contribution to a FOSS project.

March 2014 - April 2014
Contributed more patches to CPython. Most were related to IDLE. Some were non-trivial, atleast for a beginner. I began working on my GSoC application in the second week of March. After few rounds of discussion with my mentors, the proposal was finalized and submitted to Google.

I contributed some more patches in the month of April. On April 21, the proposal was accepted and I was selected for Google Summer of Code 2014 .

Key takeaways:

In this part, I will try to summarize my experience preparing for GSoC 2014.

What I learnt
  1. Learn to Google. This is one thing no one is ever going to teach you. Also, make best use of sites like Stackoverflow. If you stumble upon a problem, there is a very high chance that someone else too, had faced a similar problem and solved it. Try to find solutions on your own. If there isn't one, it's a great opportunity for you to be the FIRST one solve it.
  2. Developing on a Linux system is much simpler than on Windows. In the end, it may come down to personal tastes, but unless you have a special reason to develop on Windows, Linux is the OS to use.
  3. Ask others only as a last resort. Somewhat related point 1, but worth its own point. I learnt a lot when I proactively researched how to solve a problem. Do not directly apply someone else's solution as well. Question why the solver used a particular method/way( though I may be guilty of not following this all the time).
  4. Patience is key when interacting with a large community. There will be people across timezones. Ask again, only if you don't get a reply within, say 48-72 hours.
What I did that helped me get selected into GSoC 2014
This part is targeted towards aspiring GSoC 2014 students. I will list some things that I did which I feel helped me get selected. I feel they may be useful. This section is written keeping GSoC in mind.
  1. Start NOW!. Pick your favorite FOSS organization. (I would highly recommend the CPython community. Its welcoming to beginners. The language is cool and simple. There are plethora of resources (see end of this blog post) for you to get started.)
  2. Read through the mailing lists for about 2 weeks, so as to get an idea about the current discussions. Try adding thoughts when you are comfortable.
  3. Submit as many patches as possible before you begin writing your proposal. This has two benefits. You will get an idea about whether you will be able to work on it extensively. You will have more technical details to use when framing your proposal. The feedback during patch review will also be useful.
  4. Practice using VCS before you begin anything. It will save you a lot of headaches down the line.
  5. Maintain notes of everything. Once something is written/typed down, you wont have to remember it. 
What I wish I had done during while preparing for GSoC 2014
  1. Be more active on the community - be it mailing lists or IRC. I felt I did not communicate with the community except few people who work on certain parts of CPython( IDLE in my case).
  2. Explore parts of the codebase not related to your proposal. I spent a lot of time and energy working on IDLE, that I did not explore other parts of the codebase. I felt I my application would suffer if I did so -  point being GSoC is not just about GSoC - its a way to become part of the community. I plan to make amends to this by working on other parts of CPython once GSoC is over.
  3. Help others, especially as a part of patch review(also known as triaging??). This again may be related point 1 and 2. Also, do try to help fellow applicants.
  4. I wish I had started earlier. Of-course, there is no limit to how early you start, but I felt 3 months is very little time to truly understand a codebase.
Looking beyond GSoC
I will continue contributing to CPython beyond GSoC - not only to IDLE but also other parts. The CPython community has been really nice to me and I want to be part of this community for a long time.

Useful resources
These are resources I found useful when framing my proposal. They are listed in no particular order. (**Recommended resources in bold - personal opinion**. Do try to go through all of them.)
  1. Floss student manual - http://en.flossmanuals.net/GSoCStudentGuide/
  2. Pocket Book of Technical Writing for Engineers & Scientists - http://www.amazon.com/Technical-Writing-Engineers-Scientists-McGraw-Hills/dp/0073191590/
  3. How Not To Apply For Summer Of Code - http://blog.gerv.net/2006/05/how_not_to_apply_for_summer_of/
  4. How To Ask Questions The Smart Way - http://www.catb.org/~esr/faqs/smart-questions.html
  5. 10 Tips for Technology Proposal-Writers - http://www.sun-associates.com/resources/10tips.html
  6. Proposal Writing Guidelines - http://www.csc.depauw.edu/~bhoward/courses/0405Fall/csc498/Proposal.html
  7. How to Write a Software Project Proposal - http://www.ece.rutgers.edu/~marsic/Teaching/SE/proposal.html
  8. Python Developer’s Guide https://docs.python.org/devguide/
  9. GSoC infographic(courtesy - https://wiki.python.org/moin/SummerOfCode/2014) 
  10. Read through selected applications. It should give an idea of whats expected

No comments:

Post a Comment