刚刚结束了 2018 年的 Google Summer of Code(简称 GSoC),很幸运在今年寒假刚得知 GSoC 这个活动就顺利的参加了。国内参与 GSoC 的同学似乎并不多,我能得知这个活动也因为是看到了几位前辈的博客。正是因为一些前辈热心的分享才使得国内有更多的同学有机会得知并参与这个活动。所以我也在这里分享一下吧。

Google Summer of Code 简介

简单的说这是一个 Google 鼓励学生参与开源项目的活动,对于参与这个活动的学生既可以参与高质量的开源项目,又可以获得不少奖金。

GSoC 官方网站

然后这是一个前辈们组建的国内关于 GSoC 的社区: GSoC-CN

有 gitter 和 Telegram 群组,现在看起来 gitter 相对比较活跃一点,但是我不久前才知道还有 gitter。我个人比较常用 TG 一点,也从 TG 得到了很多前辈的帮助。

我参与的项目是 Mozilla 的 metricsgraphics,mentor 是 William Lachance,前辈推荐的一位非常优秀的 mentor,非常的耐心,在过程中给了很多编程思想上的指导。

参与方式

可以参考 这部分。这是 申请的地址,下面说一些细节。

在每年三月份的时候会开放申请,学生需要在参与的社区当中选择一个社区,并提交 proposal。社区会列出一些 project 供选择,也可以提交未列出的 proposal。每个项目会有一位或多位 mentor。

可以提交最多三份 proposal,但是必须得是同一个社区。但是不一定社区列出的 project 最终一定有人来做,也就是说如果一个社区申请的学生特别少,也不一定申请的就一定能被选中。最终每个社区具体可以有几个名额都是不一定的。但是通常来说一些热门的每年都参与 GSOC 的社区都可以拥有不少名额。但是到底选择哪个社区还是要看自己的喜好,选择一个自己感兴趣的项目申请。

如何提高被选中的几率也有很多前辈说过了,主要就是要在申请之前和 mentor 或者社区混熟,如果你之前就对于一个社区有很多贡献那么自然很容易被青睐。但是也不是必须有过贡献才可能被选中,你也可以看到社区列出的项目后再去讨论。讨论的地方不同社区不一定,社区的介绍页面会列出 IRC 或者 email list 之类的联系方式。如果有 mentor 的邮箱的话也可以直接发邮件。但是在申请之前必须得先和 mentor 有过联系。可以看了项目的大致描述之后再询问一些细节,谈谈你的想法。可以再找一些相关的 issue,做几个短平快的,以证明你对于开源项目贡献的流程已经熟悉了。最重要的是让 mentor 觉得你已经 on the way 了。

感谢前辈 @Tiramisu Lin 在我申请时给了很多帮助。以上的一些经验也是得益于 dalao 的教导。

一些可能的问题

在申请之后需要提交你的学生身份的证明,这里的要求非常高,而且必须得翻译成英文。可以同时放上原本的照片以及标记过英文的照片。必须全部文字都进行翻译,包括校徽、盖章这些。必须具有年份相关的信息,以证明你还在读。如果被拒绝的话还可以再次提交,但是要尽快,因为审核的速度很慢,否则再提交可能时间就不够了。我当时提交时被拒绝了两次,每次都间隔几天。我最终提交的图片包括了学生证封面,照片和信息页以及盖章的那页,最终还加了一段注释描述我的情况。

今年奖金是通过 Payoneer 发放,为了收取奖金需要通过它给的链接注册一个账号,可以选择汇款到国内银行卡或者 Payoneer MasterCard。Payoneer MasterCard 不知道是什么,但是有些地区会无法收到。我选择的是汇款到国内银行卡,注册时会告诉你要收取(好像是 2%)手续费,实际上发放的时候是全额的,并不会扣手续费,而且汇款的速度非常快,所以不用担心。之后会让你填税单,在美国就必须填。国内不用填的。

在 proposal 中很重要的一部分是 schedule。在写 proposal 时 schedule 需要尽量的细致和完善,但是实际进行的时候并不一定要根据 proposal 上的 schedule 来。在申请通过后可以和 mentor 联系,制定你们具体的计划。

过程中有三次 evaluation,只有最后一次需要提交代码,前两次只要填一些 feedback 之类的。只要你的 mentor 觉得 ok 基本上就没问题的。即使是 final evaluation 也不会因为 proposal 上的内容未完成而 fail,只要保持和 mentor 的沟通就可以。

每次 evaluation 之后你也会收到 mentor 的评论,可以在 GSOC 官网或者收到的邮件上看到。我前两次都没注意,导致 mentor 说了一些事情我都不知道。到 final evaluation 我才看到 mentor 一直建议我写博客分享一下在做的事情。这个事情平时和 mentor 交流的时候 mentor 没直接说过,所以我一直不知道。之后可能会补上一篇博客。

可以订阅 GSOC Students 这个 google group,申请时就可以选择订阅了,这里经常会讨论一些八卦的事情。你可以通过这个得到很多信息。比如有一个 关于 stipend 金额的讨论。因为 stipend 确实收入越高的国家越多,美国的学生有 6k 刀的 stipend,而中国今年只有 3600 刀(前几年应该是 5k 刀)。然后就有人问为啥越穷的地区你给他发的钱越少?下面有一些很有意思的回答。

另外还有一个消息也是从 google group 上看到的,一个 mentor 问宣布了申请通过的名单后能不能取消,因为他担心选中的那个学生无法完成。所以也不是通过了申请就一定稳了。后面还是要好好和 mentor 沟通,把计划的任务完成。

个人的一些想法和收获

一个学弟问过要参加 GSOC 是应该提前会一些技能再找对应的项目做还是看到了想做的项目再学习对应的技能。基本的一些编程技能和对开源社区以及大致的贡献流程的了解肯定是必须的,这些都很容易,而具体到一个社区是怎么进行 issue 管理,代码 review 与合并的这些可以之后再了解。gsoc-cn 这里也有很多前辈的经验,有一位同学就参与了一个自己并不很了解的技术的项目。所以不用很担心。

个人花在 GSOC 上的时间其实并不是非常多,在写 proposal 的那段时间还在做一个比赛的项目。当时刚知道 GSOC 不久,而且有点虚,就想着选一个简单的项目参加就好了。然后花了几天写了一个 Multi-tab select in Firefox 的 proposal,我当时看到 Firefox 标签不能多选还是比较吃惊的,我是对于标签多选使用的是非常频繁的。批量关闭移动都非常方便。这个项目的 mentor 是 Jared Wein,花了不少时间询问 jaws 这个项目的问题。而且花了很多时间了解 Firefox 怎么编译,如何使用 mercurial 和 bugzilla。但是后来前辈推荐了 wlach,抱着多申请一个几率大一点的想法就又花了很多时间了解 metricsgraphic。当时给 wlach 看了 proposal 之后给了很多建议,所以花了很多时间修改了很多次。并且最终 wlach 亲自帮我修改了许多语法错误。当时能感觉到 mentor 非常的热情,就可以感觉到被选中的几率很大了。

后来实际上做的时候就要轻松很多了,因为我的 proposal 内容很简单,所以一两周就将 proposal 的内容做好了,后面就是修修各种其他的 bug,非常轻松。唯一比较花时间的地方就是写邮件和 irc 上交流的时候了。之前还试过通过 skype 语音,但是我口语实在是菜,所以最后还是日常通过 irc 交流。然后我在回复的时候就经常需要用 Google 翻译,然后用 grammerly 检查语法错误。所以经常回消息很慢,回一封邮件可能要一个小时。

还有一点就是因为 wlach 在多伦多,刚好时差和国内差 12 个小时,所以即时交流的时间很少,只有一个人是晚上一个人是清晨的时候才能在 irc 上交流。而 email 每次回复一定要间隔一天,所以几乎每天都通过 email 交流,导致一些进程会进展的很慢。

不过国内也有前辈做 mentor,如果刚好学生和 mentor 都是国内的就非常方便啦,可以随时聊天还可以用中文。想想都觉得美滋滋。

总得来说就是这个活动很棒,而且大家都可以尝试一下。我在开放申请前不久才得知有这个活动都成功的参与了,所以并不需要提前做很多的准备啦,不用担心。