Pre-script: GCI was 50 days long. This post too, is rather long and detailed. There’s a TLDR at the end if, um, you want a TLDR.
As with JS13kGames, I learnt about Google Code-In (GCI) only last year (wish I’d known about it earlier). I was unable to participate, however, thanks to the academic pressures then. Fortunately, I managed to participate (in both) this year.
GCI, for those who aren’t familiar with it, is a competition for students (aged 13–17) wherein they contribute to open source organisations, aided by regular contributors to the organisation (aka ‘mentors’). Students are judged on the basis of not only the number of tasks they complete, but also the quality of tasks, quality of interactions, engagement with the developer community, their demonstrated interest in the organisation etc.
I decided to work with Wikimedia, which most of you are probably already familiar with, especially if you’ve ever used Wikipedia. For those that aren’t, Wikimedia is an organisation which aims to spread free knowledge, Wikipedia being one of its projects.
GCI flagged off on 23 October, 10:30 PM, my time. Overly excited about the event, I had already made myself familiar with the Rules, FAQs and other pages of the GCI site In the days leading up to the inaugural. I had also read through all organisations' pages on GCI in the hunt for a project that suited me the best (in terms of programming languages used, goals and beliefs etc). Initially, I was tied between Liquid Galaxy (for I was familiar with the programming languages it used) and Wikimedia (because I could relate better to its goals). Very soon, I found that I didn’t like Liquid Galaxy’s tasks and I decided to switch to Wikimedia the same night.
The first task I decided to work on was a rather trivial “fix lint errors” task. Unfortunately, I assumed that setting up Gerrit would be trivial (based on my experience with Github) and didn’t take up the “Get started with Gerrit” task. That night, I slept at 2:30 am after hours of grappling with several error messages.
The next morning, I joined the
#wikimedia-dev irc channel, where I identified myself as “GCI-Kid” 😛 (I changed it to “shreyasminocha” and cousins later).
The next thing I took up was adding ANSI colors to a shell script. After that, I worked on a couple of web development tasks (one for Wikinity and one for Tracker). This was the time I first got in touch with Urbanecm, whom I now know pretty well. In fact, over GCI our relation transitioned from ‘mentor-student’ to ‘friend-friend + mentor-student’. I proceeded to do a design task next, intended as a break from coding tasks. That turned out to be fun too! I then ventured into the more-or-less unfamiliar land of Python. After some effort and getting some silly mistakes corrected multiple times, my patchset was finally merged (if you’re reading this, thanks for the patience and sorry for the trouble Framawiki and Xqt). I did improve in that respect over time, so at least there’s that. Framawiki’s busy schedule and consequently his low availability gave me an opportunity to reflect on how GCI, like open source in general, isn’t a race. Initially I did feel like I was falling behind my peers while waiting for reviews (coupled with the understanding of mentors' other commitments etc of course), but eventually I resolved that feeling too (and was consequently at greater ease throughout GCI). I then did my first (and only) documentation task which added instructions on using the Gerrit test instance. What’s kind-of funny to me is that I learnt most of what I added there only a few days before I drafted the new documentation page. Thanks for the edits and feedback Srishti, Étienne. One of the things I would probably never have learned had it not been for GCI was Lua and its usage in Mediawiki. I did six “beginner” tasks and one “advanced” task in the lua series. While I doubt I’ll get to use it much outside Mediawiki contexts, exposure to more programming languages can’t possibly hurt.
My experience working on Mediawiki tasks was not quite up to the mark purely because of the troubles I had setting up and fixing my installation on vagrant. It is safe to say that I spent multiple days of the competition just trying to fix my install 😞. I claimed a rather advanced PHP task one of these days, unsure if I would be able to complete it, but wouldn’t hurt to try. Unfortunately, I spent too many days just fixing my install and trying to reproduce the behaviour described, eventually losing enthusiasm in the task itself and abandoning (sorry). I did complete some core Mediawiki tasks(such as adding an error code to the MW API and adding HD logos for some projects although the latter was a configuration change), however even if they were trivial. Working with Mediawiki and its extensions did motivate me to learn PHP and MySQL, things I thought I’d never get into, so I guess all’s well that ends well. As for my dev instance, I ditched vagrant and successfully manual-installed yesterday 🎉.
I did work on another design task, but made the mistake of uploading it to the Phabricator ticket while having another task claimed in the GCI interface. Étienne (understandably) got quite upset over this. Although I was slightly hurt by a rhetoric question he posed to me in IRC, that was probably not his intention so that’s fine. Eventually, I abandoned that task out of guilt of working on another task simultaneously (although Google’s rules on the matter of working on multiple tasks at a time are quite ambiguous).
Me and several of my fellow-students felt increasing pressure as the deadline approached. Some even went as far as skipping school to complete a few last-minute taks. Speaking of last-minute tasks, Taki and I had a thrilling evening on the tenth (task claiming deadline). Urbanecm suggested me earlier that day to claim Lua #9. So with a few hours left to the deadline (2 hours, 12 minutes to be precise, I got started on that). As the law of unproductive work would suggest, my work-done vs time elapsed graph was mostly exponential 😛. As such, I ended up completing the task with 6 minutes to spare. Urbanecm, being the legend that he is, reviewed my task in just a couple of minutes, leaving me ample time (3–4 minutes) to claim my next and final task. Urbanecm reviewed Taki’s patch right after mine and Taki too was left with 15 seconds to claim another task. Needless to say, Urbanecm made my day. He was there for us in that time of crisis.
My final task involved getting the changes I made in an earlier task deployed. I remember being excited about my deployment window and reaching
#wikimedia-operations well in advance. There, zeljkof and Urbanecm guided me through the process of testing my changes (both on the test server and the production server) and rebasing. I remember describing my experience getting my first deployment done as being in an airplane’s cockpit (although I’ve never been in a cockpit myself)—it’s cool, but you’re also awe-stricken by all the jargon, “controls” etc. I got by with a little help from Urbanecm. I have to admit, deployment felt really satisfying and was fun too.
Apart from learning and learning about the existence of all sorts of programming-related things, I had many other valuable experiences. I had many meaningful (and some meaningless 😂) discussions in the irc channels. I got the opportunity to help many students with their bugs, issues and tasks—a rewarding thing in itself. In doing this, I learnt lessons in patience and politely saying things that may otherwise seem rude even when the person you’re helping is a bit slow to catch on or repeatedly asks for help with the same things. I got the opportunity to understand the Wikimedia movement and what drives its contributors closely. I got a broad overview of the extent, organisation structure and operations of the Wikimedia movement. I also got the opportunity to leave code reviews on others' patches, a fun, but demanding exercise if carried out responsibly. Also, one of the most valuable things I got out of GCI was the opportunity to meet and know a lot of new people!
I did have some absurd (bordering on negative) experiences as well. One of these days, we had a certain student join the channel claiming to be there for the irc task. They came up with some very incredulous excuses (“my pc is crashed so i can’t download [a permitted irc client]”, “i cant install anything in my pc; need to reinstall it”). At around this point—ignoring all of our follow-up questions—they came to their point: “hey could u make this a good one”, linking to a CodePen and requesting us to “make it look good”. We did try giving some suggestions, when they started repeatedly requesting us to edit the pen rather than editing it themselves (“my pc gets hanged when i open codepen”, “change what u think which are not perfect”, “pls just 10 mins”, …). I was in a rather uncomfortable position then (they were pretty much directly addressing me) and I felt rather uncomfortable repeatedly denying this requests (while offering logical explanations as to why they should do it themselves). Later, thanks to Reedy’s suggestion and my follow-up search, we found that a different organisation had tasks very similar to what they were trying to get us to edit. Thanks for reporting them to Google, Reedy!
On a similar note, we had a student who started off with the Lua tasks. He’d join irc regularly and would basically need hand-holding to get each task done. Throughout, I was trying to guide him in a way that he’d become more independent, but he seemed to be making the same mistakes over and over. He did take a lot of effort to deal with on our parts, but at one point he seemed to be getting better. Urbanecm messaged me one day asking me if I’d linked to my solution while helping him with a certain task. Needless to say, I was a bit shaken. I denied and verified by going through channel logs. Urbanecm then linked me to that student’s solution for the problem. Turns out, his code for the task was exactly identical to mine (custom error messages, even). Was a shame that someone we spent so much time helping and guiding ended up getting disqualified for plagiarism.
Yet, two negative (even just slightly so) experiences in a fifty-day long competition is almost insignificant and certainly nothing in comparison to all the positive experiences I had. Thanks mentors and contributors, for making all of this possible. A special shoutout to all mentors and contributors I interacted with. Thanks! A shoutout also to my fellow students, many of who, made my time in irc more enjoyable (especially Taki, Nathan, Jan, Rafid, Steven). Also, great job organisation admins! Stuff (for the most part) was very well organised. Thanks also to Google1 employees who contributed to making this year’s GCI a success.
I plan on continuing to contribute to Wikimedia. I’m especially interested in contributing to Parsoid (since it’s written in nodejs), Tracker (because I made several contributions to it over GCI) and Mediawiki (because of the irrefutably large impact it has), but let’s see how things shape. I really hope my tryst with Wikimedia will grow stronger over the years.
Got the opportunity to learn all sorts of things. Lots of new exposure, new acquaintances and friends, lessons, and fun. Stressful at times, but worth it. 10/10, will recommend.
Post-script: Of course a blog post, no matter how long, cannot do justice to all the experiences I’ve had and all the people I’ve met over these 50 days. I’m really sorry if I missed you out.
I’m not fond of some things about Google, by the way. ↩︎