刚刚结束了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都是国内的就非常方便啦,可以随时聊天还可以用中文。想想都觉得美滋滋。

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