我是一名来自中国的二年级学生,对网页开发充满热情。在我大一时,我加入了我们学院的一个技术俱乐部。这个俱乐部是我接触编码和开源的起点。在俱乐部里,我遇到了一群志同道合的伙伴,他们热爱编码。正是从他们那里,我在 2023 年初了解到谷歌夏季代码(Google Summer of Code)。这个由谷歌组织的全球项目将学生与开源组织连接起来,并指导他们通过参与开源活动来充分利用他们的暑假。
我决定试一试,提交了申请。幸运的是,我被录取了。我在为 Chrome 扩展示例库贡献的那个夏天是难忘而珍贵的。当然,我也学到了很多:有效的沟通、编码技能和规划能力等等。
随着 GSoC 2023 的结束,我觉得有必要分享一些我在 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 扩展示例做出贡献,为未来的开发者提供便利。
在 3 月,我给负责的导师 Oliver 发了一封简短的电子邮件,表达了我的意图:
参与 GSoC 项目的申请
嗨,
我是一名来自中国的计算机科学本科生。我了解到与 GSoC 相关的 Chrome 扩展示例项目,并对改善 Manifest V3 示例感兴趣。我在 API 示例方面没有太多经验,但我在网页开发和 MV3 扩展开发方面有经验(https://github.com/daidr/paimon-webext),这让我意识到 MV3 API 示例的重要性,因此我希望能够学习并为此做出贡献。我还可以申请这个项目吗?
谢谢。
不久之后,我收到了 Oliver 和 Ali(Oliver 的老板)的回复。他们回答了我的问题,并提供了关于 GSoC 具体规则和时间表的详细信息。他们还与我分享了许多有价值的参考材料。
这就像一针强心剂,增强了我前进的决心。如果你有兴趣参与即将到来的开源活动,无论是 GSoC 2024 还是其他任何活动,迈出第一步是至关重要的;不要犹豫,勇敢尝试。
在申请之前,我查看了项目的代码并浏览了文档。尽管 GSoC 为参与者提供了近一个月的社区联谊期,以便他们熟悉社区,但事先的知识减轻了压力,使我能够写出更有针对性的提案。
我尝试解决项目提供的入门 bug。这些问题相对简单,帮助我快速理解项目。我很感激我的导师 Oliver(尽管那时他还不是我的导师)。每当我需要澄清时,他都会及时回复我的电子邮件,并耐心地解决我的问题。在撰写提案时遇到问题时,你也可以将其发送给你的导师,看看是否有需要改进的地方。
被接受#
撰写提案是申请前的最后一步。提案除了申请表外,还应包括想法、目标和时间表。根据你希望参与的项目,可能会提供额外的提案模板。网上有许多现成的提案示例可供参考。
完成草稿后,我将其发送给我的导师以获取反馈。一旦申请提交,就会有漫长的等待。在 5 月初,我收到了被接受的通知。
代码工作#
在初始的联谊期,我首先处理剩余的入门 bug,并检查是否有我需要学习的新技能。其余时间我都在阅读文档。
与我的导师讨论后,我们调整了一些目标,使分配给任务的时间更合理。我们还讨论了创建一个新的 developer.chrome.com 页面的想法,列出所有 API 示例并提供基本过滤器,以帮助开发者快速找到所需的示例。这对我来说是一个相当复杂的任务,我和我的导师花了相当多的时间来定义项目并撰写产品需求文档(PRD)。
对于这个更大的任务,我们决定需要在示例库中编写一个自动化脚本,以遍历库并生成一个包含扩展示例及其使用的 API 列表的 JSON 文件。developer.chrome.com 文档库现在使用这个文件来构建页面。
我首先考虑使用 Babel 来分析示例代码的抽象语法树并识别它使用的 API。在与我的导师分享这个想法后,我发现他们之前曾在类似的项目上工作过,确认了这种方法的可行性。在我完成代码后,我的导师和他团队的其他成员提供了宝贵的建议,包括关注代码分段、标准化代码风格和正确记录函数。
经过几次大大小小的审查,代码成功合并。你可以在GitHub上找到整个讨论,或者查看实时页面。
总结#
如果你问我 GSoC 带给我的是什么:首先,当然是对浏览器扩展 API 相关知识的理解。通过阅读文档和编写新示例,我对各种浏览器扩展 API 有了详细的了解。
此外,我还获得了许多在被接受 GSoC 之前几乎没有接触过的技能,比如遵循全面的代码审查流程和创建 PRD。我还开始使用 GitHub Actions 来自动化工作流程,并学习如何使用 Babel 遍历所有扩展示例并跟踪使用的 API。此外,我还第一次体验了 Nunjucks 模板引擎。这些能力对编程至关重要,我很高兴我学会了它们。参与开源社区让我感到快乐。
这个夏天给了我许多难以磨灭的回忆。编码让我感到非常满足。我遇到了耐心的导师,他们指导我并教会我有趣的知识,丰富了我的经历。
计算机科学领域的知识是无穷无尽的。当我与他人比较时,我意识到我对开源的理解只是冰山一角。然而,每一点进步都是有帮助的。我相信 GSoC 是参与开源的一个很好的起点。
我也希望我的经历能为未来参与开源活动提供一些参考。
以下是我对任何想要参与谷歌夏季代码的人的一些建议:
- 选择适合你的想法:在我看来,在寻找想法时,兴趣应该是你的首要考虑,其次是技能。这种策略将使你在贡献过程中保持热情。
- 质量胜于数量:你可以提交许多提案以增加被 GSoC 接受的机会。然而,我认为质量可能更为重要,因为人力精力是有限的。最终专注于两个或三个想法可能更有帮助。
- 不要害怕新事物:不要犹豫去尝试你在项目中没有接触过的技术。你有近一个月的社区联谊期来熟悉不熟悉的技术,还有整个夏天来实施它们。尽管去做吧!
- 提前熟悉项目:例如,阅读开发文档,查看以前的提交历史和问题,浏览过去的拉取请求。提前对项目有一个整体的了解将帮助你写出更全面的提案。
- 保持沟通:定期与导师沟通,遇到问题时不要犹豫提问,无论是在申请之前还是被接受之后。大多数导师都愿意帮助你解决问题;这样,他们也可以跟踪你的进展。
感谢你的阅读。