查看原文
其他

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

数据应用学院 大数据应用 2023-08-17

今日份知识你摄入了么?

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

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


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


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


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


无论是作为作者、维护者还是开发者,Open-source领域的工作都非常艰巨!通过这篇文章,我分享了我在这个领域的一些经验,希望能帮助那些想要开发Open-source的人。


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进行主题建模的模块化设计


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


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


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

让它使用起来超级简单。


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


感谢你的阅读!所有未注明出处的图片均由作者创作。

原文作者:Maarten Grootendorst

翻译作者:高佑兮

美工编辑:过儿

校对审稿:Chuang

原文链接:https://towardsdatascience.com/6-lessons-i-learned-from-developing-open-source-projects-4617e26f247c


本周公开课预告


往期精彩回顾

2022年IDEAS全球人工智能大会火热抢票中!

招贤纳士 | Marketing specialist、Business Development Manager

数据工程——Scala与Python的区别

【Python-数据科学】Pandas Basics速查表(2023)

以数据科学家或机器学习工程师的身份逐步构建数据管道






点「在看」的人都变好看了哦

点击“阅读原文”查看数据应用学院核心课程

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存