写点什么

1000 行 Python 代码脚本 bug,或影响上百篇学术论文

  • 2019-10-15
  • 本文字数:2621 字

    阅读完需:约 9 分钟

1000行Python代码脚本bug,或影响上百篇学术论文

《Nature》杂志 2014 年的一篇论文包含了一个 Python 脚本,其中有一个模块是根据文件的排序返回值,但 Python 并没有定义查询的文件顺序。这意味着在不同的操作系统上,该脚本返回的值是不同的。这个 bug 直到最近才被发现,而这篇论文被引用了 158 次,如果这些论文使用了相同的脚本那么文章的结果很可能是错误的。

藏在《Nature》论文里的脚本 Bug

《Nature》杂志 1869 年创刊于英国,是世界上最早的国际性科技期刊,涵盖生命科学、自然科学、临床医学、物理化学等领域。对于学者而言,论文能被《Nature》收录是一种荣耀。许多自然科学、物理化学等领域的学者,在论文创作中也会使用各种编程语言或工具进行数据收集、分析等工作。


2014 年,《Nature》上发布了一篇名为《A guide to small-molecule structure assignment through computation of (1H and 13C) NMR chemical shifts》的化学论文,该论文试图找到对癌症有效的化合物。论文中包含了一个使用 Python 语言构建的脚本。


最近,夏威夷大学的一位研究生 Yuheng Luo(中国人)发现该脚本中存在一个 Bug:脚本中有一个模块是根据文件的排序返回值,但 Python 并没有定义查询的文件顺序。他在导师 Rui Sun(中国人)的指导下使用该脚本验证结果,结果发现无法匹配论文作者的结果。在测试期间,他们发现在 Mac、Windows、Linux 等不同的操作系统上返回的结果是不同的。


他将研究报告写成了论文,发布在了《Organic Letters》期刊上。5 年时间过去了,这篇包含错误脚本的《Nature》论文已经被引用了 158 次,这意味着如果这些论文使用了相同的脚本那么文章的结果很可能同样是错误的。对于学术论文来说,这是影响很严重的 Bug 了。


Yuheng Luo 在论文中写道:


原始脚本中这个简单的小错误对大量论文的结论造成了影响,这些论文涉及的话题非常广泛,很难从已发表的信息中得出结论,因为研究人员很少会提及其所使用的操作系统。使用这些脚本的作者当然应该再次检查他们的结果,以及使用 [补充资料] 中修改过的脚本得出的任何相关结论。


目前尚不清楚这种故障可能会影响多少篇论文,研究人员通常不会公开他们用于分析的操作系统,因为它应该无关紧要。根据数据显示,2014 年的这篇论文已被浏览过 1,900 余次,并被其他 158 个研究所引用。但是,并非所有引用该论文的研究都可能使用该脚本。


新西兰惠灵顿维多利亚大学的化学讲师罗伯·凯泽斯(Rob Keyzers)在今年发表的一项研究中引用了该方案,他在一封电子邮件中说,他不知道该 Bug 的存在。他补充说,他并不“过度担心”自己的结果,因为他的团队没有使用包含小故障的脚本。他说:“我当然会仔细检查我们的数据,以确保我们不会提出任何不当的论述。”

学术界的代码问题大讨论

长久以来,学术界和工业界都是互相独立的两个世界。学术界更多钻研于技术的进步与面向未来的研究,而工业界则更多关注技术的落地与商业化。学术界和工业界一直以来都很少合作,此前 AI 大神 Yann LeCun 也曾呼吁学术界、工业界紧密合作以加快 AI 的发展。


但事实上,学术界跟工业界的区别依旧明显。此次事件在 Reddit 上也引起了广泛讨论,不少用户表达了对学术界代码问题的困惑,这也从侧面印证了两个世界之间的缺乏理解与互通。

学术论文中的代码缺乏同行评审吗?

“由于很少提及操作系统,因此无法从发布的信息中轻松解析”。


本文中 Python 脚本出现的 bug 背后,折射出了这样的问题。ID:compsky 的用户十分困惑,同行评审本应是学术论文发表前的一个重要因素,但他所看到的几篇论文很少有关于如何重现他们声称已运行的程序的说明。


ID:Objective_Mine 的用户跟帖评论道:


我读过许多 NLP 相关内容的论文,其中描述了一种算法,但未提供源代码。你还必须至少猜测一些细节,并且想要做到复制精确的实验是不可能的。任何依赖实验而不是形式证明的东西都应该真正具有可用的确切程序,这背后就是源代码和环境细节。

科学家是糟糕的程序员

代码质量通常不是学术界关注的重点。一般意义上,学术论文中的代码唯一消费者就是研究人员,所以诸如稳定性和易用性之类的东西并不比简单地完成工作更重要。此外,研究代码必然是实验性的,并且规范变化比其他类型的代码更加剧烈,所以最终的代码将会有许多变更移植到它上面。


但最重要的因素只是因为学者们不认为自己是专业程序员(确实也不是),编程只是他们工作的一小部分。因此,根本没有能够维持代码审查过程的护理或激情水平。


在这样的情况下,计算机学术界也好,其他学界需要使用计算机代码的学者也好,代码质量通常达不到工业级的标准,也常常因此为工业界的程序员所惊讶。

如何看待科技公司从学术界挖角现象?

从前,学术界的大牛们分布在各个知名的研究院里:微软亚洲研究院、贝尔实验室、雅虎研究院等等不一而足。研究院通常来说不差钱,比如贝尔实验室长期以来总是用不需为经费发愁这一条理由来吸引优秀的科学家到该实验室工作。


但在近两年,科技公司越来越多地开始从学术界挖角,并成立自己的实验室网罗天下英才为己用。比如吴恩达加入百度(已离职)、李飞飞加入谷歌(已离职)、Yann LeCun 加入 Facebook(已离职)、颜水成加入 360(已离职)、贾扬清加入阿里巴巴、贾佳亚加入腾讯等等。


2017 年 10 月云栖大会上,阿里巴巴高调宣布成立达摩院,进行基础科学和颠覆式技术创新研究,并将在未来 3 年投入 1000 亿元进行基础科学研发。而在阿里以外,腾讯也有自己的优图实验室、玄武实验室,360 也有自己的研究部门。


为什么科技公司纷纷从学术界挖来众多大牛,收归己用?理由可能有很多,但最共通的一点就是:利用知名学者的名人效应,打造公司的技术品牌,凭着多年在学术圈积累下来的名望与成绩,为公司招徕人才,组建一支技术强军。


但这背后存在一个悖论:研究院通常需要大量的经费支持,但科技公司却是以盈利为目的,如果研究院光有研究没有产出,其存在的地位会非常尴尬。阿里巴巴成立达摩院时,马云就曾直言:达摩院未来要自己挣钱,还要比阿里巴巴活得更久。


InfoQ 的一位消息人士给出的观点,更是工业界技术人的一个普遍观点:


腾讯某实验室在研究的东西,我们自己团队也在搞,而且我们造出来的轮子性能还比他们的更好。每年花那么多钱养这么多博士、教授,最后做出来的东西还不如工程团队自己的。


在你看来,科技公司和学术大牛之间的关系应该是怎样的呢?科技公司的研究部门地位尴尬吗?

作者介绍

小智,InfoQ 编辑。关注架构、开源、泛互联网科技领域,个人公众号小智的互联网观察,个人微信:ryantz,添加请备注来意。


2019-10-15 10:077086
用户头像
小智 让所有人认同的文字称不上表达

发布了 408 篇内容, 共 395.5 次阅读, 收获喜欢 1983 次。

关注

评论 1 条评论

发布
用户头像
OMG
2019-10-21 10:09
回复
没有更多了
发现更多内容

面试官:怎么保证Kafka的消息不丢失

做梦都在改BUG

Java kafka 面试 消息队列 消息中间件

Apache Hudi 在袋鼠云数据湖平台的设计与实践

袋鼠云数栈

数据湖 Hudi Apache Hudi

软件测试 | 角色介绍

测吧(北京)科技有限公司

测试

浅谈电解电容在电路设计中的作用

华秋PCB

电路 元器件 PCB PCB设计 电解电容

JMeter笔记8 | JMeter关联

测试 Jmeter 性能测试 自动化测试 接口测试

分解GameFi链游游戏软件系统如何开发?

Congge420

零信任之访问代理

Flomesh

Pipy

财务共享真的有价值吗?

用友BIP

财务共享

ChatGPT聊天系统开发基于GPT-3.5架构

Congge420

Python从0到1丨了解图像形态学运算中腐蚀和膨胀

华为云开发者联盟

Python 人工智能 华为云 华为云开发者联盟 企业号 5 月 PK 榜

开发者福利来了 | 京东云全系核心产品公开比价:我们承诺,买贵就赔!

京东科技开发者

数据库 云主机 京东云 云主机厂商 企业号 5 月 PK 榜

奇妙JVM(一):Java程序员必须知道的神秘黑箱

xfgg

Java JVM

MaxCompute 发布智能物化视图,CU 算力节省 14%

云布道师

快速易用pdf编辑器:PDF Expert 中文激活版

真大的脸盆

Mac Mac 软件 PDF编辑 编辑PDF文件

大型企业建设财务共享中心需要重视的5个核心要素

用友BIP

财务共享

软件测试 | LDAP常见操作指南

测吧(北京)科技有限公司

测试

软件测试/测试开发丨Web自动化测试,强制等待与隐式等待

测试人

软件测试 自动化测试 测试开发

理解JVM工作机制(三)对象的内存布局

Geek漫游指南

Java JVM

在 Kubernetes 上实现高速应用交付

NGINX开源社区

nginx Kubernetes

财务共享中心成功建立!用友帮助河南水投集团打造财务效率新高地

用友BIP

财务共享

移动应用架构与React Native、Flutter的关联

Onegun

flutter 移动应用 ReactNative 软件应用架构

阿里大佬随手甩出一份覆盖全网的微服务架构笔记,让我涨薪60%

程序知音

Java 微服务 spring-cloud 后端技术 spring-boot

【技术】多端能力服务统一是一种关键的技术和架构

没有用户名丶

实力上榜!ONES 荣获深圳市「专精特新」企业认定

万事ONES

透明LED显示屏与常规屏的区别

Dylan

LCD1602液晶显示屏 显示器 LED显示屏

火山引擎DataLeap联合DataFun发布《数据治理知识地图》

字节跳动数据平台

数据治理 数据开发 数据库开发 数据研发

NFTScan 正式发布 Bitcoin NFT 浏览器,支持 Ordinals NFT 和 BRC20 资产

NFT Research

Bitcoin NFT\

等保和网络安全法的关系是什么?怎么理解?

行云管家

网络安全 等保 等级保护

浅谈NFT盲盒游戏系统开发原理

Congge420

【云计算】谷歌云是国外的吗?是公有云还是私有云?

行云管家

公有云 私有云 谷歌云

1000行Python代码脚本bug,或影响上百篇学术论文_文化 & 方法_小智_InfoQ精选文章