Google 编程之夏和 Chrome 扩展程序

我来自中国大二,热衷于 Web 开发。第一年,我加入了我们大学的一个技术俱乐部。这个俱乐部是我认识编码和开源的好帮手。在俱乐部,我遇到了一群喜欢编程的志同道合的伙伴。正是在他们那里,我才在 2023 年初了解到 Google 编程之夏。这个由 Google 组织的全球计划将学生与开源组织联系起来,并指导他们通过参与开源活动来充分利用他们的暑期。

我试一试,然后提交了申请。幸运的是,我们已通过审核。我为 Chrome 扩展程序示例代码库贡献力量的那个夏天是难忘而珍贵的。当然,我还学到了很多东西:有效的沟通、编码技能和规划能力等等。

随着 2023 年 GSoC 大会接近尾声,我不妨分享一下我在 GSoC 方面的一些经验。本博文将通过我本人参与,简要介绍 GSoC 的一般流程,希望能对您有所帮助!

我如何为 GSoC 做贡献

我申请了 Chromium GSoC 2023 项目,我的主要任务是升级现有的 Chrome 扩展程序示例,使其适用于 Manifest V3,包括一些相关的脚本和文档。

最初

我在 2023 年 2 月首次了解 GSoC,但还不确定是否想要申请。那时我有几个顾虑:

  • 我比较内向,英语不是我的母语,所以和导师交流可能比较有挑战性。
  • GSoC 社区来自世界各地,处理时区差异可能比较困难。
  • GSoC 是一个著名的计划,它具有竞争力,让我的机会看起来很小。

不过,我可以确信,这些都不是问题。

在讲述我的故事之前,我想谈谈我在 2022 年初发生的一件事。此事件也是我参加 GSoC 活动的机会。我想将一个基于 Manifest V2 的浏览器扩展程序迁移到 Manifest V3。为了完成迁移,我必须参考相关文档并了解 API 的每项变更。我还必须搜索是否有相关样本以供参考。对我来说,理解新的 API 和转移代码是一项极具挑战性的任务。

正因如此,我在浏览 GSoC 项目列表并了解与 MV3 相关的创意时,感到非常兴奋。我很想为改进 Manifest V3 扩展程序示例做贡献,为未来的开发者提供便利。

三月份,我向负责导师的一位导师 Oliver 发送了一封简短的电子邮件,内容是关于我的目标:

参与 GSoC 项目的申请

尊敬的广告客户:

我是来自中国的计算机科学本科生。我在 GSoC 了解到与 Chrome 扩展程序示例相关的项目,并且想改进 Manifest V3 示例。我之前在 API 示例方面并没有太多经验,但我拥有 Web 开发和 MV3 扩展程序开发 (https://github.com/daidr/paimon-WorkManagert) 方面的经验,这让我认识到了 MV3 API 示例的重要性,因此我既想学习,也希望为它做贡献。我还能申请这个项目吗?

谢谢。

不久之后,我收到了 Oliver 和 Ali(Oliver 的老板)的回复。他们解答了我的问题,并详细说明了 GSoC 的具体规则和时间表。他们还与我分享了许多有价值的参考资料。

这就像是击中了一杆子,更坚定了我向前走的决心。如果您有兴趣参加即将举行的开源活动(无论是 GSoC 2024 还是其他活动),那么迈出第一步至关重要;因此,请尽管犹豫,勇敢尝试。

在申请之前,我查看了项目的代码并浏览了相关文档。尽管 GSoC 为参与者提供了近一个月的社区凝聚期,让他们熟悉社区,但事先了解有助于减轻压力,让我能够撰写更具针对性的提案。

我尝试过解决项目提供的起始 bug。这些问题相对简单,我能快速了解项目内容。我很感激我的导师 Oliver(尽管那时他不是我的导师)。只要我需要进一步澄清,他就会及时回复我的电子邮件,并耐心地解决我的问题。如果在撰写提案时遇到问题,您还可以将提案发送给导师,看看是否有任何需要改进。

获得接受

撰写提案是申请之前的最后一项操作。除了申请表单之外,申请书还应包括创意、目标和日程。根据您希望处理的项目,我们可能会为您提供其他提案模板。网上提供了很多现成的提案示例供您参考。

完成草稿后,我将其发送给导师以征求反馈。申请提交后,需要等待很长时间。五月初的时候,我收到了一个通知,已经录取了。

代码工作

在最初的联结阶段,我先处理了剩余的入门 bug,并查看是否有任何需要学习的新技能。剩下的时间都在阅读相关文档

与导师讨论后,我们调整了一些目标,以便更合理地分配至任务上的时间。我们还讨论了创建新的 developer.chrome.com 页面的方法,以列出所有 API 示例并提供基本过滤器,以帮助开发者快速找到所需的示例。对我来说,这是一个相当复杂的任务,在确定项目并编写产品要求文档 (PRD) 时,我的导师和我花了很多时间。

对于这项更大的任务,我们决定需要在示例代码库中的自动脚本遍历代码库,并生成一个包含扩展程序示例列表及其使用的 API 的 JSON 文件。developer.chrome.com 文档库现在使用此文件构建网页。

我首先考虑使用 Babel 来分析示例代码的抽象语法树,并确定它使用的 API。在与导师分享这个想法后,我发现他们以前做过类似项目,证实了这种方法的可行性。完成代码后,我的导师和他团队的其他成员提供了宝贵的建议,包括关注代码分割、实现代码样式标准化以及正确记录函数。

经过数次大大小小的审核,代码已成功合并。您可以在 GitHub 上找到整个会话,或查看实际页面

总结

GSoC 为我带来了什么?首先,我当然希望了解与浏览器扩展 API 相关的知识。通过阅读文档并编写新示例,我对各种浏览器扩展程序 API 有了更深入的了解。

此外,我还掌握了很多在被接受加入 GSoC 之前几乎接触过的技能,例如执行全面的代码审核流程和创建 PRD。我还开始使用 GitHub 操作自动执行工作流,并学习了如何使用 Babel 遍历所有扩展程序示例并跟踪所使用的 API。此外,我还第一次使用 Nunjucks 模板引擎。这些能力对于编程至关重要,我很高兴我学到了它们。加入开源社区让我感到快乐。

这个夏天给了我许多珍贵的回忆。编码让我很有成就感。我遇到过一些患者导师,他们指导我学习有趣的知识,让我的体验更加丰富。

计算机科学领域拥有无穷无尽的知识。在将自己与其他人进行比较时,我意识到自己对开源的了解只是冰山一角。但是,每一点都有所帮助。我相信 GSoC 是参与开源计划的一个良好起点。

我也希望我的经验能为将来参与开源活动提供一些参考。

对于任何想要参加 Google 编程之夏的人,我在下面给出了一些建议:

  1. 选择一个适合您的参考提示:在我看来,在寻找参考提示时,您的首要任务是兴趣,其次是技能。这种策略有助于您在整个贡献过程中保持热情。
  2. 质量而非数量:您可以提交多个提案,以提高被 GSoC 接受的几率。但是,我相信人体的能量有限,质量可能更重要。关注两三个想法在最后可能会更有帮助。
  3. 不要害怕新事物:大胆尝试您在项目中未使用过的技术。您还有将近一个月的社区凝聚力,以熟悉不熟悉的技术,并利用整个夏天来实施这些技术。继续努力吧!
  4. 提前熟悉项目:例如,通读开发文档、查看之前的提交历史记录和问题,以及浏览过去的拉取请求。提前对项目有整体的了解有助于您撰写更全面的提案。
  5. 保持沟通:定期与您的导师沟通,无论是在申请之前还是被接受之后,在遇到问题时都不要犹豫地提出问题。大多数导师都乐意帮您解决问题;通过这种方式,他们也可以跟踪您的进度。

感谢您的阅读。