参加 Google Summer of Code 的体验

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

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

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

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

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

  • 针对学生。只有学生身份才能申请参加(包括本科、硕士、博士)
  • 一年一度。每年都能申请,3 月末开始(建议早点开始套磁)
  • 全球性。你可能会和世界各地的学生一起工作
  • 开源社区。你是为开源社区贡献代码,大部分组织在 GitHub 上,所以你的贡献都是开源的,谁都能看到
  • 暑假期间。6 月正式开始工作,到 9 月
  • 报酬。谷歌支付报酬,中国区为 3600 刀,比大厂实习工资都高
  • 远程工作。这点在刚才的概念介绍中没提到,你可以在你想呆的任何地方写代码,不用去办公室
  • 导师指导。每个项目会给你配一个导师,有的导师非常负责且是大牛,你可以跟他学到很多

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

GSoC 怎么申请?

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

正文 - 参加 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中。

体验

  • 代码水平有所提高。我参加的项目当时我导师他对前端可能没我熟,不过对代码风格、commit message 规范的要求还是很高的,在邮件中曾不止一次强调。另外他还推荐书单让我们阅读,他认为编程有很多是非常核心的、稳定的和通用的,学这部分才是关键。
  • 对开源有了全新认识。之前可能觉得开源只是一些个人开发者或组织把自认为不错的代码公布出来供大家交流。参加 GSoC 之后才发现很多开源组织非常庞大,组织架构都很多层,有自己的一套工作流程和方式、俨然一家公司模样,有自己的盈利方式,甚至有自己的基金。它们的目标不止是开发者,还可能是国家的基础设施建设等。再从个人开发者的角度来说,你可能由于参加 GSoC 而更加热爱开源,因为你发现开源社区的人都非常的热心和认真。
  • 和不同国家人工作的沟通成本很高。一方面是因为时区问题,大部分沟通,延迟回复都没什么问题,但一旦你提的 issue 是个紧急的 bug,而他这时候却在睡觉时间就很尴尬。另一方面是语言问题,尽管大家都用英语,但水平参差不齐,习惯不一,很多时候得多说两三次互相才能彻底理解对方的意思。不过认识新朋友看他们的 Twitter 和 Instagram 还是很有意思的。
  • 学会包装自己。这方面我们隔壁的印度朋友简直是典范,纵观他们的 proposal 和最后的总结都写的非常「浮夸」,平时的交流,他们也是非常频繁,活跃在各个平台。他们不是语言上浮夸,是内心上认为自己确实做到了他们叙述的效果。总之其他国家的同学比我们都高调一点,也很抱团,所以我们还是要学习一个。

最后

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

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


本作品采用知识共享 署名-非商业性使用-禁止演绎 4.0 国际 许可协议进行许可。