I am glad I have contributed to open-source during the summer as part of the Google Summer of Code 2014 programme.
For those who are not familiar with Google Summer of Code, it is a programme organised by Google and consists of connecting students with mentors from open-source organisations to work on open-source projects. Successful students, apart from the work experience and the satisfaction of contributing to their favourite open-source projects, get a nice $5500 pay-check at the end of the programme.
Since its inception in 2005, the program has brought together over 7,500 successful student participants from 97 countries and over 7,000 mentors from over 100 countries worldwide to produce over 50 million lines of code. — GSoC website
Students apply to open-source organisations which will accept (or reject) them based on their proposals. Each organisation has the freedom to ask for whatever information and experience they need and find relevant. After being accepted, students are given a mentor who will guide them throughout the programme.
Google Summer of Code is supposed to be a 3 months full-time job working from home.
I will continue with my experience and what I have learned during the programme. I worked on a Go Parser Library for SPDX, which is a standard way of exchanging licence data (and other software package metadata) in open-source projects. It is designed and maintained by the Linux Foundation’s SPDX workgroup.
I’ve learned a bunch of important skills during Google Summer of Code and they’re not mainly about programming. I do know Go better and I got better at writing lexers and parsers and linking Go code with C and contributing to other projects but the most important thing for me is that I got better at managing my time.
Keep a work schedule
I haven’t been able to keep a work schedule before this summer, even during term time or when I actually had a project to work on and close deadlines. I would feel like I have too many things to do and I’m so much behind that I can never catch up with the work. I thought I have so many things to do and instead of doing any one of them I would just procrastinate and complain about being bored.
I always though of myself as being a night owl, mainly because I would go to sleep very late and get up very late but I was ignoring the fact that I was not in my best shape. Before coming to uni, my excuse could have been that I was quite often interrupted during the day which caused my productivity to increase during the night. However, I didn’t realise it at that point.
This year I tried to wake up at 9 a.m. every day and it worked most of the time. It forced me to go to bed earlier and work at daytime. I could be quite productive when I wasn’t tired but I didn’t have a work schedule at all.
Google Summer of Code is, well, during the summer, meaning no lectures or anything that you have to attend. Nothing forces you to keep a certain schedule. You are given a fairly large project to do in three months and you are responsible for managing your time and make continuous progress. You have two deadlines: the mid-term evaluation and the final evaluation and both are binary: pass or fail.
I decided to wake up every day at 9 and start working. At first, I thought I would work as much as I can and that’s more or less what I did. Very few interruptions, quite continuous work but there was a point where I just got too tired to do anything else.
At about half of the programme I though that I could set an end time. So it would be just like I go to office but I’m instead in my room. It works even better because you know how many hours you have left and which tasks you can accomplish today and what other tasks you can mark for tomorrow.
Why wasn’t I able to do have more projects at the same time? Why wouldn’t I finish any of the online classes I started? I was feeling guilty. What does feeling guilty have to do with that? Simple. When I have a big project on my mind I feel like I need to work on it and anything else that’s time-consuming makes me feel guilty for not focusing only on that big project.
The effect? I wasn’t able to work on more than one project at a time and even when I wasn’t going to work on it I couldn’t make good use of time and I would procrastinate thinking about the project.
Instead of procrastinating, realising and accepting the fact that sometimes I wouldn’t work on the main project allowed me to better use the time off. Deciding to do something else makes me not feel guilty about it. I’ve been able to start an online course and actually learn new things from it. I am now able to keep more than one thing in my schedule without feeling guilty.
The result? Less procrastination and more productivity in more than one projects.
Another scenario that will push me to procrastinate is not knowing what is there to do next. Let’s face it. It’s hard to figure out what to work on when you’re given a big project — dividing it in smaller tasks takes time and is often not trivial. I was more productive when I had a problem to work on.
A partial solution to this is to use the issue tracker and keep vim open to the files you were previously working on. It makes it easier to start from where you left off. Don’t fool yourself with “I remember this bug, no need to write it down.” Most of the time you won’t. If the issue is small enough that you will not forget what you were working on previously, fix it straight away. Otherwise, write it down in the issue tracker.
I highly recommend How to stop being lazy by Eric Barker. It is a very good article on productivity.
Go, the programming language. Or golang to make it searchable.
It’s fun to write in, it’s compiled, the interfaces are just wow… I won’t go into describing the language but I want to mention that writing Go was the main reason I applied for writing a SPDX Parser Libarary in Go.
Before Google Summer of Code I only wrote a small coursework assignment and stared at the online examples and how easy and simple everything seemed. After writing a larger project I can confirm, everything really is easy and simple. Documentation is easy to browse. If the wording doesn’t explain it well, looking up the source code of some function is just a click away. And that source code is commented and very readable. And all Go code is formatted the same, thanks to gofmt. Everything just… works as expected. Oh, and the language specification is actually readable.
Testing is also great. You can check code coverage and see which lines are covered and how frequently. To view the code coverage, go generates a HTML file in a temporary folder and opens it with the default browser.
On a bad side, I haven’t had too much success debugging and I mostly went back to fmt.Printf()s.
Financial side of it
It’s not bad at all. In fact, working from home has its perks: no need to pay for another rent and/or transit to work. An average internship salary is similar to what you earn during Google Summer of Code, so if you put the rent and transit into consideration, you’re actually better off doing Google Summer of Code.
Not to mention that getting paid to write free, open-source software feels very good.
As a summary, for me, the benefits of participating in the Google Summer of Code 2014 programme were:
- I got better at time management.
- Better understanding of how to avoid procrastination.
- I wrote Go code.
- A nice paycheck.
I strongly recommend every student who likes to code to apply for Google Summer of Code. It’s a good experience and, financially, you might actually get to keep more money than if you had an actual internship.