阅读文本大概需要 6.66 分钟。
你听过 GSoC 么?我想绝大部分人都没听过。
GSoC 全称是 Google Summer of Code,即 Google 编程之夏,GSoC 是很多学生朋友们的福音,参加这个项目绝对会让自己收获巨大,甚至是很多人在硅谷混的一个启蒙之路,可惜的是,国内没多少人知道这个项目,那么今天我就带大家认识下 GSoC。
值得一提的是,在之前我也不知道 GSoC 这个项目,是我一个小密圈圈友「LoLo」在小密圈分享我才了解到的,LoLo 是北大空间物理专业的在读学生,然而自己却对 IT 感兴趣,自学了不少相关知识,之前在我公众号留言过,说要去微软面试,值得高兴的是,他现在已经面试通过,在微软大数据挖掘组实习,他也报名参加了今年的 GSoC,其中有很多感触,收获特别特别大,并且把自己的经历与经验总结了下来,这里必须扩散让更多的同学受益。
背景
这篇文章包含了对 Google 编程之夏(Google Summer of Code,简称 GSoC)的介绍、个人感受和一些申请技巧。写作的契机源于一篇发布在 Google Open Source 上的博客「Google Summer of Code 2017 statistics part 1」,这篇博客列出了 2017 年参与项目的学生的国家分布情况,其中有几项数字颇为有趣:2017 年总共有来自 72 个国家的 1318 名学生获得了项目资格,其中来自中国大陆的学生 49 名,来自美国的学生 126 名。学生最多的是哪个国家呢?你们可能猜到了,是我们的邻居印度,有足足 569 名!超过全部学生的 40%。
印度学生的比例之高令人咋舌,相比之下我们中国学生的人数就有点少得可怜了。然而就我个人的感受而言,中国学生数量少的最大原因也许是:根本没有听说过这个项目!「GSoC 是什么?好吃么?」,估计这才是绝大部分人听到 GSoC 之后的感受。
我自己了解到 GSoC,是大一暑假机缘巧合下看到了同校大神 @杨垒 的一篇博客「申请 Google Summer of Code 2015」。之后本打算在 2016 年申请的,但因为暑假参加了车协的暑期远征而搁置,而后在 2017 年申请并顺利通过。这一年多里我也时不常的跟身边的小伙伴安利。后来在今年的 GSoC 微信群中也看到了好几个北大同学,大家也更多的是靠身边人的口口相传了解到 GSoC。非常开心在这之中自己也为 GSoC 在我校的普及做出了一点微小的贡献。
当我看到印度学生人数 10 倍于我们,参与人数排名前十的学校中有八个来自印度时,除了多少有些不服气,更多的是钦佩印度程序员们相互提携、信息共享的机制,这点上跟他们为何能在硅谷混的风生水起有不少共通之处,不过不是本文重点,不做展开。基于这些背景,这几天我一直筹划着写一篇较为正式的文章,介绍 GSoC 并提供一些自己的感受和申请经验。以后再安利时便不必再笨拙的口述,直接把文章丢过去就好~ 同时也希望更多热爱技术的同学们能够通过本文,了解并有机会参与到这样一个 Google 组织的、含金量高、报酬丰厚(你可以拿到数万元的奖励!)、拥有众多大名鼎鼎的开源社区参与的暑期项目。希望能以此为广大技术水平扎实并渴望锻炼的国内大学生们提供一点微小的帮助,不要再因为「不知道」、「没听说」而错过了这样一个优秀的项目!
Google 编程之夏是什么
这个问题,我们先来看看 Google 官方是怎么说的:(出自 What is Google Summer of Code?)
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? 」
http://write.flossmanuals.net/gsocstudentguide/what-is-google-summer-of-code/
如果用一句话概括的话就是,学生用一个暑假的时间(其实从 5 月底 6 月初就会开始,国外放暑假较早)在导师的指导下为开源社区写代码,Google 为你的工作支付报酬(2017 年之前似乎是 5K 刀;2017 年开始分地区支付,中国大陆降低至 3.6K 刀,换算过来约 25K 软妹币,仍然是一笔可观的收入)。
GSoC 含金量高在哪里
通常而言,同学们夏天想自我提升的话有两个去处,一是暑研、二是暑期实习。GSoC 偏向工程,和后者更为相似(但也有很大不同),和暑期实习对比着来分析,更容易看出 GSoC 的优势:
时间安排和工作模式
- 以 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 项目,两者兼得。比如我自己,在今天夏天参与 GSoC 项目的同时,也会在 MSRA 大数据组实习。因这次 GSoC 认识的 @大缺弦 也是同样既参与 GSoC 又在 MSRA 实习。所以说完全不用担心因为参加 GSoC 而错过其他机会!
申请资格、流程和技巧
任何在读的本科、硕士、博士生均可以申请 GSoC。如果你已经毕业了,那就非常遗憾不能再以学生身份参与 GSoC 了。Google 还有一些更细节的要求,但一般都是可以满足的,具体可参照:FAQ#What are the eligibility requirements for participation?
Google 每年都会发布 GSoC 的时间表,例如 2017 年的:Google Summer of Code 2017 Timeline
https://developers.google.com/open-source/gsoc/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 之旅了!
以上是申请流程的基本概要,Google 官方也提供了非常详尽的 学生指南 和 FAQ,这些内容你都可以在其中找到,并且有更为详细和准确的申请介绍和指导。
下面就是私货啦!一些我自己的和其他 GSoC 参与者的人生经验!
首先是选什么。参与 GSoC 的组织会有数百个,一个个看根本看不过来,选择困难症们可要头疼了。我的建议是选择自己有过实际使用经验的,相对于从未使用过的语言、框架等,你会对它们更加了解,比如今年我就考虑了 homebrew、checkstyle(Java 静态检查工具,很早就引入了 PKU Helper 开发之中,后来我也最终选择了这个组织下的项目);其次,选择与自身技术栈相匹配的,比如我最擅长的技术栈是 JVM Based Language,我就会更加留意用到 Java、Clojure、Scala 的项目。
划定了最初范围之后,你就可以通过组织公开的联络渠道,同导师们联(套)系(磁)。通常来讲以 Mailing List 和 IRC 居多,也有 IM。你可以进一步的了解这些组织和下属的项目,从而找到你最感兴趣的。虽然每个人可以填写多至 5 份 Proposals,但就实际经验而言,认真书写一份 Proposal 就要花费非常多的精力了,广撒网是不太可取的,重在精不在多。根据 Google Summer of Code 2017 statistics part 2,2017 年共有 4764 名学生提交了 7089 份 Proposals。也就是说平均下来每个人也就提交了一份多而已。
在选定了 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 之外,在宣布最终名单之前和导师们的套磁也是非常重要的!多在 Mailing List 中刷刷脸,积极参与讨论。如果能够提出 Bug 甚至修复 Bug 或者实现新的 Feature 那是最好的。Checkstyle 的导师在最开始就清楚的写到学生的 Fixed Issue 数是很重要的指标。后来在 deadline 之前我足足交了 8 个 PR 位列十多个竞争者第一,这点也为我最终被选中加了不少分。
总结一下,认真投入、积极参与、多讨论多反馈,甚至去帮助社区中的其他开发者,那么你就会有非常大的机会被选中!今年 4764 名提交了 Proposals 的学生中有 1318 名被选中,入选率大于四分之一,是相当高的。而且这 4764 人里其实有很多人是根本没有好好写 Proposal 的,也有很多人是水平真的很差也过来申请的。所以对绝大多数基础不差的国内大学生来讲,只要好好申请都是比较容易中的。要知道,咱们大学生的技术功底,甚至英语水平,绝不比邻居印度学生差(印度人的英语真的不见得都好),人家可以申请到 500+,咱们也可以做到,49 人远远不是咱们的真实水平!
结语
2017 年的 GSoC 已经在如火如荼的进行中了,今年错过了的小伙伴们不要遗憾,只要你们不是下个月就毕业离开校园了,GSoC 2018 便等着你们~ 离明年的 GSoC 申请开放还有半年多的时间,如果你觉得现在自己能力还稍显不足,那就趁着这段时间努力提高自己,逐渐尝试阅读一些 GitHub 上的开源项目,甚至参与其中吧!祝愿你们都能顺利申请到自己喜欢的 GSoC 项目!