关于Google Summer of Code 的记事贴

提示:本文中大部分链接是 google 子站,需要科学上网。

什么是 GSOC

Google Summer of Code (GSoC) is a global program that matches students up with open source, free software and technology-related organizations to write code and get paid to do it! The organizations provide mentors who act as guides through the entire process, from learning about the community to contributing code. The idea is to get students involved in and familiar with the open source community and help them to put their summer break to good use.

Google 编程之夏是一个全球性项目,旨在为学生们和开源、自由软件、技术相关的组织建立联系,让学生们贡献代码并获得报酬!组织会提供导师,在学生从熟悉社区到贡献代码的整个过程中提供指导。这个想法的目的是让学生们参与和熟悉开源社区,并帮助他们充分利用暑假时间去得到锻炼。

以上是一份来自官网的简介。更多细节可以参考这个 What-Is-Google-Summer-Of-Code / GSoCStudentGuide

官方指南(Official Guide)

这是一份官方指南书,分为导师指南和学生指南。

TimeLine for 2020

https://developers.google.com/open-source/gsoc/timeline

2020年时间表

注意:2 月 20 日开放项目,这时开始准备动议。3 月 16 日提交动议,学生申请开始,3 月 31 日截止

联络

博客文章

  • 参加 Google Summer of Code 的体验 - GeekPlux
  • (博主的项目总结) netjsongraph.js – Google Summer of Code (GSoC) 2017 summary - GeekPlux
  • 这是一篇关于 Google Summer of Code 的介绍
  • GSoC 2019 小结
    注:这篇文章的参与者现在已经是 casbin 团队的 mentor 了。他对于项目成员的介绍如下

    我是 Casbin 开源项目创始人 Yang Luo,PKU Ph.D 毕业。Casbin 是一个安全领域的访问控制方面项目,涉及到 Go, Java, Node.js, Javascript (React), Python, PHP, .NET, Delphi, Rust 等多种语言。今年有幸被选入 GSoC 2020,现在还不清楚 slots 有多少,希望接触到优秀的同学来参与贡献。按照招互联网实习生的标准招人。


    讨论:

    这种开源项目的申请,和互联网公司实习生的标准还是有出入的,GSOC 的风险更大一些,proposal 的写作,有些项目需要用英语面试,以及同一个项目同一个 idea 的申请人数都会有出入,比如我去年申请的另一个项目的某个 idea,最后一个人都没有录取,我问那个 mentor 要反馈,他说,他不太有时间带学生,其它项目有两个及以上的 mentor 一起带,所以我那份就没给录上。

    另外中国面实习生和美国面实习生的套路还不太一样,我去年暑假面了下头条深圳的职位,问的很多所谓的基础知识,非常具体非常细节,而美国这边基本上就是面 leetcode 上的算法题,需要对 leetcode 之类题目的套路比较熟悉。

    我能给的建议是,proposal 要尽量具体,具体到代码里需要改动哪些类,在哪里实现怎样的功能,我当时的 proposal 是标出了具体想改动的代码行数的。我的 GSOC 2019 的总结发在了 http://ruiguo.me/gsoc-2019xiao-jie.html

相关材料

github repo:

其中上面这个链接包含很多有用内容。例如申请的动议 proposal

知乎经验文章:

其中上面这篇文章讲的十分详细,重要点做个摘要:

时间安排和工作模式

以 2017 年为例。5 月 4 日 Google 宣布入选学生名单,之后到 5 月 30 日约一个月的时间为 Community Bonding Period,在这段时间里可以熟悉社区、和导师针对你的项目进行探讨等。5 月 31 日开始至 8 月 29 日是正式工作时间,你将会在约 12 周的时间里完成你所申请的项目。除了开始时间略早于国内期末考试时间外,时间跨度上基本与大部分暑期实习无异。而具体的任务量因项目而异,但通常不会太过繁重。导师也一般不会为难你,即使不能全部完成预期的内容,只要全程认真负责的参与,大都也会给 Pass。可能更多的时候是项目对中国学生而言是比较水的,比如前几天(Coding Period 才刚刚开始)群里就有人表示已经把全部 Coding 做完了现在正无聊的写文档……

GSoC 的任务全部是线上(online)完成的,相对于实习时每日早晚高峰痛苦的挤地铁(不忍吐槽帝都的交通),你完全可以在家中、在学校宿舍完成需要做的一切。简捷高效,不要太省心!

报酬

降价之前的报酬折算至每月是 11K 有余,几乎快赶上一线互联网公司的正式应届员工价格了。降价之后大概是一月 8K 多,仍然是碾压各家一线的实习生价格。还不用扣税哟!

个人成长

在 GSoC 项目期间,每个学生都会被分配一名导师,在整个项目期间给予你帮助。就我的亲身经历和身边人的体会,虽然会有些比较懒的放养导师,不过基本上还都是非常认真负责而且热心的。导师本身的技术水平也都十分出色。而如果你参与的是 GCC、OpenCV 这类久负盛名的工具、语言、框架的组织下的项目,很可能你的导师就会是这些组织的 Core Team Developer,他们可都是在行业内备受尊敬的大牛。

再拿我的经历举例。有一次我向主仓库提交了一段总计不超过 50 行的改动,但因为改动较为关键,组织内的几个导师和我充分的讨论了足足一周,覆盖了代码风格、性能优化、可测试性、向前和向后兼容、设计原则等方方面面,经过数次修改,最终成功并入。这个过程中是收获巨大的。通常我们会讲被 review 是非常好的学习途径,写越少而精的代码,被 review 的越详细,对应的成长是越快的。而 GSoC 正是这种模式。

相比而言,大部分一线开发岗位的实习,负责带你的人很可能也只是刚毕业工作过三五年,本身技术水平不算惊艳,而业务导向的开发则是以效率为先的,很难有机会有人给你的代码做详尽细致的 review。更糟糕的一些情况是,可能有些实习生大部分时间都在做“打杂”的工作,而不能进行真正有意义的创造,更谈不上学习了。 当然实习也绝不能被一棍子打死,像 MSRA 的研究实习生、BAT TMD 华为这些一线公司的实验室或者核心部门实习也都是相当有含金量的,其中也有很多 GSoC 中所不能学习到的东西,也是非常值得选择的。

综上来看,GSoC 的质量是相当高的,从各方面来看,都非常值得参与。Google 官方资料中有这样一句话:

Successful students have widely reported that their participation in GSoC made them more attractive to potential employers and that the program has helped greatly when embarking on their technical careers.

GSoC 在世界范围内都很受认可,成功的完成 GSoC 项目的你会更容易受到用人公司的青睐。如果未来希望加入 Google,这段经历则更是一大加分项。

申请资格、流程和技巧

任何在读的本科、硕士、博士生均可以申请 GSoC。如果你已经毕业了,那就非常遗憾不能再以学生身份参与 GSoC 了。Google 还有一些更细节的要求,但一般都是可以满足的,具体可参照:FAQ#What are the eligibility requirements for participation?

Google 每年都会发布 GSoC 的时间表,例如 2017 年的:Google Summer of Code 2017 Timeline

其中有一项是 List of accepted mentoring organizations published,即宣布当年的组织列表,每个组织都会有一个主页,列出可供你选择的 Project Ideas。今年是在 2 月 27 日宣布的。在这之后你就可以查看成百上千个 Ideas 并找出你所感兴趣的了。在 Student application deadline 之前(今年为 4 月 3 日),你可以向 Google 提交至多 5 份 Proposals,每一份 Proposal 要包含你对其中一个 Idea 的设想、实施方案、时间规划等,Proposal 需要写的具体内容因组织者的要求而异。此后由组织负责审阅所有学生提交的 Proposals,选出他们所认为优秀的。在约一个月之后(今年为 5 月 4 日),Google 会宣布被选中的学生列表,如果你顺利通过,便可以开始当年的 GSoC 之旅了!

关于项目选择

首先是选什么。参与 GSoC 的组织会有数百个,一个个看根本看不过来,选择困难症们可要头疼了。我的建议是选择自己有过实际使用经验的,相对于从未使用过的语言、框架等,你会对它们更加了解,比如今年我就考虑了 homebrew、checkstyle(Java 静态检查工具,很早就引入了 PKU Helper 开发之中,后来我也最终选择了这个组织下的项目);其次,选择与自身技术栈相匹配的,比如我最擅长的技术栈是 JVM Based Language,我就会更加留意用到 Java、Clojure、Scala 的项目。

划定了最初范围之后,你就可以通过组织公开的联络渠道,同导师们联(套)系(磁)。通常来讲以 Mailing List 和 IRC 居多,也有 IM。你可以进一步的了解这些组织和下属的项目,从而找到你最感兴趣的。虽然每个人可以填写多至 5 份 Proposals,但就实际经验而言,认真书写一份 Proposal 就要花费非常多的精力了,广撒网是不太可取的,重在精不在多。

在选定了 checkstyle 之后,我非常感兴趣一个叫 Optimization of Distance Between Methods in Single Java Class 的项目。它涉及到算法、数学模型,非常有趣同时又附有挑战性。

之后就是为此撰写 Proposal,其中分为了三大部分:About Me、Project 和 Extra Information。About Me 就是一些个人基本信息和编程技能的介绍,Extra Information 给出了我的工作时间、时区和一些想说的话。Project 是最要的部分,包含了 Project Description、Outline 和 Expected Timeline。其中详细的给出了我预想的数学模型的设计、统计分析过程、可使用的算法和实现以及会为此撰写一篇 Article。

书写 Proposal的重点在我看来就是要认真细致、考虑可行性和工作量、和导师们充分讨论,最后再加上一条美观。在以上的方法论下我花费了一周多的时间磨出一份颜值甚高的 Proposal 来,和导师们也讨论的风生水起。本来觉得拿到这个项目板上钉钉了,结果离 application deadline 还有两天的时候,导师突然私信我说,我们认为这个项目太难了,我们可能找不到足够多的导师来带你,所以你赶紧再找一个项目赶一篇 Proposal 出来吧。我:???……没办法,花了半天的时间挑了另一个看着还可以的项目火速写了一篇出来。导师也够意思,跟我说你随便写写思路就完了,不用太详细。之后赶在 deadline 前顺利上交两份 Proposals,并且中了后面那篇。

导师对我的 Proposal 评价很高,如果以后有申请的小伙伴感兴趣想参考的话可以移步 Google Docs:Optimization of Distance Between Methods in Single Java ClassRegression Testing Tool and HTML Report Generator for Pull Request

除了一份质量过硬的 Proposal 之外,在宣布最终名单之前和导师们的套磁也是非常重要的!多在 Mailing List 中刷刷脸,积极参与讨论。如果能够提出 Bug 甚至修复 Bug 或者实现新的 Feature 那是最好的。Checkstyle 的导师在最开始就清楚的写到学生的 Fixed Issue 数是很重要的指标。后来在 deadline 之前我足足交了 8 个 PR 位列十多个竞争者第一,这点也为我最终被选中加了不少分。

总结一下,认真投入、积极参与、多讨论多反馈,甚至去帮助社区中的其他开发者,那么你就会有非常大的机会被选中!今年 4764 名提交了 Proposals 的学生中有 1318 名被选中,入选率大于四分之一,是相当高的。而且这 4764 人里其实有很多人是根本没有好好写 Proposal 的,也有很多人是水平真的很差也过来申请的。所以对绝大多数基础不差的国内大学生来讲,只要好好申请都是比较容易中的。

团队消息

贡献指南

可以贡献给 gsoc-cn,本人只做简单记录和攻略收集。