pip 人员

问题

我们希望为 pip 的用户开发人物角色,以帮助 pip 开发团队更快地做出以用户为中心的决策。

跳过到推荐

研究

从与 pip 用户的早期访谈,以及对使用 Python 的不同社区的桌面研究,我们预期存在大量并非专业软件开发人员的社区。例如,SciPy 库在科学和工程社区中被广泛用于数学分析、信号和图像处理。

基于此,我们预计这些用户中的许多人将对 pip 有不同的期望、挑战和需求。

我们的假设是

  1. Python 用户分为 3 种主要用户类型 - 软件用户、软件制造商和软件/包维护者

  2. 大多数(超过 60%)会将自己定义为 Python 软件用户

  3. 少数会将自己定义为 Python 软件维护者

用户类型定义

在研究过程中,我们遇到了 Python 社区中的不同用户类型。我们提出的 3 种 Python 用户类型是

Python 软件用户

“我主要使用 Python 软件作为工具来帮助我完成我想做的事情。这可能是运行科学实验、制作音乐或使用我通过 pip 安装的 Python 软件分析数据。我不为他人编写 Python 软件。”

Python 软件制造商

“我使用 Python 软件语言和 Python 软件包为其他人制作软件,主要是为其他人制作。例如,为我的客户构建 Web 应用程序。要制作这个 Web 应用程序,我可能会使用 Django 框架,以及一些 Python 包和库。”

Python 包维护者

“我花费大量时间为他人创建 Python 软件包和库,供他们在制作的软件中使用。我可能会制作 Python 包和库,然后将它们发布到 pypi.org 或其他软件仓库。”

结果

在我们的研究过程中,我们发现这些用户类型确实符合参与者对他们使用 Python 的感受。当被问及时,参与者并没有确定出明显不同的 Python 用户类型。

每种用户类型都是一个频谱。一些 Python 用户随着时间的推移,以及随着经验/培训的积累,需要多次使用代码,开始制作自己的 Python 软件。

将自己标识为其中一种用户类型并不排除用户也可能是另一种用户类型。Python 用户更有可能成为 Python 软件制造商,但很少成为 Python 软件维护者。

大多数(86%)参与者表示自己是 Python 软件用户。这从 a) 使用 Python 应用程序 - SciPy、Scikit-Learn - 作为工具,没有知识,也没有兴趣做更多事情,到 b) 更高级的 Python 使用,包括修改他人的代码/脚本,可能使用库来创建专门针对他们需求的代码。

75% 的人表示自己是 Python 软件制造商 - 与 Python 软件用户一样,这从编写基本脚本、代码到成为专业软件开发人员不等。

40% 的人表示自己是 Python 软件维护者 - 维护者的活动被认为只适用于那些拥有多年 Python 经验、高度参与特定包或应用程序,或将其作为工作的一部分的人。

我是一个 Python 软件用户

正如预期的那样,几乎所有参与者(86%)都表示自己是 Python 软件用户。这是最基本的用户类型 - 受过培训的软件开发人员以及因工作而使用 Python 的人都属于用户。

非软件开发人员用户将 Python 标识为一种完成任务的语言 -

“几乎每个人都属于用户(类别) - 那是目标。它不是一种专用于特定领域的晦涩难懂的语言 - 它是一种广泛的通用语言,旨在完成任务。它被许多不了解其他语言的人使用,他们只需要一种语言来完成他们的工作。” - 参与者 240312164

但是,“使用 Python 软件”的含义因人而异 - 参与者在频谱上识别自己为 Python 软件用户。

我是一个 Python 软件用户 回复数量
我同意 50
我不同意 4
我没有意见 11
我强烈同意 70
我强烈不同意 4
总计 140

Pie chart with responses to question - I am a Python software user

频谱的低端

有些人将 Python 软件应用程序标识为他们用来完成“实际”工作的工具 - 科学家、数据分析师、工程师、记者。

在这里,他们使用 SciPy、PsychPi、NumPy 等 Python 应用程序来运行科学实验,收集数据,分析数据,目的是创建知识以做出决策,确定下一步该做什么。

这些是 1) 刚接触 Python 软件的用户,2) 在他们的职业中遇到了这些 Python 应用程序,并将它们用作工具的用户。

他们将 NumPy 或 SciPy 描述为一个独立的 Python 软件应用程序,类似于成为 Windows 用户或 Mac 用户。

这些用户不是“经典的受过培训的程序员”,正如一位参与者所说。因此,他们可能没有接受过培训,也不了解编程概念,如软件依赖关系。当他们需要处理复杂或令人困惑的错误消息或说明时,他们会遇到问题,通常会阻止他们。

频谱的高端

那些“在频谱上升级”到更高级 Python 使用的 Python 用户使用 Python 的时间更长 - 多年。

同样,他们可能不是经典的受过培训的开发人员,但通过接触 - 来自工作同事和他们自己的使用 - 他们开始尝试。这种尝试是以修改他人的脚本、参加课程、阅读书籍的形式进行的,以便他们可以将代码用于其他目的。

这是制作软件 - 这个软件可以被他们用作他们日常工作的一部分,但也可以被许多其他人使用。

我们请参与者解释这个用户频谱的进展 - 用户和制造商之间有什么区别?

参与者谈到“你是正在进行可重复使用的东西,还是在使用这些工具来完成一次性任务?”

“我没有接受过经典的软件开发培训,更多的是统计分析经验。我不知道它是一个任何人都可以上传软件包并成为维护者的仓库。” - 参与者 _240396891(应用研究实验室的数据科学家,使用 Python 进行网络流量分析/解析或机器学习)

“首先我使用自己用 Python 编写的软件,我使用来自 pip 的 Python 库。我使用 Django、Flask、requests 等库。” - 参与者 240302171

“我不是一个经典的受过培训的程序员,所以它对我来说是一个很好的学习和掌握最新技术的工具。由于我不是一个经典的受过培训的程序员,在某些情况下会造成障碍,我了解哈希的使用方式,但如果我想更改 Python 的哈希,我必须阅读书籍。我可以找到那里的信息。” - 参与者 240312164(使用 Python 进行计算机模拟、设计实验方法的核物理学家)

我是一个 Python 软件制造商

成为“Python 软件制造商”对一些 Python 用户来说是一个自然的进步,尤其是那些接受过软件开发培训的人 - 无论是工作中、个人学习还是正规教育。这种培训对于理解基本编程概念至关重要。

如前所述,一些参与者表示自己是“高级”Python 用户,使用 Python 软件来修改或创建其他软件。这些用户很可能成为软件制造商。

有 55% 的软件开发者在 Python 上拥有 5-20 年以上的经验。只有 18% 的软件开发者拥有不到 2 年的经验。

Pie chart with responses to question - I am a Python software maker

我们没有询问这些参与者他们所创建软件的“质量”,但除了专业软件开发者之外,这些用户的意见是,他们不是软件开发者。

我是一个 Python 软件用户 回复数量
我同意 50
我不同意 9
我没有意见 14
我强烈同意 56
我强烈不同意 10
总计 140

如前所述,制作软件被定义为“您是在制作可重用的东西,还是在使用这些工具来完成一次性任务?”

“我正在使用 Python 软件和库来制作我正在开发的产品,它的基础是基于 Python 的,包括 React、D3 等等,都构建在 Python 之上。云资产是 Python,测试也是 Python。”**- 参与者 240315927(一名正在构建基于 Python 的数据分析应用程序的专业 IT 开发人员)**

“我在 Python 中制作软件。我的日常工作是使用 Python 制作软件。主要是 Django 网站设计。我在一家零售公司工作,负责编写计算订单、在其他库存管理系统中创建数据、以及进行数据分析。”**- 参与者 240393825**

“我编写过软件,有时是为了商业目的,有时是为了个人原因。有一段时间,我参与了一个 Django 网站项目,它被数千人使用。我不认为我的任何实时项目都是基于…

“大部分是用于系统管理员、自动化。我[喜欢]使用 Python 而不是 shell 脚本。我管理一台带有 WordPress 网站的服务器。我编写了一个脚本用于更新这些网站、Mailman 列表和 SQL 数据库管理,以及其他一些实用程序。”**- 参与者 240313542**

“我使用 Python 来创建一些东西 - 比如数据科学家和软件工程师的输出。我制作软件来查看模式,并分析事物。我认为我是一个制造者,因为其他人正在使用它 - 他们是同事。通常是非技术同事。我制作输出 - 使数据更易理解。他们使用结果,或者在 Flask 应用程序背后打包它。或者分析图表。”**- 参与者 240426799**

我是一名 Python 软件维护者

Python 软件/包维护者用户类型被认为需要大量的时间和经验 - 领域经验,因为软件可能非常特定(例如 SciKit Learn、SciPy 等),技术/编码经验,以及社区经验。你需要先做过其他工作,才能成为维护者。

对于大型项目,人们认为需要有核心代码贡献者和维护者。维护者并不总是编写代码 - 他们可能更多地参与技术架构、技术设计,而不是编写代码。

软件维护者角色的一个没有被提及很多方面的方面是社区管理方面。

Pie chart with responses to question - I am a Python software maintainer

我是一名 Python 包维护者 回复数量
我同意 39
我不同意 24
我没有意见 20
我强烈同意 18
我强烈不同意 38
总计 140

“当你达到一定经验水平后,就可以成为维护者。”**- 参与者 240278297**

“要成为包维护者,你必须花费大量时间修复问题,例如你的包在 Github 上,你需要查看问题、审查 PR、编写文档。包维护者是项目中投入大量精力的人。他们处理更多的支持电话,他们更多地考虑如何将你的包放到多个环境中。这就是 Python 社区的好处 - 我试图使用一个 Python 包,但文档有问题。我说,这有一个更好的方法来做这个例子。他们回答说“太好了,你想做吗?做包维护,我对此并不感兴趣,我真的没有时间 - 如果我遇到了一个具体的问题,我会专注于它。这样做(做更多)会很好。”**- 参与者 240278297(专业的 Python 软件开发者)**

“我是一个 scikit-learn 的核心开发者,我花时间编写代码。严格来说,这些天我做的最少的事情是编写代码 - 大部分时间我都在审查其他人的代码。有很多 API 设计工作,它可以转化为编写代码。我可能是编写代码的人,也可能不是。我有时会参与 CI。[…] 我是过去两个版本的发布经理。维护者类型各不相同 - 编写代码的维护者,但你确实需要核心开发者来编写代码。但作为维护者并建立一个社区 - 那是关于沟通和 PR,以及指导人们。”**- 参与者 240306385(SciKit-Learn 的核心维护者)**

建议