作者花大量时间从事软件开发,屡次被问及软件为何重要。不少人认为软件并非科学,不过是追求结果与论文过程中的时间陷阱,秉持发表至上。然而作者认为软件至关重要,开源软件就是科学,或至少是计算科学。这篇帖子将说明科学家为何必须坚持科学方法,以及这为何意味着要开发开放且可复现的软件。
正文
TL;DR 我主张现代科学等同于开源软件。下面说明为什么、为什么重要,以及你接下来可以(也应该)做什么。
你为什么关心(开源)软件?——每个人
我大量时间花在软件上。无数次被问为什么软件重要。人们说,软件不是科学;它是时间黑洞,是在追求真正重要的东西——结果,以及学术界里的论文——时要赶紧略过的东西。不发表就出局。
可我认为软件重要。事实上,我认为开源软件就是科学,至少是计算科学。为什么科学家必须坚持科学方法,而这又为什么意味着要做开放、可复现的软件。这不容易,挑战学术界不少潮流,但是朝向更好科学的重要一步,且不必把我们都逼疯。
什么是科学?
维基百科说:科学是一门系统学科,以可检验的假设和对宇宙的预测来构建和组织知识。随便拿一篇 arXiv 论文,它显然包含某种“知识”。但它是否贡献了可检验、可系统组织的预测?你能检验它吗?你能把它系统化吗?
答案从不是干脆的“不”,但很难。你很少能直接接触到那些知识。
好的解释——内在模型
如果有机体在脑内携带外部现实和自身可能行动的“小尺度模型”,它就能试验各种替代方案……并以更充分、更安全、更胜任的方式应对面前的紧急情况。
Craik 在《解释的本质》中提出,我们用现实的小型模拟来解释和预测外部世界。今天这似乎显而易见,但它凸显了追求科学的根本目标:作为行动主体,你改进自己的内在模型,直到能做出比以前更好的预测。内在模型是关键:如果 arXiv 论文不能帮助读者预测世界,它就不是科学。这就是计算可复现性重要的原因——软件是我们编码和分享预测模型的方式。
什么是可复现性?
按维基百科,仅展示结果不够。结果必须(1)系统,(2)可检验。
论文可能太难理解,或因其他原因难以接近。这不意味着没有科学洞见——读者也许第二、第三次读时能系统化。它意味着你具体无法把想法拿来、检验它、用它改进世界模型。
可复现性不只是重复结果。它是能拿科学想法嵌入自己的内在模型,调整、建立其上,或因为它降低可预测性而丢弃它。
如果一个想法不可复现,发现就无法扩展,因此无用。
做个思想实验,把“软件模型”换成“数学模型”。就像我们不会接受一篇物理论文说方程预测 X 却不展示数学,我们也不应该接受隐藏方法的(计算)科学。
有多少领域被拖后腿,有多少人的职业生涯因为一个有 bug 的程序被搅乱?——Greg Wilson
软件在现代科学中无处不在。从新冠模型到搜索算法到实验室协议,都建立在别人写的软件上。研究者很忙,不会翻遍所有软件依赖来验证正确性、理解实现细节,或检查可能推翻结果的错误。
于是,科学结果依赖软件。软件错,科学就错。软件 bug 已经导致许多撤稿。
这也还好,因为某个时刻我们不得不信任并依赖别人的工作。为此,软件必须可靠。
为什么开源?
软件需要:
- 可复现,即能执行,也能修改;
- 可靠,即结果持续可信。
可修改性对科学重要,正如方程对科学预测重要。可靠性关键,因为我们要知识系统性改进,而不是偶尔才灵的脆弱、片面结果。
开源软件给了我们这些。我们能改代码、按需改造(想想 Hugging Face 模型),也能迭代改进。它已经产生数万亿美元价值,还有很大空间。
当然,开源不是完美解药。有知识产权和安全顾虑,bug 仍会出现,稳定性可能有问题。但至少缺陷是公开记录,可以修正和改进,就像科学理解。从这个角度看,可以说开源软件就是科学方法——只不过在模拟中。
未来科学的愿景
如果接受这些前提,可以问:真正开放的计算科学会是什么样?
每个结果都即时可复现。 你读论文说新药让症状减少 30%,点一个链接,就在浏览器里看到完全相同的分析运行。数据处理、统计检验、可视化在几秒内用作者所用同一环境执行——通过可复现容器完美保存。
科学软件像维基百科一样演化。 气候模型不是单个实验室孤立开发,而由全球社区维护。肯尼亚一位研究者发现大气湍流计算中的 bug,修复立即传播到全世界的气候模拟。模型持续改进,而不是在学术孤岛中衰败。
发现速度加快。 每个研究者不再从头建,而是站在巨人肩上,其工作不仅可读,还可运行、可修改。科学进展以前所未有速度复利增长。
对科学的信任增强。 当气候模型、经济预测、医疗建议建立在透明、可审计的代码上,公众信心增长。科学传播也改善,因为模型本身成为对话的一部分——不只是结论。
这不是乌托邦幻想。每一块都已存在——开源社区、可复现环境、协作开发平台。只需把它们塑造成数字时代科学如何运作的一贯愿景。
问题不是未来是否可能,而是我们多快能建成。
现在做什么?
我认为在计算机化世界里,开源软件是“科学”的必要条件。软件是可执行的数学模型,应被摆到高得多的优先级。
还有工作要做,你可以这样帮:
分享并记录你的代码
- 没有代码的论文科学性更低,因为更难在洞见上继续建造。理想情况下,任何主张都应由可复现代码支撑。从第一天就用代码,并始终分享。
写稳定的代码,用 NixOS
- 代码应可靠并永久运行。这意味着依赖和环境保持恒定。最好用可复现环境。NixOS 正迅速成为最大最好的工具,保证代码即使 100 年后也以完全相同方式运行。Docker、Conda 等类似工具已经更好,但 NixOS 保证更全面。
在现有工具上建造,而不是自己造
- 要让共同科学知识库改进,需要跨平台工具。对神经形态计算等小领域尤其如此,最近一篇 Nature 论文指出开源软件是扩展的关键。看看 Open Neuromorphic 软件指南,找找接近你工作的库。
提拔做软件的学者
- 代码极其重要,学术晋升应重视软件贡献。
科学革命成功,是因为坚持透明、可复现和持续审视。开源运动为软件体现了同样原则,但还有更多工作要做。
你会帮助让软件科学化吗?
评论
多数人认同"科学应当开放",但反对把它直接等同于开源软件;分歧沿两条线展开——一条是概念上的(开放数据、开源代码、科学方法是三件事),另一条是复现为什么做不到,究竟是工具链问题,还是学术激励与出版体制的问题。
现代科学应当等同于开源软件,复现要做到一键完成
- 原文主张:读到"某药降低症状 30%"时,点链接就能在浏览器里用作者当年的环境跑完数据处理、统计检验与可视化,靠可复现容器完整保留下来。(少数人) > 我认为现代科学就是开源软件的同义词。(@jegp)
科学是开放的,但它不是软件,软件也不是科学
- 反对这个等式:共享数据、共享代码与科学方法本身各有规范,用一个等式概括会把三者都讲糊。(较多人) > 科学是开放的,但科学不是软件,软件更不是科学。(@random3)
真正的拦路虎是数据,不是代码
- 代码常常脱离数据就毫无用处,而不少学者把数据当成会下金蛋的鹅,不肯交出来;也有正面例子,比如专门发表开源科研软件的 Journal of Open Source Software。(较多人) > 很多学者害怕把金鹅送人,而软件离开数据往往毫无用处。(@willtemperley)
期刊政策早就写了,实践里几乎没人做到
- Nature 等期刊的编辑政策已包含"数据可用性"以及"计算机代码和算法的可用性与同行评审"条款,但落到具体研究上,往往连一个可用的仓库链接都拿不到。(较多人) > 我试着复现某些单细胞 RNA 测序处理流程时,实际根本拿不到一个 GitHub 链接。(@flopsamjetsam)
- 也承认很多研究者的代码确实不堪入目,指望开箱即用过于乐观,但朝这个方向努力值得肯定。
病根在学术激励,不解决它一切免谈
- 低质量研究能顺利发表,耗时长、常揭示出热门结论依赖 p 值操纵的高质量研究反而被卡在评审里;所谓隐私顾虑大多是方便的借口,多数数据集去标识化并不困难。(较多人) > 除非把现在的学术界推倒重来,或者让科学和现代学术体制彻底分开,这件事永远不会发生。(@D-Machine)
用公共经费做出的研究就该公开,不该再向出版巨头付第二次钱
- 纳税人已经为研究付费,却还要再向私营出版商付费阅读,这与科学的本意相反;公共资助应当附带永久公开访问的条件。(较多人) > 纳税人已经为研究付过钱,凭什么还要再向爱思唯尔这样的实体付费?(@shevy-java)
「open」这个词已经被技术圈用坏了
- 有人主张干脆禁止技术人使用「open」;更准确的说法是自由意义上的 free,而不是免费或可看见。(较多人) > 把「开放」换成「自由」意义上的 free。(@Muhammad523)
复现应当基于虚拟机规范,而不是复制整个环境
- 与其完整复刻环境,不如把可复现程序建立在 JVM 或 WebAssembly 这类虚拟机规范之上:更可行,也不会把软件生态进一步推向中心化,别人可以用任意操作系统与实现,甚至自己写一个。(少数人)
NixOS 的「百年保证」被当成事实抛出
- 声称它比 Docker、Conda 提供更全面的保证却不论证;它本身没有标准化,很难保证十年内不被后继工具或 Guix 取代。(少数人)
软件是数学与物理证明的展示台
- 把定理写成代码、验证输出符合预期,本身就是有说服力的证明方式;DeepMind 在疾病被诊断之前就做出预测这类进展,被视为 AI 该被用来做的事。(少数人)
资金来源不同,开放程度自然不同
- 开源软件常靠个人投入时间,科学发现则通常由纳税人或企业出资,两者的经济激励不是一回事。(少数人)
有价值的补充
- Journal of Open Source Software 是专门为开源科研软件设立的期刊,说明开放科学并非没有落地渠道。
- Nature 作品集的报告标准中,明确写有「数据可用性」以及「计算机代码和算法的可用性与同行评审」,可作为要求复现材料的政策先例。
- 可复现性存在路线之争:完整复制环境(容器、Nix)对比基于虚拟机规范的最小分发,后者更轻、更去中心化,但需要生态接受统一规范。
- NixOS、Docker、Conda 的保证强度可以再辩:NixOS 覆盖面更广,却没有标准背书,长期存续性存疑。
- 单细胞 RNA 测序流程是「政策有、执行无」的典型案例,可作为检验复现要求是否真的落地的试金石。