Google 编程之夏和 Chrome 扩展程序

我是一名来自中国的大二学生,热衷于 Web 开发。在第一学年,我加入了学院的技术俱乐部。该俱乐部让我接触到了编程和开源。在该俱乐部中,我结识了一群志同道合、热爱编程的合作伙伴。正是他们让我在 2023 年年初了解到了 Google 暑期编程活动。这项由 Google 组织的全球性计划旨在将学生与开源组织联系起来,引导他们通过参与开源活动充分利用暑假时间。

我尝试了一下,然后提交了申请。幸运的是,我被录取了。在为 Chrome 扩展程序示例代码库做出贡献的那个夏天,我收获了许多难忘而珍贵的回忆。当然,我也学到了很多:有效沟通、编码技能和规划能力等等。

2023 年 Google 全球服务学习计划即将结束,我很荣幸能分享自己在该计划中的一些经历。本文将通过我自己的参与经历,简要介绍 GSoC 的一般流程,希望对您有所帮助!

我如何参与 Google 开放式项目 (GSoC) 的故事

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

从一开始

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

  • 我性格内向,英语不是我的母语,因此与导师沟通可能有困难。
  • GSoC 社区来自世界各地,因此处理时区差异可能很困难。
  • GSoC 是一项非常知名的计划,竞争激烈,因此我似乎没有什么机会。

不过,我可以肯定地说,这些都不是问题。

在讲述我的故事之前,我想先说说 2022 年年初发生在我身上的事。这次事件也让我有机会参与了 GSoC。我想要将基于 Manifest V2 的浏览器扩展程序迁移到 Manifest V3。为了完成迁移,我必须参阅文档并了解每项 API 更改。我还不得不搜索是否有相关示例可供参考。理解新 API 并转移代码对我来说非常具有挑战性。

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

3 月份,我向负责指导的导师之一 Oliver 发送了一封简短的电子邮件,说明了我的意向:

申请参与 GSoC 项目

尊敬的用户:

我是一名来自中国的计算机科学本科生。我在 GSoC 上了解了 Chrome 扩展程序示例相关项目,并有兴趣改进清单 V3 示例。我之前没有太多 API 示例方面的经验,但我有 Web 开发和 MV3 扩展程序开发经验 (https://github.com/daidr/paimon-webext),这让我认识到 MV3 API 示例的重要性,因此我想学习和贡献 MV3 API 示例。我还可以申请此项目吗?

谢谢。

不久之后,我收到了 Oliver 和 Ali(Oliver 的上司)的回复。他们解答了我的问题,并详细介绍了 GSoC 的具体规则和时间安排。他们还向我分享了许多有价值的参考资料。

这就像打了一针强心剂,坚定了我继续前进的决心。如果您有兴趣参加即将举办的开源活动(无论是 2024 年 Google 全球开放源代码大会还是其他活动),请务必迈出第一步;不要犹豫,勇敢尝试。

在申请之前,我查看了项目的代码并浏览了文档。虽然 GSoC 提供了近一个月的社区互动期,让参与者可以熟悉社区,但提前掌握相关知识有助于减轻压力,让我能够撰写更有针对性的提案。

我尝试解决了项目提供的入门级 bug。这些问题相对简单,有助于我快速了解项目。我非常感谢我的导师 Oliver(虽然当时他还不是我的导师)。每当我需要澄清问题时,他都会立即回复我的电子邮件,并耐心地解决我的问题。如果您在撰写提案时遇到问题,还可以将其发送给您的导师,看看是否有任何方面需要改进。

获得批准

在申请之前,您需要完成最后一项工作:撰写提案。除了申请表单之外,提案还应包含想法、目标和时间表。根据您希望参与的项目,我们可能会为您提供其他提案模板。您可以在网上找到许多现成的提案示例,以供参考。

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

代码工作

在初始磨合期,我先处理了剩余的起始 bug,并检查是否有任何新技能需要学习。其余时间则用来阅读文档。

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

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

我最初考虑使用 Babel 来分析示例代码的抽象语法树,并确定其使用的 API。与导师分享这个想法后,我发现他们之前曾做过类似的工作,这证实了此方法的可行性。在完成代码后,我的导师和他团队的其他成员提供了宝贵的建议,包括注意代码分段、标准化代码风格和正确记录函数。

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

总结

如果您问我 GSoC 带给我了什么,首先,当然是了解了与浏览器扩展程序 API 相关的知识。通过阅读文档和编写新示例,我详细了解了各种浏览器扩展程序 API。

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

这个夏天给我留下了许多难忘的回忆。编码让我非常满足。我遇到了耐心的导师,他们引导我并教给我有趣的知识,丰富了我的经验。

计算机科学领域的知识是无穷无尽的。与其他人相比,我发现自己对开源的了解只是冰山一角。不过,每一点补充都有莫大的帮助。我认为,GSoC 是参与开源项目的绝佳起点。

我还希望我的经验能为日后参与开源活动提供一些参考。

以下是我对想要参与 Google 夏季编程活动的所有人的建议:

  1. 选择适合您的想法:在我看来,在寻找想法时,兴趣应是首要考虑因素,其次是技能。通过这种策略,您可以在整个贡献过程中保持热情。
  2. 质量胜过数量:您可以提交多个提案,以提高被接受加入 GSoC 的几率。不过,我认为质量可能更重要,因为人的精力是有限的。最后,专注于两个或三个想法可能更有帮助。
  3. 不要害怕新事物:不要犹豫,尝试在项目中使用您之前没有使用过的技术。您将有近一个月的时间与社区互动,熟悉陌生的技术,并在整个夏天内实现这些技术。加油!
  4. 提前熟悉项目:例如,阅读开发文档、查看之前的提交记录和问题,以及浏览过往的拉取请求。提前全面了解项目有助于您撰写更全面的提案。
  5. 保持沟通:定期与您的导师沟通,无论是在申请之前还是被录取之后,遇到问题时,请不要犹豫地提出问题。大多数导师都愿意帮助您解决问题;这样,他们也可以跟踪您的进度。

感谢您阅读本邮件。