参加 Google Summer of Code 的体验

原文地址:https://geekplux.com/2018/01/07/experience-of-gsoc-google-summer-of-code (opens in a new tab)

Google Summer of Code (简称 GSoC)中文我叫它「谷歌编程夏令营」,是一年一度谷歌组织的类似暑期实习的编程活动。2018 年的申请马上就要开始了,在此我分享一下我参加 2017 年 GSoC 的体验。

什么是 Google Summer of Code?它值得参加么?

这个问题可以参考Google 编程之夏(GSoC):海量优质项目,丰厚报酬,你竟然还不知道? (opens in a new tab)这篇文章,里面介绍的非常详细,还客观的论述了为什么 GSoC 值得参加。不过在此我还是简单科普一下:

简言之,GSoC 是一年一度谷歌组织的、全球性的学生编程活动。学生利用暑假时间给开源社区贡献代码,谷歌支付报酬给学生

将 GSoC 的特点提炼一下就是:

我相信这些点已经足够吸引一个在校学生了。

GSoC 怎么申请?

这个问题参考Google Summer of Code 学生申请指南 (opens in a new tab)。其实很简单,就是一篇 proposal,通过就可以参加当年的 GSoC 了。其他的参考资料可以看 gsoc-cn (opens in a new tab)

正文 - 参加 GSoC 的体验

申请

我是在 2017 年的 2 月份开始关注当年的 GSoC 申请。虽然每年各组织是在 2 月末公布自己的项目,但它们组织内部会在 1 月份甚至更早就开始谋划今年 GSoC 的项目计划,而且一般会公布在组织的主页上。我当时搜索到一些已经公布的项目,筛选了 3 个和我技能相匹配并且自己也想参加的项目,直接发了邮件过去。自我介绍了一番,并把自己针对这个项目的简单想法阐述了一下,其中有一个项目的 mentor(导师)非常热情,来回几番交流也十分愉快,算是理清了这个组织在做什么,他们这个项目想达到的效果。另外两个只是回复了我邮件便直接索要我的 proposal 了。说实话在不了解项目需求的情况下很难写一篇令人满意的 proposal,所以我也对这两个项目没怎么上心。

GSoC 的流程是 2 月末公布项目 idea,3 月末学生申请,所以有 1 个月的时间准备。但是早起的鸟儿有虫吃,有的人是 1 月份或上一年的 12 月就开始给项目贡献 PR(pull request) 了,所以他们申请的优势相当大。我的建议是越早准备越好,因为邮件的沟通没有 IM 频繁,再加上时区问题,交流的时间跨度会拉的很长。

我当时由于自己在参与一个科研投稿项目,分身乏术,几乎对申请上 GSoC 不抱什么希望了。但是在申请 deadline 前的几天,那个之前和我频繁交流的导师来询问我的 proposal,他督促我赶紧提交一份,即使不完美,提交了总比放弃好。我被他鼓励之后,立马连夜赶了一份出来提交了,虽然写的简单草率,但也是达到了一份合格 proposal 的要求:把需求、自己的解决办法、时间规划都写清楚了。deadline 前一天导师还对我进行了视频面试,幸运的是最后通过了审核,在学生生涯的最后一年赶上了 GSoC 的末班车。

工作

虽然 GSoC 是针对学生的,但我们不能以学生的心态面对这件事,而应该抱以雇员的态度。申请通过后,5 月整个月是暖身期,你可以熟悉组织里代码的提交流程,和组织里其他人聊聊天吹吹水搞搞关系,和导师多沟通一下之后暑假里的时间安排。比如你暑假有两周想去旅游,可以把这两周的工作提前完成。所以参加 GSoC 很自由,但要负责。

主要的工作流程全在 GitHub 上完成,从提 issue,到最后的 Pull Request 和 Code Review,日常交流是用 IRC 和 Gitter,文档管理用 Google doc。我的导师是意大利人,除了带我,还要带 4 个人,分别来自印度、牙买加、瑞士和俄罗斯。大家时区不同,每天 IRC 里的 Good morning 出现在各个时段。聊天都用英语,都是书面交流,所以口语差也没关系。

6 月正式开工,当时我是要用 WebGL 去重写一个大概 2 万节点,10 万条边的图结构可视化项目,前期工作不算一马平川,但也算走的稳当。到了中期,如何在 WebGL 中做交互成了一大难题,到了后期则是性能的优化。最终到 9 月份的时候我在 proposal 中提到的差不多有 90% 完成了,除了性能问题还有待提高。

3 个月中,我除了参加 GSoC 还需要水一篇论文,所以时间特别紧张,几乎是两班倒。导师问我进度的时候就各种解释,然后加班加点赶进度。每个月底会有一次评估,导师会针对你这个月的表现来决定你能不能继续参加,我每次都是低空飘过。最后项目结束我觉得我可能没达到导师的预期,但也算完成了工作。虽然总体上我觉得不是很出色,不过导师在 final evaluation 还是写了不错的评价。所有的工作总结在我之前的博文netjsongraph.js — Google Summer of Code (GSoC) 2017 summary (opens in a new tab)中。

体验

最后

人生艰难,作为象牙塔里的学生都能感到压力。如果你想利用暑假的大好时光来增加一点人生的经验,GSoC 可能是你不可多得的机会。享受一线互联网公司实习的待遇还能在 GitHub 上刷经验值,何乐不为?最重要的是,这可能是你开启另一种生活方式的一个机会,也可能是改变你编程生涯的机会(有的人成了大型开源组织的 core team member),更是一个跳出你舒适区的机会。

我时常担心自己变成温水里的青蛙,所以非常期待人生中的各种际遇,也想要体验各种各样的生活,在此共勉,加油朋友!