开源培训计划 (GSoC/JSoC/OSPP)

作者: 陈久宁, 田俊

本文是关于 Julia 中文社区的开源学生培训计划 (GSoC/JSoC/OSPP) 的介绍和指导。一部分内容来源于官方指南,一部分内容来源于自己作为学生和导师参与进这些活动的经验。

太长不看版
学生每年2-5月开始可以申请 GSoC/JSoC 以及 OSPP 等编程培训项目,在开源社区中完成一个实际项目来提升自己的编程能力与经验,并获得一定的补贴。这项活动比大部分实习工作要更有挑战性,收获也会更大。如果你对 Julia 感兴趣,对开源社区感兴趣,并且想找到一个实践的机会的话,就请参与进来吧!

更新:GSoC 2022 开始也接受非学生群体的申请。

前言

Julia 社区每年都会组织参与 Google Summer of Code (GSoC)Julia Summer of Code (JSoC) 活动,在这类活动中存在三方参与者:活动组委会,社区,以及学生。用简单的话来说就是:社区提供一些项目 idea 和相应的指导老师(一般是社区的核心开发者),学生参与进来贡献代码并学习以开发者的角色思考和决策,组委会则负责活动的宣传以及给学生(和导师)发放相应的补贴。这项活动对于那些有一定编程语言功底支撑的学生来说,是一个非常好的提升自己编程能力的机会,同时也是一个非常好的融入开源社区的契机。

早期这些活动都是以英文社区为主导,很多中国学生由于缺乏足够的英文交流能力作为支撑,在没有融入英文社区都不知道有这类活动,或者即使知道也很难找到合适的项目参与进去。

开源软件供应链点亮计划 Open Source Promotion Plan(OSPP) 是自 2020 年起由中科院软件所和 OpenEuler 社区牵头组织的国内版 GSoC。Julia 中文社区从 2021 年(今年)开始加入这个活动,并计划每年都持续参与进来。

考虑到国内的开源社区发展相对来说还是十分落后,很多学生并不了解这类活动的定位和参与方式,这里简单做一个介绍和梳理,并期望接下来无论是导师或者是学生对于这项活动能够有一个比较清楚的定位,从而让活动更加顺利地进行下去。

注1:除去 GSoC/JSoC/OSPP 以外,Julia 社区内还参与一些其他的编程项目,例如:MLH (major league hacking) Fellowship、Digital Ocean Hacktoberfest、以及 GSoD(Google Season of Docs)等其他活动。不过这些在 Julia 社区暂时并不存在一个大范围内统一的活动规划,因此在本文中并不介绍这些。如果对这些活动感兴趣的话,可以自行去寻找相关材料。

项目说明

GSoC 是目前举办的最成功的开源学生培训项目,这里先介绍 GSoC 的形式,然后补充说明 JSoC 以及 OSPP。

GSoC 的整个环节分为以下几个大的阶段:

  • 1月-3月 [社区申请]:Julia 社区向 GSoC 组委会申请参与资格
  • 3月-5月 [学生申请]:学生接触 Julia 社区,联系导师,写项目计划,并提交项目申请
  • 5月-6月 [适应期]:项目申请通过的学生开始进一步接触社区,与导师更进一步地接触,了解社区的运作并且学习背景知识和对应的编程规范。
  • 6月-8月 [编程]: 大体上以 GitHub Pull Request (PR) 的形式提交代码,导师对 PR 进行评审 (review) 并提供相应的修改意见。如此反复多次来迭代并推进项目的进行。

JSoC:由于每年 GSoC 有效的申请人数都远超过 GSoC 组委会能够提供的名额 (slots)(例如 5:1),因此 Julia 社区提供了 JSoC 项目来作为 GSoC 的后备计划。换句话说,最出色的那些申请被选中作为 GSoC 项目进行,超出 GSoC 给定名额的申请中选出一些作为 JSoC 项目进行,并参考 GSoC 的时间线同步进行。学生不需要额外提交第二份申请。

OSPP:OSPP 的时间线相比 GSoC 延迟了一至两个月,在某种意义上 OSPP 可以看成 GSoC 的一个后备计划。因此学生如果申请 GSoC/JSoC 失败,可以在 OSPP 的规则下再进行一次项目申请。

关于这些项目的一些值得关注的地方:

  • 项目时间:从 2021 年开始,GSoC/JSoC 缩短为 10 周。OSPP 为三个月。
  • 工作流:一般是基于 Git 的远程开发。根据具体导师的不同,会采用不同通信与沟通方式。
  • 工作量和难度:取决于花多少精力在上面以及与导师的沟通效率,大体来说,这些项目的难度和工作量都会比一般实习要更大一些。
  • 职责:整个项目的工作主体是学生,换句话说,学生应该要能够独立完成整个项目。导师在其中的主要作用是进行代码审核以及补充一些相关的背景知识,大多数导师在项目过程中并不会亲自去写这些代码。
  • 含金量:大体上是 GSoC > JSoC = OSPP。GSoC 从 2005 年开始举办到现在已经受到了世界各地的开源组织和公司的认可,竞争 GSoC 席位本身就是一项非常好的锻炼,成功参与 GSoC 的学生在项目结束之后也可以以 GSoC 学生的身份得到一个 Google 工作的推荐机会。JSoC 基本上可以理解为 GSoC 项目的 Julia 版本,用于提供额外的参与名额。OSPP 因为从2020年才开始组织,所以在流程、受众、质量控制以及竞争性上都相对来说暂时不如 GSoC。
  • 项目奖金:GSoC 奖金根据地区的消费水平不同,从 2021 年开始,中国大学的学生下调为 1800 美金,美国大学的学生下调为 3000 美金。OSPP 根据难度不同,分别是税前:简单6000、中等 9000、和困难 12000 元。
  • 选题与申请过程
    • GSoC/JSoC 项目:学生提出具体的项目提案后在社区寻找愿意指导该项目的导师,完善项目申请书后提交到 GSoC 申请系统。Julia 社区组委会进行初步筛选讨论后向 GSoC 组委会申请期望的名额,GSoC 组委会给出实际的名额(一般少于期望的名额)后,再由 Julia 社区组委会进行第二轮筛选讨论并确定最终 GSoC 中选学生,同时从 GSoC 落选学生中选择一部分作为 JSoC 中选学生。
    • OSPP 项目:由导师在社区申请阶段直接将题目提交给组委会,然后学生在项目申请阶段从组委会审核通过的题目中进行选择,联系导师并提交申请。对于学生自己的提案,可以在社区申请阶段提前联系社区或导师,然后以导师的名义提交到组委会审核。
    • 一般来说相似的多个申请中只会有一项中选;一个提案只允许一位学生参与。

学生

哪些人可以作为学生参与:基本上只要是全日制高校的学生(本科、硕士、博士)并且在活动申请时没有毕业就可以参与。(例如活动申请在5月,大四毕业在7月,是可以参与的)。具体可以参考官方指南的说明。

关于项目具体的申请可以参考官方指南,另外也推荐阅读 GSoC 申请建议。决定一个项目申请能否被选中有两个核心点:1)是否有导师对这一项目感兴趣,以及 2)导师是否认为这个项目能够顺利完成。这里面最重要的一点是:找到愿意指导你项目的导师。有导师指导的项目可能不会中选,但是没有导师指导的项目几乎一定不会中选。

学生的能力是否优秀并不能决定项目最终是否成功,这还取决于一些其他的因素,例如:有效的沟通、足够的时间、相关的背景知识。从我个人的经验来看,大多数失败的申请都存在以下的一些误区或不足之处:

  • 没有与社区和导师进行沟通就直接提交申请。这种申请很容易被理解成是没有诚意的申请,因此有些导师会倾向于直接过滤掉这类申请。一些项目导师也会提前给申请者一些简单的练习来评估学生的基本情况。
  • 关于项目没有自己的理解。有一些项目是由社区导师给出的,一些学生在进行申请的时候会直接将导师写的项目 idea 直接复制过去,这种也会被理解成是没有诚意的申请。
  • 无法承诺足够的时间。如果学生同时安排了实习或者其他的事情,一般会被拒绝。对于大部分人来说,想要同时做好多件事情非常难。
  • 过于强调自己的学习成绩。学习成绩优秀是一件好事,但是这很难证明 “这个项目能够顺利完成“。相比于学习成绩,导师更希望看到的是你是否有相关领域的经验。
  • 缺少足够的编程经验。

因为项目导师很可能是你在整个项目过程中打交道最多的人,所以最好的建议是将你的导师当成是朋友(Julia 社区的群体相对来说也比较年轻:laughing:),各类情况都最好坦诚相待。与导师的交流越多,项目的进展就会越顺利。从社区和导师的角度来说,最希望的是将有限的资格给那些真正有热情去贡献代码和发展社区的学生。

这些开源学生培训计划最终的目的是将学生培养成社区里的独立开发者。很多学生(例如我自己)在活动之后融入社区,并逐渐成为了新的导师。如果仅仅只是抱着跟着导师学习知识的心态来被动地学习的话,那么这个项目就没有达到它的目的。根据我个人的经验,大部分学生在项目的申请和实现阶段最重要的一点是调整到一个正确的工作心态:

  • 学生是项目的主导者。如果一味地等待导师的反馈和指导来进行工作的话,这个项目基本就离失败不远了。一个好的工作状态是:在项目结束之后,作为学生,你应该是最了解整个项目细节的人,同时你会为你所做的工作感到自豪。
  • 导师并不是全知全能的:在项目的进行过程,我们鼓励你进行独立思考,并与你的导师就某些细节进行辨论。
  • 绝大部分项目导师与你一样也是在利用业余时间维护代码,一部分项目导师的事情非常多,所以并不能够像淘宝客服一样有问必答或者秒答。在与导师沟通的过程中,请保持足够的耐心。
  • 一些导师并不会主动询问项目具体的进度,因此在项目遇到困难或者需要帮助的时候,学生应该主动去寻求导师或者社区的帮助。
  • 导师作为社区中的一员是你融入整个社区的桥梁,你应该逐渐与社区中更多地人进行交流。如果项目至始至终仅仅只是与导师沟通的话,那么你会错过很多社区中其他人的指导和建议。

请务必尽早开始工作:

  • 大部分学生对于他们项目进度的估计都过于乐观:很多人在项目验收时只能完成申请书上的 1/3 或 1/2 的内容。
  • 从提交 PR 到代码被通过并合并到代码库中会经过很多轮的代码审核,这个时间大概率会比完成实际功能所需要的时间还要长。
  • 项目快截止了才提交的 PR 几乎不可能会收到高质量的代码审核与反馈。

关于寻求帮助,需要记住的最重要的一点是:开源社区里大部分人是在业余时间基于兴趣进行工作的。因此无论是需要导师或者社区其他人帮忙解答问题或者进行代码审核时,都请谨记:节省其他人的时间就是在帮助你自己。例如,一个描述清楚的问题或者书写规范的 PR,可以在很大程度上节省他人的阅读和思考的时间,反过来对方才能有更充分的时间来回答你的问题或者审核你的代码并给出建议。关于一些其他的参考材料,可以阅读 避免 X-Y 问题 以及 提问的智慧

导师

相信当你成为导师的时候,你已经非常熟悉这个社区的运行情况了,因此这里仅仅只是简要的介绍一下导师在带学生的过程中大概需要注意的一些事情:

  • 强烈建议导师要求每个学生每周都定期更新项目进度和计划表,并将其作为中期报告和结项报告的一部分,避免到最后截止日期前才开始撰写。如果有项目博客的话,建议直接更新在那里,方便社区里的其他成员了解项目进度和对报告提出更改意见。
  • 评估自己能投入的时间(很重要!)对于能力较好的学生,需要投入的时间其实不用太多,反而是一些有贡献潜力,但能力仍然一般的,需要花很多时间在上面,如果提前预估自己的时间不够充分的话,建议您可放弃学生和该项目,也好过最后没有充足的时间做指导,导致项目失败。
  • 可以定期组织学生做结对编程,这有利于学生从导师身上学习一些编程以外的东西,如环境配置,代码调试,查找资料等
  • 如果学生从来没有接触过Julia的话,风险极大,强烈建议提前考核下编程能力
  • 社区不鼓励导师要求学生在选人阶段就通过往项目里贡献代码的方式进行选拔,但仍然建议导师通过一些其它的方式对学生的基本能力做考察

OSPP项目:

  • 项目审核分为两次,每次审核均需要学生提供一个报告以及上传相应的代码到 OSPP 的 gitlab 仓库。
  • 目前跟OSPP组织方的沟通主要是在微信群里,但是一些海外的导师可能没有微信,建议各个导师在slack等其它渠道也能同步下信息

参考材料


11 个赞

:+1: :+1: :+1: :+1: :+1: :+1: :+1: :+1:

关于OSPP 2023的Proposal可以通过PR更新在上面的链接里

目前还可以再提交两个项目,DDL 是下周三,有想法的同学欢迎前往上面的链接发 PR 呀~

1 个赞

文档翻译的项目算吗,比如生成中英文档,再人工校对润色。

我不太确定这块的工作量,如果有人愿意mentor的话,可能需要列一下具体的事项,然后一起评估一下

去年和他们组委会聊的时候他们的态度应该是不太愿意支持这类非技术性工作的

草拟的一个 Project Idea

加上 GPT 可以跟技术粘点边,但大部分工作还是非技术性的。。。