OCaml 平台的用户画像
本节概述了 OCaml 生态系统中的不同用户画像,重点介绍了他们的独特目标、动机和挑战。
定义这些画像的目的是建立一个框架,可以指导 OCaml 平台的路线图,确保它能满足每个原型用户的独特需求。通过了解和满足每个画像的具体特征,我们可以为 OCaml 生态系统的成功做出贡献,同时赋能用户实现他们的个人目标。
(U1) 应用开发者
使用 OCaml 构建应用来解决现实世界的问题
使用 OCaml 的应用开发者专注于构建解决现实世界问题的解决方案。他们非常重视应用的稳定性、可靠性、性能和可扩展性。一些应用示例包括使用 Js_of_ocaml 构建浏览器上的 Web 应用,使用 MirageOS 构建微内核,以及使用 Owl 构建图像分类器。
- **应用稳定性和可靠性**: 应用开发者关心最终用户的体验。向用户发布稳定可靠的应用对于提供良好的用户体验和最大限度地减少故障或停机时间至关重要。稳定性还可以帮助开发者降低维护成本,将精力集中在改进上,而不是修复 bug 或技术债务。遵循当今最佳实践包括使用可复现构建来避免因移动依赖项造成的影响,严格控制依赖项以了解潜在的安全风险,以及使用工具来实施测试、强制执行最佳实践或运行持续集成。
- **性能和可扩展性**: 大多数应用都有一些性能限制,需要满足这些限制才能实现可扩展性或提供良好的用户体验。可扩展性也是应用开发者普遍关心的问题,他们需要预测用户群或数据集的增长。为了提高应用的性能,开发者依赖于检测工具、分析器或基准测试。优化应用性能的另一种常见方法是支持并行处理代码中性能密集型部分。
- **分发和部署**: 对于应用开发者来说,一个简单的分发或部署流程对于持续向用户交付他们的应用至关重要。有助于开发者简化分发工作流程的内容包括跨平台构建;CI/CD 管道;自动生成安装程序;与跨操作系统的分发平台集成(例如 App Store、Windows Store、Docker Hub 等);生成目标平台资产的工具(例如 JavaScript、iOS、Android 等);以及与提供简化部署流程的第三方系统集成,例如 Docker 或 Nix。
- **安全性和合规性**: 应用开发者优先考虑安全性,以保护敏感数据并维护用户信任。他们可能需要遵守行业安全标准,例如维护软件物料清单 (SBOM),并遵循法规。公司通常会组织安全审计,以主动识别和解决潜在问题。个人开发者通常遵循不太严格的流程,依赖于其包管理器或漏洞扫描器的安全功能。为了进一步控制依赖项和增强安全性,开发者可能会派生和供应商库,使他们能够快速响应安全问题并自定义依赖项以满足其特定需求。
- **全面的文档和资源**: 对于各种经验水平的开发者来说,访问文档和学习资源至关重要。鼓励参与社区驱动的资源,例如论坛和知识库,也有助于形成一个支持性的生态系统,开发者可以在其中既消费知识,也贡献知识。
(U2) 库作者
构建可复用的 OCaml 组件,而不是直接可执行的组件
库作者编写由其他开发者使用的代码,同时使用其他人的库来构建他们自己的库。他们专注于确保他们的库设计良好、文档齐全且易于使用。库作者经常需要管理依赖项、版本控制、发布和测试。他们可能会为各种目的创建库,例如 Web 开发、数据处理或机器学习,并将它们贡献给 opam 存储库供 OCaml 社区使用。
- **包发布**: 在包存储库上发布包是库作者共享其工作的首要方式。他们希望这个过程尽可能直观且无障碍,这样他们就可以专注于构建他们的库、编写文档并与社区互动。
- **代码可重用性和模块化**: 库作者关心可组合性,他们设计易于使用且与其他库配合良好的 API。他们专注于创建简单的 API 并遵循通用实践,以确保他们的库对开发者来说很熟悉。他们还关注兼容性,仔细选择其他依赖项的 API,并权衡使用不同包的利弊。
- **互操作性和可移植性**: 在某些情况下,库支持特定的目标平台(操作系统、体系结构等),但在大多数情况下,库作者希望尽可能让更多用户可以使用他们的库。为此,他们依赖于工具在不同平台上测试他们的库。支持库作者的工具包括 CI 系统和跨平台构建系统。
- **代码质量和可维护性**: 当库作者发布库后,他们会承担维护成本,因为语言和生态系统在不断发展。语言或库依赖项中的每一次重大更改都会造成摩擦。他们希望这方面的工作尽可能少,理想情况下不受生态系统任何更改的影响,只在需要时接受更新其库的维护成本。相反,他们想知道发布会对用户的影响:依赖其库的应用或其他库。
- **文档和示例**: 共享其工作的另一个重要方面是确保用户能够轻松使用其库。为此,库作者关心为用户提供良好的文档和其他资源,以降低学习曲线,例如代码示例。这些文档和资源需要随着库的更改和改进而保持更新,这样它们就不会成为作者的负担或与用户无关。
- **社区参与和支持**: 库作者努力与社区其他成员分享其工作。他们关心生态系统的健康和发展。他们也重视与社区的联系,例如在论坛和社交媒体上发布他们的包,收集用户的反馈,甚至鼓励为他们的库做出贡献。
- **支持应用开发者**: 最终,库作者希望帮助应用开发者 (U1) 取得成功。他们关心诸如性能、安全性以及可维护性等方面,以确保他们的库为构建应用提供了坚实的基础。通过关注这些领域,他们赋予开发者使用他们的库创建健壮高效的现实世界解决方案的能力。
(U3) 发行版管理者
负责维护 Linux 发行版,如 Debian 或 RedHat
发行版管理者负责维护 Unix 发行版,如 BSD、Debian 或 Red Hat,并确保 OCaml 应用、库和工具与其发行版策略兼容。他们关心包管理、可共存性和与外部(非 OCaml)依赖项的紧密集成。发行版管理者通常需要决定在其发行版中包含哪些 OCaml 组件,并确保它们得到良好的支持和安全性。
- **包选择和包含**: 发行版管理者负责为其发行版选择合适的 OCaml 库和工具。他们需要考虑长期支持、稳定性、兼容性和功能可用性等因素。他们还需要确保一组一致的可共存包,并管理出现的任何依赖项冲突。通过最大程度地减少包不兼容性和重大更改的风险,发行版管理者为开发者创建了一个可靠且用户友好的环境。因此,与外部(非 OCaml)包的无缝集成是发行版管理者的优先事项。
- **安全性以及长期支持**: 发行版管理者需要及时了解其发行版中包含的包中的潜在安全问题,因为他们有责任及时发布热修复程序和安全更新。他们还为选定的 OCaml 库和工具提供长期支持,例如 Debian 的 5 年 LTS 支持,因此他们需要确信包含库不会给发行版带来额外的维护负担。
- **包管理和工具**: 发行版管理者使用其发行版现有的包管理基础设施,而不是依赖于特定于语言的工具。为了简化其发行版的发布流程,发行版管理者关心有一个简单的方法,可以轻松地将特定于语言的包移植到其发行版包管理器中。
(U4) 新手
学习语法和语言特性
新手用户是指刚接触 OCaml 语言,或者出于个人学习或教育目的想要学习该语言的个人。他们通常会被 OCaml 的强类型系统、函数式编程范式以及丰富的工具和库生态系统所吸引。新手用户最关心的通常是:轻松设置开发环境、获取可访问的学习资源以及获得 OCaml 社区的指导。
新手用户的背景各不相同,有些可能已尝试过其他语言,而另一些可能这是他们第一次接触计算机科学。学习 OCaml 的方式取决于个人的喜好和先前经验。他们通常最关心的是轻松设置开发环境、获取可访问的学习资源以及获得 OCaml 社区的指导。他们可能会从尝试编写简单的 OCaml 程序开始,例如命令行计算器,或者使用轻量级框架构建基本的 Web 应用程序。
- **设置 OCaml 环境**: 新手用户在学习 OCaml 的旅程中第一步就是设置他们的环境。他们需要有全面的文档来指导他们完成简单的安装流程。如果在安装过程中出现错误,他们还需要轻松理解错误的原因。缩短安装时间也非常重要:通过缩短开始使用 OCaml 的时间,新手用户可以专注于学习和尝试该语言。并非所有新手用户都需要在自己的系统上安装 OCaml:使用在线 IDE、Playground 或 Docker 容器可以简化想要快速开始编写 OCaml 代码的用户设置过程。
- **学习 OCaml**: 一些新手用户是其他编程语言的经验丰富的开发者,而另一些则是以 OCaml 作为他们的第一门语言。鉴于学习需求的多样性,新手用户需要能够访问包含大量文档和学习资源的库来学习 OCaml,包括指南、教程、语言手册、包文档等。所有这些资源都需要满足新手开发者的需求,同时也要为经验丰富的开发者提供全面的信息。新手用户还希望他们的学习体验愉快,例如使用 Playground、互动练习或适合初学者的内容。
- **探索生态系统**: 一旦新手用户设置好环境并开始学习该语言,他们需要与生态系统互动,例如使用 OCaml 包、在论坛上提问、阅读文档等等。重要的是要让新手用户充分了解生态系统的组织方式:如何找到问题的答案、最佳实践是什么、两个可选包的优缺点是什么等等。新手用户想要获得可重用的示例来执行特定任务,例如创建 Web 服务器或命令行界面。
- **社区支持和指导**: 对新手用户学习 OCaml 来说,一个友好和支持的社区至关重要。学习一门新语言并探索一个生态系统可能会让人望而生畏,新手用户可能会向社区寻求支持。社区中经验丰富的开发者可以通过回答论坛、聊天、GitHub 和其他平台上的问题来帮助营造积极的学习环境。
(U5) 教师
教授 OCaml 语法和语言特性,或者使用 OCaml 教授其他计算机科学原理。
教师是负责向学生教授 OCaml 编程语言的个人。这包括教授 OCaml 的语法和语言特性,或者使用 OCaml 作为工具来教授其他计算机科学原理。教师通常需要支持多种操作系统(例如 Mac、Unix 和 Windows),以确保学生顺利入门。教师关心的是创建引人入胜的教育内容,确保学生顺利入门,并将 OCaml 与 Jupyter Notebook 等教育工具集成。
- **为学生提供无障碍的设置体验**: 教师需要支持学生使用的多种操作系统上的各种环境。他们希望尽可能简化和统一学生设置开发环境的过程。为此,他们希望能够引导学生使用单一平台提供简化的安装体验,例如 VSCode 扩展、在线编辑器等等。他们还会为学生创建分步指南和教程,用于配置环境,以及安装和使用库。
- **吸引学生**: 教师试图适应不同的学习风格和学生背景。他们创建引人入胜的材料,并使用 Jupyter Notebook 等工具来支持互动式学习体验。他们倾听学生的反馈,尝试不同的教学方法,并根据反馈不断改进他们的学习材料。
- **与课程和学习目标保持一致**: 除了教授 OCaml,教师还需要与相关课程(例如计算机科学、算法、系统编程等等)保持一致。教师设计课堂和项目,以展示 OCaml 在这些主题上的实际应用。
(U6) 数据科学家
使用 OCaml 进行短期项目,通常用于科学建模或数据分析。
研究人员使用 OCaml 进行科学建模、数据分析和其他短期项目。他们可能是学术界、研究机构或政府和企业部门等各种行业工作的专业人员。
与应用开发者不同,他们并不一定专注于长期的软件稳定性和部署。他们可能为一次性分析或快速发展的模型开发代码,其中灵活性、迭代速度和表达能力至关重要。但是,与应用开发者一样,他们关心的是拥有高效的工作环境以及能够解决其独特问题的资源。
- **快速原型设计和灵活性**: 研究人员通常从事需要快速原型设计和持续迭代的项目。他们重视能够快速更改和轻松测试的编程环境。
- **丰富的科学库和工具**: 能够访问支持科学计算和数据分析的库对于研究人员至关重要。同样,能够可视化数据和分析结果在他们的工作中也往往至关重要。研究人员通常使用大型数据集,因此他们需要高效的工具来进行数据操作、清理和处理。他们还需要支持各种数据格式和数据库。
- **与其他语言和工具的互操作性**: 由于他们经常在一个更大的数据科学工具生态系统中工作,因此与其他语言(如 Python 或 R)和工具(如 Jupyter Notebook 或 TensorFlow)的互操作性可能很重要。这可能涉及从这些语言调用 OCaml,或者反过来,以及与其他数据科学工具集成。
- **可重复性**: 确保其他人能够重复他们的工作非常重要,尤其是在学术或研究环境中。这涉及跟踪依赖项、版本和环境,以及记录他们的工作,以便其他人能够理解和复制它。