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 的交流中, 他也聊到了这个问题. 因为我一开始的问题比较多, 他是担心的. 因为带一个比较差的 coder, 对于双方都是一种折磨. 对于 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
来源: http://www.bubuko.com/infodetail-2471199.html