和鲸分享| 世界 500 强莫德纳公司首席数据科学家 Eric J. Ma:协同数据科学的制胜秘诀!
转载声明
本文已获得原作者正式授权进行转载并翻译。若您有意对本文进行再次转载,请务必与我们取得联系 pr@heywhale.com。
原文链接:https://ericmjl.github.io/blog/2024/10/18/keys-to-effective-collaborative-data-science/
导读
在这篇文章中,生物制药领域的世界 500 强企业莫德纳(Moderna)公司首席数据科学家 Eric 讨论了如何加强数据科学家和非计算机背景同事之间的协作,共创有影响力的工作成果。重点强调了以下几点:首先是规范代码初始化的方法,其次是鼓励没有编程基础的人员参与代码评审,再者是换位思考、设身处地进行沟通,以及确保项目具备跨平台运行的兼容性。这些实践策略旨在缩小认知差距,减轻团队成员的认知负担,并深化大家对数据科学项目中所遇挑战的共同认识。那么,可以如何在自己的团队中实施这些策略,以提升团队的整体效能呢?
注:本文为原作者 Eric J. Ma 在 2024 年 10 月 16 日于杜克大学,为 Brian Lerner 教授的课程所做的客座讲座的文章版本
作者简介
Eric J. Ma,MIT 生物工程博士,现任莫德纳(Moderna)公司首席数据科学家,引领着公司的数据科学与人工智能研究的发展。同时,作为一位开源软件的积极贡献者,Eric 通过代码贡献、撰写博客、教学及写作等多种方式,不断回馈并丰富着技术社区。
以下为 Eric 的分享内容
在生命科学领域,我作为数据科学家已有约七年的工作经验,如果算上研究生时期,则已经超过十年之久。在这段时间中,我深刻体会到,缺乏标准化的操作流程常常导致我们的工作成果随着人员的变动而逐渐流失。此外,我也亲眼目睹了实验室团队(数据生产者)与计算团队(数据消费者)之间,因缺乏足够的相互理解而产生的诸多矛盾与摩擦。
今天,我渴望分享一些心得,旨在增进数据科学家与非计算机背景同事之间的协作,确保我们的工作能产生长远的积极影响。主要是这几点建议:
个人工作,井然有序
将心比心,推动协作
工作流程,清晰可见
围绕这三个核心点,我有四个具体的想法愿与大家共勉:
制定标准化的代码库初始化流程,为定量工作奠定坚实基础
引入代码评审机制,并鼓励没有编程基础的人员积极参与
设身处地地从团队成员出发,进行换位思考
确保工作成果能够在任何计算机上流畅运行
接下来,让我们深入剖析这些想法,并探讨它们与上述三个核心点的紧密联系。
规范初始化代码库的方法
在新项目启动、初始化代码库时,遵循规范标准至关重要。这不仅能大幅降低日后查找信息时的认知难度,还能为后来者扫清障碍,让项目交接更为顺畅。采用自动化手段推进标准化,可以极大地简化整个工作流程。
那么该如何着手实现呢?一个不错的起点是使用模板库,也许你的上级已经为你备好了一个。要是还没有用上模板库,不妨召集团队成员一起,合力打造一个!
为了将这些想法付诸实践,我开发了像 pyds-cli 这样的工具,它能让你以既标准又灵活的项目架构来启动新项目。在运用 pyds-cli 时,所有项目都会被规划成可发布的 Python 包的形式,涵盖源代码目录、测试、pyproject.toml 配置文件、Notebook 目录以及文档目录等组成部分。不过,你无需在项目初期就一股脑儿用上所有这些目录!你可以先从 Notebook 目录着手,随后再根据需要引入其他工具。
我的团队采取了一些额外的自动化措施来优化工作流程。比如,我们使用 Pixi 或 Conda/Mamba 这样的标准化工具来统一安装计算环境。同时,我们还引入了自动代码检查器,这些工具在项目一开始就发挥了重要作用,大大减轻了我们的认知负担,并为项目设置了清晰的“护栏”,确保项目能够顺利进行。在项目设置阶段,每增加一项自动化步骤或减轻一些认知负担,都为后来者接手项目并继续推进创造了更多有利条件。
*注:护栏(Guardrails)是一个强大的 Python 框架,旨在帮助开发者构建可靠的 AI 应用,通过集成输入/输出防护机制,能够检测、量化并缓解特定类型的风险,从而确保 Al 应用的安全性和可靠性。
程序员和没有编程基础的人员都可参与代码评审
代码评审是一种非常有效的手段,能够帮助程序员和那些没有编程背景的人共享知识。在这个过程中,通过讨论和交流,原本难以言传的隐性知识更容易被清晰地表达出来。让非编程人员参与到代码评审中来,可以让他们更好地理解程序员在幕后所面临的复杂问题。同时,我们也鼓励那些编程初学者积极参与到反馈中来!另外,如果条件允许,让程序员尽早参与到手动数据收集的过程中,这样双方都能更加深刻地理解彼此所面临的挑战。
你应该如何看待代码评审呢?对于经验丰富的开发者来说,或许异步评审就绰绰有余了。但对于新手而言,面对面的评审可能是一次非常有益的社交学习经历。遇到任何不明白的地方,都应该留下评论并提出疑问。即使是不熟悉编程的人员,也应有勇气提出那些看似简单的问题;因为这些问题对于挖掘隐藏的知识往往至关重要。
代码评审中可以提出的问题示例:
是否有代码可能没按预期工作?
有没有不清楚为什么要写的代码行?
代码中有没有硬编码的文件路径,导致代码无法在他人系统上执行?
是否存在重复的代码?
是否恰当使用了便捷函数?
代码的结构是否让新手也能轻松找到想要的部分?
文件、变量、函数和类的名字是否清晰明了?
代码是否遵循了合理的编程模式?
代码的用途是什么,有没有写清楚说明文档?这个问题也能帮我们发掘那些没说出来的知识哦!
换位思考,设身处地进行沟通
通常一个团队中有的擅长定量分析,作为数据使用者负责数据分析;而有的则更偏向于定性分析,作为数据生产者参与非结构化数据的收集。希望这两种角色能够协同合作,共同规划数据收集工作。
这与我们和实验室科学家在工作中协同合作的方式相似。让我以此为例来进一步说明。
那么,如何在这两者之间进行有效沟通呢?关键在于具备同理心,更“懂”他人!
对数据科学家而言:要理解实验室科学家面临的实际挑战。例如,在诺华(Novartis)公司时,我曾协助设计了一项实验。在实验中,我提议,在机器人处理的 96 孔板堆叠中,随机安排对照样本的位置,虽然这种做法在统计上可能更为理想,但在实际操作层面却极具挑战性。问题在于,我们通常习惯于铺板的时候,在固定的位置放置对照样本,但这次要求在孔板内随机放置对照样本,这两者之间存在显著的差异。如果完全按照随机原则来安排样本位置,实验室科学家在跨板戳印对照样本时会遇到很大的困难,这无疑会增加他们的工作负担。如果我没有理解这一点,别人可能会认为我脱离实验室的实际状况,进而影响到我与实验室同事之间的合作关系。最终,我们商定了一个折中方案:仅进行一次随机位置安排,这样既保证了足够的空间覆盖,又减轻了实际操作上的压力。
注:孔板是一种细胞孔培养板,96 孔板是其中一种规格的培养皿,即 96 孔
对实验室科学家而言:前期的稳步进展能为后续工作加速铺路。在探索数据的过程中,计算团队有时会因急于求成,用临时拼凑的代码进行分析,忽略了代码的后续复用性。所以,一开始就讨论好未来的数据收集和分析计划很关键,这有助于从一开始就编写出更易复用的代码。给计算团队多一些时间,让他们将可复用的代码单独封装成函数,并做好工作记录,这样当新数据出现时,就能更轻松地实现自动化,整个流程也会更加清晰。
清晰界定不同角色之间的任务交接和成果交付。比如,数据的使用者(通常是数据科学家)和数据的提供者(通常是实验室科学家)之间,数据得符合一些可以通过程序验证的标准,比如表格里的列名得统一规范。数据科学家与实验室科学家需要携手合作,共同设计新实验,确保双方都对实验流程心里有数,意见一致。数据科学家要是明白了数据是怎么生成的,分析起来就能更快迭代。而实验室科学家要是了解了计算流程,就会懂得保持数据格式规范有多重要。
确保您的工作成果能够在任何计算机上流畅运行
一项工作成果应该不仅限于在 Google Colab 或高性能计算(HPC)平台上运行,最好是能够在任何笔记本电脑上顺畅运行。一旦遇到紧急情况,其他人应该能够轻松地在任何电脑上重现你工作的核心内容。而最理想的状态是,只需一条命令,其他人就能在任何电脑上完整地重现你的工作。
这为什么很重要呢?是因为这能让你在合作中更加游刃有余,无需等待他人来运行你本可自行运行的代码,从而消除合作过程中的障碍。同时,这也保证了当你需要暂停工作并在日后继续时,能够顺利继续。此外,这也是实现工作成果可重现性的前提条件。
如何确保您的工作成果能在任何电脑上运行呢?
以下是一些建议:
别把只在你的电脑上能找到的文件路径直接写到硬编码里。你可以从像 SQL 数据库或云存储系统等真实的数据源中拉取数据。
和其他人一起确定这些可靠的数据来源,并且把它们都记录下来。
使用像 conda-lock 或 pixi 这样的工具来生成环境锁文件。这些工具会帮你记住安装了哪些软件包的具体版本,确保其他电脑上的环境设置和你的一样。
利用 Makefile 或 pixi tasks 等自动化工具,创建一个可以通过一条命令(比如 pixi run test 或 make build)就可执行的可重复的工作流程。
清晰记录所有内容,为他人提供明确指导,并减轻新成员上手的认知负担。
总结——我今天的建议
感谢您读到这里!我希望以下几点可以帮助你:
个人工作,井然有序
将心比心,推动协作
工作流程,清晰可见
问答环节
问:在行业中,Jupyter Notebook 和脚本哪个更常用?
答:我们两个都用。Jupyter Notebook 非常适合进行探索性工作或编写包含代码的描述性文档。而脚本则更适合处理一些一次性的任务。
问:如何评审 Notebook ?
答:对于文档风格的 Notebook,最佳的评审方式是进行实时审阅,可以通过电话或面对面的方式进行。由于 Notebook 中的描述内容往往较为复杂,通过实时交流来澄清疑惑和提炼关键信息,能显著提升评审质量。
问:定性研究人员如何帮助定量研究人员?
答:参与本体论的定义。这些定义通常会在后续分析中转化为分类变量。
尽量保持数据收集协议的标准化,但也要预见这些协议的发展变化(特别是在项目初期)。将这些变化通知计算团队,以便他们更新数据处理代码并设计出更具灵活性的方案!
参与本体模型的定义。这些定义在后续的分析中往往会转化为重要的分类变量,为定量研究提供基础框架。
在推进项目的过程中,尤其是项目初期,我们既要维持数据收集协议的标准化,也要意识到这些协议可能会根据项目需求有所调整。因此,每当协议发生变动时,务必迅速通知计算团队,以便他们能及时修改数据处理代码,从而确保数据处理的灵活性与适应性。
和鲸科技,旗下拥有数据科学协同平台 ModelWhale,辐射超过百万数据科学家的人工智能实践社区及数据科学竞赛平台和鲸科赛。以“Connect People with Data”为使命,帮助数据人才融入业务创新,帮助企业打通数据的价值闭环。
您可点击文末阅读原文免费探索 ModelWhale 更多功能~
评论