每年,谷歌都会组织一个名为 Google Summer of Code (GSoC) 的项目。世界各地的学生可以在开源指导组织下编写开源代码并获得报酬!你可以从事酷炫的开源项目,与才华横溢的工程师交流,并在暑假期间获得报酬。这有多酷啊!?
在这篇博文中,我们将引导您了解我们的 GSoC 经验,并为您提供技巧和窍门,以便您也能像我们一样拥有美妙的体验。我们还将根据我们不同的兴趣和挑战分享我们不同的观点。
关于我们
Rahul:我叫 Rahul Anand,在撰写本文时,我是印度帕蒂亚拉塔帕尔大学计算机工程专业的大四学生。我感兴趣的领域是分布式计算,因为它是实现全球应用程序可扩展性的重要领域之一。计算机视觉只是锦上添花,因为人工智能将统治世界。
Lahiru:我是 Lahiru Udayanga,目前是斯里兰卡莫拉图瓦大学计算机科学与工程系的应届本科毕业生。我在计算机科学领域的主要关注领域是分布式系统、API 网关、代理和云原生技术。
选择合适的组织和项目
您在此过程中做出的第一个也是最重要的决定是选择最合适的组织和您想要贡献的项目。这个决定将极大地影响您的体验,因此请在此处非常认真。别担心——在本节末尾,我们列出了您在此阶段应考虑的因素。
我们都决定申请同一个项目:3scale-envoy 代理授权缓存。但是,我们在选择这个项目时各有略有不同的思考过程。
Rahul:我与一位参加了 JBoss 保护伞下 GSoC'20 的前辈讨论了这些选项,他形容他的经历非常丰富。这就是我决定我想参与哪个组织的方式。我建议低年级学生专注于一个好的组织,并开始探索其中的不同项目。关于项目选择,多种因素影响了我。最重要的是我与我的导师 Alejandro Martinez Ruiz 的第一次互动。我问了他很多问题,他总是准备好详细回复所有问题。(提示:提问时要简洁明了,尊重导师的时间。)我还想从事分布式系统方面的工作,学习 Rust,并从头开始构建一个项目。
Lahiru:我申请这个项目的主要原因是我对中间件、API 网关和代理的浓厚兴趣。此外,我在实习项目中有一些 envoy 代理的经验。我相信 envoy 代理将彻底改变代理领域,并且 envoy 代理相关技术将有很多机会。像 Rahul 一样,我与 Alex 的第一次互动以及我们在提案提交阶段之前的对话也对我的申请决定产生了重大影响。
此期间的提示
- 如果您发现任何技术很酷或想了解更多信息,请查找这些项目。
- 向高年级学生询问他们在不同组织中的经验。
- 考虑这个项目的未来:您认为这个研究领域有未来吗?
- 如果您与潜在导师建立了良好的初步联系,请继续建立融洽关系。
制定提案
在决定我们要从事哪个项目后,我们戴上研究帽,开始挖掘与问题和可能的解决方案相关的任何信息。在此阶段,我们不断与我们的导师互动,讨论我们正在考虑独立进行的任何问题、资源和解决方案设计。最好尽可能接近实际结果,并将所有内容记录在单独的文档中以供参考,因为这将对您的提案创建阶段有极大的帮助。
在研究大约一到两个月后,当我们接近提案提交开放时,我们的导师要求我们开始将所有内容放入单独的 Google 文档中,以便作为提案提交给委员会。是时候与莎士比亚交朋友,并将辛勤工作输入到一份将改变我们生活的文档中了!
玩笑归玩笑,重要的是要使这份文档看起来美观,并附有精美的图表。我们使用并推荐 draw.io(现在是 diagrams.net),这是一款开源图表软件。请记住,没有人可以第一次就写出完美的文档,并与您的导师进行几次审查周期以获得他们的反馈。您可以查看我们的提案作为示例。
我们记得我们在 GSoC 仪表板上单击提交按钮的那一天——印度次大陆天空下着火雨。现在我们的命运掌握在 JBoss 组织和 Red Hat 的 3scale 团队手中,我们一直等到那个命运攸关的日子,那天我们的父母凌晨 2 点醒来,看到新晋成年人尖叫着“GSOC 宝贝!!”
在实践中学习
第二天,我们收到了我们的第一封电子邮件,其中包含入职信息、彼此的提案以供参考,以及与 Alex 和我们之间的通话邀请。在第一次通话中,我们相互了解了彼此、各自的文化和 3scale 团队,我们的任务是创建一个包含实际时间表的共享文档。由于这个项目与其他 GSoC 项目相比规模庞大,并且我们发现未来存在冲突的义务,因此我们决定在编码期开始之前开始工作。我们能够在官方开始之前最终确定一个设计,其中包含展示我们的用例所需的某些保证的概念验证 (POC),并初始化一个 GitHub 存储库。
为了更快地取得进展,我们分开了我们的关注点。Rahul 负责 Cache-Filter,Lahiru 负责 Singleton-Service,并在在线会议期间最终确定了标准接口。为了确保我们在同一步调上,并尽早发现阻碍因素,Alex 安排了两次会议:每周同步会议,讨论进度、阻碍因素、可能的设计变更和 POC,以及每两周一次的同步会议,仅用于讨论工作以外的任何事情。他还要求我们每周在单独的 Google 文档中创建报告,与其他社区成员共享。我们使用这些报告来提供更新并接收建议或任何提醒。我们俩都在这个阶段的不同地方挣扎。
Rahul:一开始,我在遵循标准工作流程和使用工具(包括 Git!)方面有点挣扎,因为我想快速行动。事后看来,这帮助我们避免了未来的痛苦,所以我很高兴我早早地学会了它们。我从 Alex 那里得到的最好的建议是,这是我们的项目,在收到他的反馈后,我们可以自由地做出最终决定。这给了我一种主人翁意识,我开始更多地进行实验,创建更多的 POC,并弯曲规范以适应我们。这种态度的改变使我能够实现诸如可见日志和独特的标注之类的功能,这些功能使集成测试更容易并提高了性能。
Lahiru:对我来说,一开始最令人恼火的事情是 Rust 编程语言陡峭的学习曲线。当我开始用 Rust 编程时,我大部分时间都在对编译器大喊大叫,而不是编写代码。但几周后,我们慢慢成为了朋友。(我认为 Rust 编译器更像是一个过度保护的保姆。它对成为你的朋友不感兴趣,但它会尽一切努力阻止你伤害自己。)此外,初学者、中级和专家编写的 Rust 代码之间存在巨大差异。这些差异存在于其他编程语言中,如 Java、Golang 和 C++,但程度不同。因此,我面临的挑战之一不仅是实现一些有效的东西,而且是以最地道的 Rust 方式实现有效的东西。
我们学到了什么
如果您想要一份我们学到的东西清单,如果您参加 Summer of Code,您也可以学到这些东西,那么这里是
- 协作:如何与开源社区互动,如何向刚接触您的工作的人员提供背景信息
- 软件开发的最佳实践:如何构建 PR 和提交,如何设置和编写集成或单元测试
- 新技术:Rust、Golang、Proxy-WASM、Envoy 等。
- 软技能:如何与高级工程师互动,如何自我介绍
- 分布式计算理论的实际应用和一般的问题解决能力
Google Summer of Code 2021 对我们俩来说都是一次丰富的经历。我们有机会与伟大的工程师互动,例如 Piotr Sikora(有人说 CPP 是一种来自地狱的语言,但他将其变成了优美的散文)、Takeshi Yoneda(在我们最需要的时候的救星)、David Ortiz(神话、传奇、Limitador 的共同创造者)和(显然)Alex Martinez,以及整个 3scale 团队。没有这些人,我们认为我们不可能进入最后阶段并被列入 GSoC 网站。
评论已关闭。