关于开发Open-Source,我学到的6个教训!

关于开发Open-Source,我学到的6个教训!

Open-source(开放源码)这个概念棒呆了!通过将整个用户群的资源、技能和知识绑在一起,可以创造出我们作为个体做不出的软件,起到1加1大于2的效果。

因此,作为数据科学家的我们会大量使用这种软件。它推动了许多技术的发展,并且有机会参与到这些技术的开发中。

在过去的几年里,我有幸参与了Open-source的开发,并有机会设计和维护了几个软件包!

开发Open-source不仅仅是开发编码。

在此期间,我有很多障碍需要克服,也有很多教训需要吸取:从棘手的依赖关系,API设计选择到与用户群的沟通。

无论是作为作者、维护者还是开发者,Open-source领域的工作都非常艰巨!通过这篇文章,我分享了我在这个领域的一些经验,希望能帮助那些想要开发Open-source的人。如果你想了解更多关于数据科学的相关内容,可以阅读以下这些文章:
【Python-数据科学】Pandas Basics速查表(2023)
如何成为全栈数据科学家?
成为高效数据科学家需要做的五步数据科学项目生命周期
数据科学家V.S数据分析师面试全对比

1 文本被低估

当你创建Open-source软件时,你通常不会专门为自己制作软件包。来自各种不同背景的用户将使用你的软件,而适当的文本能帮助这些用户快速入门。

但是,不要低估文本对软件包可用性的影响!你可以使用它来解释复杂的算法,提供广泛的教程,展示用例,甚至实现交互式示例。

特别是与数据科学相关的软件,当涉及到复杂的算法时,它们可能很难理解。像讲故事一样解释它们,往往能使它们更加直观。

另一个好处是,编写好的文本可以降低在一些问题上花费的时间。如果用户可以在文本中找到答案,那么他们提出问题的理由就更少了。(相信我,写好文本其本身就是一种技能)

KeyBERT是如何工作的(https://maartengr.github.io/KeyBERT/guides/quickstart.html)

创建文本不仅仅是写出文本,如果你能可视化你的算法或软件,那么其直观性会得到质的飞跃。当你希望能在文本中可视化算法原理时,你可以试着从Jay Alammar那里学习,他的可视化结果甚至出现在官方的Numpy文中!(https://numpy.org/doc/stable/user/absolute_beginners.html

2 用户就是一切

你的用户,是你软件的重要组成部分。自从我们开发Open-source软件,可以肯定地说,我们希望他们参与其中。

通过与用户互动,你可以引导他们讲出自己的忧虑或算法的漏洞,提出功能请求和加深开发等要求!所有这些都能为他们实现更多的便利。

Open-source真的不仅仅是其各部分的相加那么简单。

BERTopic中的许多核心功能,如在线主题建模(online topic modeling)(https://github.com/MaartenGr/BERTopic/issues/683),因为它们被用户强烈要求,已然实现。因此,用户群的活跃,在发现问题和开发新功能方面能提供巨大的帮助。

实现用户们的功能需求需要走很长的路!这里是探讨的片段

3 绝佳的学习机会

无论你的软件包将被使用数百万次还是仅使用几次,创建它都是了解更多关于Open-source、MLOps、单元测试、API设计等的绝佳机会。在开发Open-source的过程中,我学到的这些技能比我在日常工作中学到的要多。

与用户本身的互动也能提供巨大的学习机会。他们会告诉你他们喜欢或不喜欢哪些设计。有时,我看到同样的问题在几个月内多次出现。这表明我应该重新考虑这个设计,因为它并不像我预想的那么友好!

最重要的是,开发Open-source项目能让我有机会与其他开发人员进行合作。

4 压力是存在的

在工作之余做自己的Open-source项目确实有其缺点。对我来说,最重要的一点是维护软件包,同时,回答问题和参与讨论的工作量也同样庞大。

如果你能从内心敦促自己,这肯定能帮助你减轻一些压力,但仍然需要相当长的时间来确保一切都结合在一起。

幸运的是,在回答问题、展示用例时,你可以向用户寻求帮助。

经过这几年的学习,我学会了在得到突破性进展的时候要从容一些,尤其是涉及到依赖关系的时候。有时候你要做的实在太多了!

5 GitHub 星级不等于质量!

了解你的软件包的使用频率对于了解它的受欢迎程度有很大的帮助。然而,许多人仍然使用GitHub星级来将软件等同于质量和受欢迎程度。

确保去适配真正的衡量指标。GitHub 星级可能只是由于适当的营销而被夸大。许多颗星,并不意味着受欢迎

作为数据科学家,我们必须首先了解我们究竟在测量什么。也许用户在GitHub 星级给一个软件包打了一颗星,但这甚至不意味着他们已经使用了该软件或它正在被使用!

KeyBERT的下载量:一个比GitHub 星级更好的指标

从技术上讲,我确确实实可以给一千个人付钱来为我的repos评星级,但相反,我更专注于各种统计数据,如下载量和分支量,以及我每天获得的用户问题数量。

例如,如果你的软件包在Hacker News(https://news.ycombinator.com/item?id=31341250)上出现,那这当然是个很好的消息,但它不会告诉你它是否一直在被使用。

6 API设计心理学

作为一名心理学家,我通常会把很多精力放在软件包的设计上,这包括文本和教程之类的东西,因为它甚至会体现我编码的方式。

确保软件包易于使用和安装,让用户操作得更加简单。特别是当你专注于模块化和透明性等设计理念时,一些软件包使用起来会很爽。

利用BERTopic进行主题建模的模块化设计

在开发新功能的同时,我们要以心理学家的视角看待问题,使我们更懂得要关注什么。用户想要的是什么?我怎样才能以一种解释算法的方式编写代码?为什么用户会使用这个软件?我的代码有哪些主要缺点?

花时间了解普通用户能让你的软件更受欢迎。

以上所有这些往往指向了一个基本但重要的原则——

让它使用起来超级简单。

就我个人而言,如果我发现一个新的软件包很难安装和使用,我不太可能在我的工作中采用它。

感谢你的阅读!所有未注明出处的图片均由作者创作。你还可以订阅我们的YouTube频道,观看大量大数据行业相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/

原文作者:Maarten Grootendorst
翻译作者:高佑兮
美工编辑:过儿
校对审稿:Chuang
原文链接:https://towardsdatascience.com/6-lessons-i-learned-from-developing-open-source-projects-4617e26f247c