16 分钟阅读

作者: 作者图标Reshama Shaikh

贡献者:Gaël Varoquaux, Andreas Mueller, Olivier Grisel, Julien Jerphanion, Guillaume LeMaitre

要点总结

冲刺是**为开源库做出贡献的工作会议**。开发人员冲刺和社区冲刺的目标和成就各不相同。开源冲刺的长期影响,特别是社区活动,不容易量化或衡量。冲刺的积极成果正在慢慢显现,因此,要认识到开源冲刺的价值,需要打“持久战”。

介绍

scikit-learn 项目拥有悠久而非凡的开源冲刺历史。自 2010 年其第一个公开版本发布以来,已经组织了45 次冲刺。45 这个数字是一个下限,因为可能还有更多没有列出的冲刺。

迄今为止,已有 2400 多人贡献了scikit-learn。scikit-learn 的贡献者数量超过了其他相关库,如 numpy、scipy 和 matplotlib,除了pandas,它拥有更多贡献者(见附录 A)。

关于开源的公开讨论已经扩展到探索可持续性、资助模式以及多样性和包容性等主题。一个**合理**但**难以回答**的问题是

冲刺模式的有效性如何?这些冲刺带来的长期参与度如何?

由于 GitHub 的技术限制和隐私问题,我们没有关于有多少 scikit-learn 贡献者通过冲刺与项目建立联系的精确数据。我们没有正式的数据收集流程来记录关于有多少冲刺参与者是重复参与者或关于他们对其他开源项目的贡献或其他长期积极的连锁反应的信息。科学地研究冲刺数量与贡献者数量之间的相关性超出了本文的范围。我们将在本文中**考察**的是运行 scikit-learn 冲刺的**目标、结果和愿望**。

其他开源项目关于冲刺以及多样性和包容性的指导请求正在增加。 我们与社区、潜在资助者和开源项目维护者分享这些经验和教训,特别是那些在构建社区、可持续性和多样性与包容性方面处于起步阶段的项目。

提纲

在本文中,我们将考察以下内容

  • 什么是“冲刺”?
  • “开发人员”冲刺和“社区”冲刺有什么区别?
  • 开源冲刺的目标是什么?
  • 开源冲刺为项目和社区带来了什么价值?
  • scikit-learn 项目在与社区建立联系方面的愿望是什么?

scikit-learn 冲刺的定义

scikit-learn 冲刺传统上是贡献者齐聚一堂,共同解决 scikit-learn 存储库中问题的活动。冲刺可以短至几个小时,也可以持续几天,甚至一周或更长时间。它们可以是面对面的、在线的、混合的或部分异步的。冲刺可以由库的开发人员、社区团体(如 Meetup)、与科学或 Python 会议一起安排,甚至可以在家里与几个朋友一起进行。它们可以更简单、更不令人望而生畏地描述为 为开源库做出贡献的工作会议。

开发人员冲刺与社区冲刺

我们区分开发人员(Dev)冲刺和社区冲刺,因为两者之间的目标和结果存在很大差异。

开发人员(Dev)冲刺

开发人员冲刺通常由库的维护者组织。开发人员冲刺是库的开发人员或维护者齐聚一堂,共同解决问题并讨论正在进行的复杂问题的解决方案。这也为团队提供了一个机会,可以专注于与项目长期路线图相关的任务。

早期的开发人员冲刺是在 Inria 组织的。第一个主要的开发人员冲刺是在 NIPS 2011 会议(现已更名为 NeurIPS)之后在格拉纳达举行的。这是大多数团队在经过数月或数年的在线协作后首次在现实生活中见面,有十多位开发人员参加。后来,开发人员冲刺通常在合作伙伴科技公司的办公室举行,通常为期 3 到 7 天,每年一次,在 COVID 之前。

社区冲刺

社区冲刺可以是个人、兴趣社区(如 Meetup 小组(Data Umbrella、PyLadies 等)、会议(SciPy、PyCon、PyData Global、JupyterCon 等)之间的合作。社区冲刺是面向公众的,参与者可以是初学者、专家或两者兼而有之。

对于 scikit-learn 来说,早期的社区冲刺是在SciPy 会议期间进行的,这种做法已经持续了十多年。

在开发人员冲刺中,贡献者可能会处理一个已经进行三个月的 PR。相反,社区冲刺需要精心策划的问题,新来者可以在更短的时间内完成(例如,1 天,或 1 天加 1-2 个月的后续工作)。

其他科学 Python 库的开发人员冲刺和社区冲刺的现状尚不清楚。

冲刺的目标

开发人员冲刺的目标

  • 让维护者在一个房间里高效地讨论开放问题和拉取请求
  • 以同步的方式推进贡献
  • 以同步的方式促进与外部开发人员的现有合作
  • 建立融洽关系:维护者居住在不同的洲,面对面的冲刺可以建立团队内部的融洽关系。社交互动对于拥有高效的团队至关重要。
  • 促进与项目企业赞助商(scikit-learn 联盟成员)的合作

社区和初学者冲刺的目标

  • 扩大项目的贡献者基础
  • 建立社区,将项目维护者与用户联系起来
  • 从新的 scikit-learn 用户和贡献者那里获得互动反馈
  • 招募新的贡献者加入 scikit-learn 和 PyData 社区
  • 招募新的贡献者,并使其成为经常性贡献者
  • 与社区团体合作,通过有意的外展活动,增加贡献者群体的多样性
  • 加强和支持现有贡献者,以维持经常性社区贡献者

通过冲刺加入项目的 scikit-learn 团队成员

值得注意的是,许多当前的库维护者都是通过冲刺加入项目的。此外,贡献者体验团队的一些成员也是通过冲刺加入 scikit-learn 项目的。

Olivier Grisel

Olivier Grisel 已经是一位贡献者和维护者超过 12 年了。Olivier 在法国说英语的 Python 用户组 AFPy.org 在巴黎组织的一次当地会议上遇到了 Gaël Varoquaux。在聊了 5 分钟关于 Python 中的玩具机器学习实验后,Gaël 邀请 Olivier 加入 2010 年 3 月在 Inria 组织的第一次冲刺

Olivier 分享道

当时,scikit-learn 编码冲刺只聚集了 6 个人,他们围坐在一张桌子旁,旁边有一些无线网络和一台咖啡机 :)

5 men sitting around a table coding on their computers
第一次 scikit-learn 冲刺,巴黎,2010 年 3 月;照片来源:Fabian Pedregosa;(从左到右):Fabian Pedregosa、Gael Varoquaux、Olivier Grisel、Alexandre Gramfort

Andreas Mueller

Andreas Mueller 自 2011 年以来一直是该项目的维护者。他参加了会议上的冲刺,因为他是一名用户,并且希望做出贡献。他在 2017 年的一次采访中分享道

在我攻读计算机视觉和学习的博士学位期间,scikit-learn 库成为了我的工具箱中不可或缺的一部分。我最初的开源参与始于 2011 年在西班牙格拉纳达举行的 NeurIPS 会议上,在那里我参加了 scikit-learn 冲刺。当时的 scikit-learn 发布经理不得不离开,项目负责人要求我成为发布经理;就这样开始了。

men at a happy hour
NeurIPS 格拉纳达,西班牙 scikit-learn 冲刺,2011 年 3 月;照片来源:Gael Varoquaux;(从左到右):Vlad Niculae、Mathieu Blondel、Bertrand Thirion、James Bergtra、Jake VanderPlas、Andreas Mueller、Alexandre Gramfort

Julien Jerphanion

Julien Jerphanion 参加了 2019 年 2 月在 AXA 举行的冲刺,当时他还是 Dataiku 的实习生,这是他第一次作为贡献者参加。冲刺为 Julien 提供了一个体验 scikit-learn 和结识维护者的机会。在冲刺之前,他只在几个项目中使用过该库。他从 2021 年 3 月开始贡献代码、评论和文档,2021 年 4 月加入 Inria,2021 年 10 月,Julien 成为核心开发者。

Vlad Niculae

Vlad Niculae 成为维护者的道路是,首先是 scikit-learn 邮件列表帖子,然后是 GSoC(Google Summer of Code)实习,最后是 EuroSciPy 2011 冲刺。

团队鼓励我参加并帮助我安排了这次活动。冲刺对于拓宽我的关注范围至关重要,从我贡献的小模块扩展到整个库。将冲刺和会议放在一起是一个很棒的安排——它让我有机会不仅结识 scikit-learn 团队(当时规模很小,非常欢迎我!),还结识了更广泛的 SciPy 生态系统,包括 NumPy、IPython [Jupyter Notebook] 开发人员。这帮助我更好地理解了科学 Python 世界。

其他维护者

其他维护者 和资深贡献者,他们在与 scikit-learn 团队的旅程中参加了开发者或社区冲刺,例如资深贡献者 Gilles Loupe 和 Thouis (Ray) Jones。

Reshama Shaikh

Reshama Shaikh 从 2017 年到 2021 年组织了九次 scikit-learn 社区冲刺。她于 2018 年 9 月首次为 scikit-learn 贡献代码和文档修复。2020 年 9 月,她被邀请加入 scikit-learn 团队。

在 2022 年 4 月的 PyConDE PyData 柏林主题演讲中,5 年、10 次冲刺、一次 scikit-learn 开源之旅,她分享了社区冲刺的历史和发展历程。

Juan Martín Loyola

Juan Martín Loyola 开始 为 scikit-learn 做出贡献,作为对 2021 年 6 月的数据伞拉丁美洲 冲刺的准备。他在冲刺后继续大量贡献,并于 2021 年 12 月被邀请加入团队。鉴于他在阿根廷的位置,他将在 2022 年 SciPy 拉丁美洲 冲刺中提供支持。

二级影响

Lauren Burke 在 Reshama Shaikh 的推荐下,于 2021 年 11 月加入了 scikit-learn 沟通团队,这可以被视为网络效应。这表明冲刺可以带来除了代码之外的其他有价值的贡献。

冲刺:观察到的影响和经验教训

冲刺对项目和贡献者都产生了许多观察到的有利结果。

入职

冲刺帮助社区发现开源流程并开始贡献。

建立社区

冲刺参与者,无论是单次参与者还是经常性参与者,都成为项目的代言人。

开源工作流程知识

用户学习了一系列工具,例如:虚拟环境设置、版本控制系统(例如 Git)、测试(flake8、pytest、持续集成)和单元测试。他们还学习了软件开发最佳实践。对于许多 scikit-learn 用户来说,冲刺是他们第一次浏览 scikit-learn 的代码库和结构,深入研究函数并了解错误。他们积累了协作开源工作流程的经验。对于雇主来说,让他们的团队为开源做出贡献可能是一个优势,因为他们会学习如何正确协作并了解库的内部机制。冲刺经验帮助贡献者发展 更广泛的技术技能,这些技能可以在项目之间、网络中、工作中以及更多地方共享。

克服进入壁垒

冲刺作为“动手工作会议”,为潜在贡献者提供了一种克服进入壁垒的途径,特别是“入门”以及从可能性阶段过渡到现实阶段。

为高级贡献提供途径

由于冲刺为新贡献者提供了入门途径,因此它也为回归贡献者提供了一个机会,让他们在结构化环境中并得到指导的情况下,将他们的贡献技能提升到下一个水平。

建立信心

冲刺有助于为新贡献者和回归贡献者建立 信心

Gaël 分享道

我相信这些冲刺帮助有资源的人(比如 Juan Martín)获得了信心并做出了宝贵的贡献(尤其是评论)。

提高开源素养

冲刺是用户了解开源项目运作方式的论坛,也是用户/贡献者了解实际贡献的论坛,从头到尾。

同步交互的价值

通常,对 scikit-learn 的开源贡献是在 GitHub 存储库中以异步方式进行的,跨越数周或数月。冲刺提供实时同步交互。这种体验为贡献者提供了更多直接的技术援助和反馈,这更有效率和更具吸引力。

Julien 分享道

我认为拥有这样的设置 [初学者/社区冲刺] 对于第一次贡献者来说非常有价值,因为他们可以同步获得他们可能无法获得的特定信息。对我来说,这允许提供即时、具体和准确的反馈,使开源贡献变得愉快并防止沮丧:提供这种反馈是我们应该努力的目标,在这方面,这种设置非常方便。

在线冲刺

自疫情开始以来,数据伞已经组织了 4 次在线冲刺。此外,还有 2 次与 SciPyEuroPython 合作的在线冲刺。

这些是自 2020 年由于全球疫情开始以来观察到的在线冲刺的益处

网络

在线冲刺使结识来自不同背景的新人变得更容易。

国际合作

与亲和力社区合作可以吸引更多来自不同背景的候选人。特别是,在线冲刺有助于打破地理障碍。

结对编程

贡献者的结对似乎效果很好。结对编程一直被在线冲刺参与者评为积极的体验。

提高可访问性

在线工具的使用使人们能够与那些传统上不会参加在北美或西欧举办的社区活动的人互动,例如,由于旅行成本和及时获得签证的复杂性。参加在线活动对于有年幼孩子的家庭来说可能也更不容易造成干扰。

对于 scikit-learn 项目本身来说,这使得我们能够“招募”一些新的定期贡献者,他们在最初的冲刺之后参加了定期的办公时间。

办公时间

scikit-learn 项目定期在 Discord 上举办办公时间。

Olivier 分享道

实际上,我们现在在 Discord 上有社区办公时间,这很可能是我们参加 Data Umbrella 在线冲刺的结果。

我认为它们[冲刺]是我在 COVID-19 危机期间参加的最有趣的在线活动,当时所有传统的现场技术活动都被取消了。特别是 Data Umbrella 团队为参与者在 Discord 上使用音频房间进行配对工作 + 中央帮助台音频房间的积极计划非常有效。

冲刺前和冲刺后的办公时间也使得我们可以减少在帮助解决设置问题上花费的时间,与我们在传统冲刺中遇到的情况相比。它们还迫使我们作为维护者在活动之前审查和修复我们的文档。

创建不同媒体类型的补充资源

Data Umbrella 协调创建了一系列视频和文字记录,为社区提供学习材料,为冲刺做好准备。这些资源对公众开放,并且具有广泛的影响力。

这是为冲刺创建的 为 scikit-learn 贡献代码 视频列表。

list of videos
照片来源:Reshama Shaikh

对未来 scikit-learn 冲刺的期望

社区冲刺的主要目标之一是招募新的贡献者,他们将成为定期贡献者。这个目标通常没有实现。scikit-learn 是一个复杂且高级的项目,一次性冲刺无法为冲刺参与者提供足够的机会和支持,让他们成为定期贡献者。一些冲刺参与者已经成为回归贡献者,但与冲刺参与者人数相比,这个数字非常少。

让首次贡献者加入需要时间。首次贡献者需要同时了解大量有关贡献的技术和组织方面的信息。人们在开始时可能会遇到意想不到的问题,具体取决于他们的设置和经验,可能会感到沮丧或灰心,并且可能不会报告他们遇到的问题(认为是他们的错)。活动前的办公时间已经成功地缓解了一些障碍,对于那些完成了预备工作的冲刺参与者来说。

以下是一些未来可以做出的调整,以实现招募定期贡献者的目标。

  • 提供指导
  • 改进加入流程
  • 改进问题定义
  • 在教程旁边进行冲刺
  • 扩展新贡献者可以做出的贡献类型
  • 举办规模更小的冲刺活动

指导
冲刺可能不足以让新人加入。需要指导才能更上一层楼,并且可以在冲刺活动期间建立指导关系。

改进加入流程

虽然 scikit-learn 项目在过去几年中由于冲刺的反馈和经验教训而得到了显著改进,但仍有改进的空间。

scikit-learn 项目很复杂,贡献者的学习曲线更陡峭,为 scikit-learn 贡献代码变得越来越困难。

改进问题定义

GitHub 存储库中有 1600 多个 问题。问题可以更好地定义,将问题分解成更小的步骤将更有价值,这些步骤更容易处理。

在教程旁边进行冲刺

在教程环节旁边安排冲刺将有利于用户将开源工具用例与 scikit-learn 的动机和产品愿景联系起来。

扩展贡献类型

虽然冲刺通常侧重于文档和代码贡献,但项目在其他领域也需要支持。有一个 未解决问题(1600 多个!)和 未解决的拉取请求(650 多个)积压。项目需要在对问题进行分类和审查拉取请求方面提供支持。让冲刺贡献者处理越来越复杂的问题将是有益的。

Julien 从个人经验分享

在我看来,审查拉取请求与编写拉取请求一样有价值。我还发现,与解决问题相比,这是了解 scikit-learn 内部机制的更可取的方式。

举办规模更小的冲刺

Julien 建议

规模非常小的人员冲刺(例如,每位导师 2 位受训者)从长远来看是否更有价值?就我个人而言,我更愿意密切指导一两个人(理想情况下是面对面),因为我认为这是一种更可行、更愉快和更有成效的体验(这是我目前在有时间的时候正在尝试做的事情,但我目前时间有限)。

最后,我还非常珍惜在未来可能的情况下,在[巴黎]与外部(定期)贡献者(具有特定专业知识)进行关于高级主题的面对面冲刺。

结论

连接和支持 scikit-learn

要与 scikit-learn 项目建立联系,以下是最活跃的社交媒体平台。

我们非常欢迎用户在 GitHub 上“加星”代码库:scikit-learn/scikit-learn

除了公共开发人员和分类会议之外,我们的办公时间都发布在我们的 社区日历 上。

下一个社区冲刺可能会在 9 月初的瑞士巴塞尔举行的 EuroScipy 2022 上举行。有关过去和 即将举行的冲刺 的信息将在我们的社区网站上分享。

为 scikit-learn 贡献代码

要为 scikit-learn 贡献代码,我们在这里提供了一些资源。

还有其他贡献资源。

附录 A:库的 GitHub 贡献者比较

与同一领域的其他相关库的贡献者基础比较(更新于 2022 年 7 月)

参考文献