为了攻克这个难关,法国国家信息与自动化研究所(French National Institute for Research in Digital Science and Technology,INRIA)的计算神经科学家兼程序员Nicolas Rougier和法国国家科学研究中心(French National Centre for Scientific Research,CNRS)的理论生物物理学家 Konrad Hinsen 在 2019 年共同构想了一个解决方案:“十年可重复性挑战”(Ten years reproducibility challenge)项目。这个挑战项目鼓励科学家们重现至少十年前他们发表的文章中的代码。参与者还需在 2021 年 6 月举行的研讨会上讨论他们的收获。成功的案例会刊登在 ReScienceC 杂志上。ReScienceC 是 Rougier 和 Hinsen 在 2015 年创办的杂志,用来记录研究人员重复已发表论文的代码的情况,以此统计研究的可重复性。
然而,难点在于让它在真正的苹果 II 电脑上顺利运行。硬件不是问题,Rougier 办公室有一台苹果II电脑。但由于苹果 II 电脑诞生的年代还没有 USB 数据线和互联网,现代电脑又无法连接老式磁盘驱动器,Rougier 不得不用定制硬件(custom hardware)和老式软盘(vintage floppies)来帮助电脑加载代码。如同考古挖掘一样,虽然过程曲折,但 Rougier 还是让 30 多年前的代码得以重见天日。
虽然不少参与者发现,当年能顺利运行的代码现在频频报错;但也有轻松化解问题的大佬。CNRS 的生物物理化学家 Charles Robert 就是其中一位。1995 年,他曾在笔记本软件上运行 Mathematica 来为真核生物染色体的 3D 结构建模。当年在运行时,Robert 的代码出现了结构缺陷以及代码片段顺序混乱等来自笔记本软件的问题。如今,再次面对当年的代码,他通过将代码分解成模块进行测试避开了这些问题。他还利用版本控制(是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一)的方法来追踪代码的变更,记录每个版本的软件运行的结果。
DiCosmo 和 Robert 的例子或许可以给致力于提高代码长期可重复性的研究者们一些启示。虽然难以保证多年前的古董代码一定能再次运行,但还是可以在平时编写代码时采取有效的策略来增加成功的可能性。具体策略如下: