Google Summer of Code (GSoC) 2018 又要开始了. 如果想实现你心中的开源梦想, 用代码让世界变得更美好. 参加GSoC可能是你进入开源的世界最好途径.

GSoC是什么


Google Summer of Code是Google每年举办的一个活动. 从2005年开始到现在已经举办了十三届.

Google在GSoC中的角色是一个平台和资金的提供者. 通过这个平台, 学生能够找到自己心仪的开源组织, 为了能获得实现project idea的资格而展开竞争. 申请期截止之后, 开源组织会把自己选中的人选提供给Google, 由Google决定最终的入选人员. 如果成功入选, 入选者要在6-8月全职为开源组织coding来实现自己申请的project idea.

在整个历程中, 学生和组织会经历Google的三次审核. 工作量不达标的, 会被取消资格. 因为学生需要全职工作, Google会提供给学生一定数目的津贴. 2017年提供给中国大陆的学生的标准是3600刀每人.

这是一次竞争

参加GSoC并不是报名注册那么简单的事情. 根据GSoC 2017的数据, 在注册的20651个学生里面有4764个提交了propsoal, 最后被接受的学生有1318个. 从参加学生的国家来看, 印度569, 美国126, 德国55, 斯里兰卡54, 俄罗斯54, 中国大陆49 人员的分布基本这几年这样是稳定的.

参与申请GSoC的过程中, 可以说每一个你感兴趣的组织里面都会遇到很多的印度同学, 可能到最后你甚至会记下几个熟悉的印度姓氏. 来自美国的同学比想象中少的原因可能是因为Google给的津贴比起他们在当地的IT企业里面能找到的实习工资还是少很多的. 而来自中国大陆的同学的49人, 完全和我们CS学科的同学的数目不成比例. 尽管有一定的语言因素, 我还是认为这里最大的问题是信息鸿沟. 以中国同学的竞争力, 这里参加人数最多的应该是我们.

什么样的人适合申请GSoC?

做一个大概的轮廓描述的话, 我认为计算机专业现在大二的学生最适合申请GSoC. 因为从知识基础上来说, CS大二的同学已经学过了计算机的基础课 - 编程思想, 计算机组成原理, 数据结构. 同时不像大三的同学迫近准备升学, 工作, 他们的暑假时间最可能满足GSoC对全职的要求. 实际上, 在申请过程中, 我所看到的最大数目的申请者也是大二的同学.

但是, 我去年(2017)参加的时候, 我在读研究生一年级. 也有认识的同学, 是大三或者大四, 在网上也看到了博士期间参加的文章. 这里最重要的应该是你想要为开源做贡献, 并且有足够的责任感在相当大程度上独自完成你所申请的project.

GSoC的开源组织能够为从大一到博士的同学提供简单到写demo code和搭网站主页, 复杂到研究算法的各种难度的project. 如果是你用得特别顺手的开源软件, 你也可以自己提自己的project idea和他们讨论! 各种专业领域的同学都可以找到对应的可以做出贡献的开源组织.

不过这里要特别提醒的是, 对于在国内面临求职的同学, GSoC可能对你找工作并没有直接的帮助(除了去Google). 到IT企业实习拿到return offer来得更正确.

我的GSoC经历


缘起和准备

Google Summer of Code是16年冬天, 和同学一起打Google Kickstart的时候同学跟我聊起的. 后来和参加GSoC的同学聊, 他们也是从同学和学长那里听到相关的信息的. 一直到现在GSoC都应该还停留在口耳相传的状态. 后来上网了解了相关信息以后, 我作为谷粉自然是非常感兴趣的. 研一的寒假也给自己安排了小任务 - 关注GSoC的动态.

GSoC的开始都是开源组织先向Google提出申请, 通过之后GSoC才会列出他们的名单. 2017年的这个阶段, 一直持续到二月二十七日. 因为每年的组织基本都差不多, 尤其是大组织基本不会变. 在名单发布之前, 点进大组织的Forum发现里面已经讨论得热火朝天了, 看到了各种漂亮的简历. 各个组织已经基本列出了他们想要让学生实现的idea list, 有的讨论已经进行得很深入.

我的想法也从一开始的广撒网转移到关注适合自己项目上. 虽然我在自学机器学习相关的知识, 但是相比于能其他同学, 短时间内入手并达到不错的水平是比较难的. 我转向关注一些有工程难度, 语言合适的项目. 最后决定了帮Frescobaldi实现他们的Git支持功能. 作为一个乐谱IDE, Frescobaldi自带一种优雅, 用Pyhon也非常合我的心意. 我一开始就决定孤注一掷, 因为在从名单发布到开始申请的二十天时间里我最多只能够深入了解一个软件. 如果我能够更早地了解开源组织, 我可能会和几个组织接触.

套磁

名单发布的那天, Frescobaldi的Google Forum就挤进去很多的同学. 一共有十几个同学出现过, 除了我和一位上交的同学一个欧洲的同学一个美国同学剩下的都是印度的同学.

开始的几天讨论如何配置运行软件, 很快大家很快就进入了"套路"- 提PR(Pull Request). 方法很简单, 从Github的issue里面找已经有的wish, 如果看起来还简单, 就尝试自己实现然后提PR让组织的人员检查. 相比于提PR, 我的方法更直接, 通过读源码, 我尝试用了一周实现了一个基本能运行的Git支持Demo.

因为组织只是给出一个idea, 对于具体的细节则需要深入的讨论和思考. 在申请开始之前, 我把自己对于IDE里面的版本支持功能应该实现到什么程度和可能的mentor进行细致的交流. 我们也尝试一起调研了别的IDE里面的版本支持的情况. 我尝试给出了设计图. 因为之前对Python的使用仅限于一年前写过爬虫, 二十多天里面写Demo, 英文邮件交流, 写proposal着实让我忙了一阵. 从Forum的帖子数来看, 在所有的参加者里面我和mentor的交流是最多的.

可惜的是因为时间的因素, 上交的同学中途退出了. 他承诺了他会负责对Frescobaldi功能的翻译工作, 尽管他没有继续参与GSoC, 过了几个月之后他还是做完并提交了作品, 令人钦佩.

提交了proposal还有一个月才公布结果, 我为了维持mentor的好感度(hhh)还有为了熟悉我要工作的那部分代码和工作流程又提了两个PR. 当然, 最终如愿入选.

GSoC的工作

虽然做Demo只用了一周. 但是, 真正要实现一个大家会使用的功能要花多得多的时间. 有很多琐碎的问题:

  • 和mentor不能面对面, 我们花了很多时间统一用语和交流想法.

  • mentor对于一个软件的未来功能的思考和我不同, 尽管现在这部分能实现的功能看起来简单, 但是要为以后的能想到的拓展都做好准备, 在类的抽象结构上是他的主要关注点.

  • 对Git的支持会受到Git版本的影响, 命令会有变化. 常常需要自己反复读文档和实验过之后才能写完一个简单的函数.

  • 对于如何异步执行命令, 我提出的是一个命令队列. mentor希望使用定时卡表执行的方式, 并认为我的方法不Pythonic. 我坚持了我的观点.

  • ...

mentor的耐心和严格对于提升代码质量很有帮助. 我写代码的过程中也尝试像mentor更多地从模块的角度思考而不是沉迷于一两点细节.

GSoC的规定中, mentor并没有拿到谷歌的钱. 所以, mentor对于学生的帮助是他们出于mentor身份的道德责任, 而GSoC是学生一个人的责任和项目. 一开始我会讨论很多细节问题, 后来就逐渐尝试自己来处理. mentor会code review来判断我是否写了有问题的代码. 后来在和mentor的交流中, 他也聊到了这个问题. 因为我一开始的问题比较多, 他是担心的. 对于mentor来说, 他自己写要比给我解答问题更快. 对于我, 凡事都问不能培养我的信心. 对于这种质量监控的场景, 要想好什么程度的问题是完全属于自己的责任范围, 什么问题是需要和mentor讨论决定的.

三个月是比较长的时间, 在其中难免会遇到问题, 而且由于是远程工作. 是否做出贡献, 是否全职工作全靠个人的自觉. 我的mentor因为要完成他的博士论文, 会有有半个月的失联期. 没人监督的情况下, 坚持工作和输出是一个考验. 最后GSoC结束时, 我完成了Git支持的基础设施搭建. Git diff和revert功能. 还有部分未经测试的git stage代码. 跟我最初proposal里面提出要完成的工作, 还算差强人意.

不过从整个功能的完整实现来说, 还需要后续许多精力的投入. 可惜的是, 结束后一直到今天只修了两次bug, 惭愧.

GSoC能带给你什么


  • 最基础的-可能是第一次开源经历
    这个开源和自己建一个repo不和人交流是完全不同的体验. 你会熟悉读一个软件的源码, 在issue列表里面和别人讨论架构和feature, 提交自己的PR做出贡献. 这是你进入开源世界第一步. 你可能在开源的门外已经徘徊了很久, 而以后面对其他的开源软件你就驾轻就熟了.
  • 认识一群厉害的人
    从一开始你就在和来自全世界的申请者竞争, 看他们的简历, 代码, proposal. 我常常惊叹大一大二的同学的proposal和简历可以写得那么优秀, 简历可以那么丰富有分量. 而开源这件事情往往就是1%的人做的事情, 因为它需要热情, 能力和时间投入. 所以你在开源组织里面遇到的contributor和你的mentor有很多值得学习的地方.
  • 写高质量的代码 - 可能是第一次被code review
    学校的toy code, 导师的垃圾项目和开源世界的大部分代码相比, 我相信你可以轻易得出结论. mentor的codre review也许是你第一次被code review. 知乎上有回答说, GSoC是你要自己完成一个要被很多人使用的feature, 会经过讨论, 测试和审查. 而一份互联网公司的实习很可能让你跟着业务需求做一些修改. 我认同这种说法.
  • 带着 "google summer of code" 的简历

  • 薪金
    尽管2017年降到3600刀, 折合24000人民币三个月. 这比互联网大厂的实习工资要高多了hhh

个人建议


  • 勇敢尝试
    GSoC被有些人渲染得非常难入选, 也有人说参加了什么都没学到什么.但是这本质上是一个小马过河的问题,你需要自己尝试以后才知道故事到底是怎样的.既然你看到了这个机会,为什么不试一试?

  • Talk is cheap, show me the code
    从组织的选人角度思考, 这是基本准则. 开源本质是公益性的活动, 而且对于参与者的水平要求也不低. 所以, 开源组织普遍面临的一个问题就是, 缺人. 缺能稳定贡献有质量代码的贡献者.
    GSoC每年给他们提供的名额是有限的, 所以开源组织总是希望找到的学生很靠谱, 可以说到做到而不是中途逃跑, 浪费他们有限的名额. 而如何证明你是个靠谱的人呢? 稳定出现频率,你需要经常出现在组织里,而不是隔一阵出现一下,突然联系不上,这会让他们很没有安全感.靠谱的代码能力, 你要让他们相信,把这个feature交给你,你能独立应付.所以这也是为什么PR成为"套路"的原因,没什么比你写代码证明你的编程能力更有说服力的了. 
    有意思的是,你的学校,学历, 专业都不是问题,因为对于一个外国的mentor来说,你来自中国的哪个学校对于他完全没有任何区别.这里只有简单的一条准则,Talk is cheap, show me the code 证明自己就好.
  • 做一个负责的学生
    如果能入选, 这将是一次remote working经历.没有人在旁边监督,保持全职的工作时间和工作质量并不是一件容易的事情. 

一些链接,可能对你有用


Google Summer of Code 2017 statistics part 1
How to write a kick-ass proposal for Google Summer of Code
Want to be selected for Google Summer of Code 2016?
samarkanov/proposal-GSOC13
MoritzLucaSchmid/GSoC-proposal

04-15 12:40