你听过 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 官方是怎么说的:(出自 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 的优势:
降价之前的报酬折算至每月是 11K 有余,几乎快赶上一线互联网公司的正式应届员工价格了。降价之后大概是一月 8K 多,仍然是碾压各家一线的实习生价格。还不用扣税哟!
综上来看,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?
https://developers.google.com/open-source/gsoc/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 评价很高,如果以后有申请的小伙伴感兴趣想参考的话可以移步 Google Docs:
https://docs.google.com/document/d/1lWXpWhUN6cE06sjQANjWxamc_X3ddbSphTRSofChLyk/edit
除了一份质量过硬的 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 项目!
PS:这么好的项目国内同学们竟然很少人知道,有点小悲哀,求大家扩散,让更多的同学们知道,也希望下次 GSoC 项目中可以见到更多的中国学生们。
这次,我没在扯淡!
不止技术与职场,还有生活与远方
长按关注,听我扯淡
——
微博: @googdev
个人博客: http://stormzhang.com