学术论文中的代码


34

在我的学术生涯中,我读了很多关于各种计算机科学主题的学术论文。其中许多涉及一个实现和对该实现的一些评估,但是我发现很少有人实际发布他们使用的代码。

对我来说,包括实际实施的好处将是巨大的,即:

  • 扩大信任度或可复制性(自己进行测试!)
  • 澄清歧义(特别是对于由非母语人士撰写的论文)
  • 重复使用应用程序代码

那么,为什么这么少的论文实际上包含任何代码呢?

我认为,本文背后的组织可能打算在自己的应用程序中利用该实现,因此不希望发布它,但是如果是这样,为什么还要撰写该论文?


14
那么,为什么这么少的论文实际上包含任何代码呢?因为审阅者出于某种原因可以容忍它,即使没有充分的理由隐藏实现也是如此。我们是审阅者,我们可以更改它。
Jukka Suomela 2011年

14
我认为这必须因子字段而异。我所熟悉的几乎所有Theory B东西(尤其是Haskell,Agda,有时还包括Coq相关的东西)都包含已发布的代码,有时甚至是附录,或者更好地嵌入了本文。最初,许多来自ICFP的论文都是作为扫盲计划编写的,其全部内容由作者发表。反过来,相当数量的结果导致提取了要分发的库。在其余的论文中,相当一部分从来​​没有代码开始。
2011年

8
研究结果应该是开放的(免费的),代码也应如此。根据某些定义,科学仅在假设是可证伪的且实验可重现的情况下才会发生,因此您可以辩称,基于未发布的代码的出版物不是科学著作。
拉斐尔

4
@Raphael释放相同的代码只会帮助建立可重复性,而不是可重复性。在完全相同的实验中运行完全相同的代码几乎是独立的。科学需要可重复性,而不是可重复性。
Mark Reitblatt 2011年

2
我在考虑的结果是谈论代码属性而不是结果(当然,在这种情况下,您是对的)。说,作者对提出的算法的某些实现进行了实验,并通过检查图(它们称为“算法工程”)来比较运行时。在这里,代码提供了可重复性。
拉斐尔

Answers:


17

这是我在研究生院读到的David Donoho和Jonathan Buckheit一篇颇有争议的文章,从小波研究人员的角度确切地涉及了这个话题:

“ WaveLab和可再现的研究”

他们的想法更加雄心勃勃,他们提供了代码,以方便的Matlab软件包重现论文中的所有图形。

我非常喜欢他们的想法,但我认为问题很明显。

(1)这是额外的工作(清理代码,使用户界面至少基本化,编写一些文档,在人们不可避免地遇到问题时提供一些支持)

(2)大多数会议/审阅者并不是真的要求/期望

但是我不禁感到,如果期望以可用的格式公开提供任何出版物中使用的代码和数据,CS研究社区将受益。我承认即使涉及的工作量是可以控制的,我自己也没有这样做。我认为在没有外部推动的情况下,很难让自己付出更多的努力。


7
我认为,至少对于网站而言,对(a)伪代码或(b)代码的期望对CS研究社区非常有用。并非所有的研究代码都具有很高的可用性,而且我不确定是否可以提供错误的代码是否是一件好事。
彼得·索尔

1
我已经与出于类似原因而未发布其代码的论文作者进行过交谈-在这种情况下,如果有人真的尝试执行此操作,他们会感到内。
sclv 2011年

6
代码不需要是好的,干净的或可重用的。但是它必须具有可复制性才能被视为“科学”。Nick Barnes(2010)在自然界中有一篇不错的文章。发布您的计算机代码:足以论证这一点。
David LeBauer 2011年

16

如果您在工业实验室工作,那么获得批准发布的论文要比获得批准发布的代码容易得多(即使论文包含重写代码所需的所有信息)。怪罪官僚。


1
虽然这当然是正确的,但我想知道,由学术研究人员推动的文化的适当改变是否会使工业研究人员施加压力管理以允许代码发布。毕竟,我怀疑即使是制定纸质释放政策也必须
有所作为

6
至少在MSR,发布研究代码非常容易。实际上,使用外部代码更加困难,因为MS在遵守软件许可方面非常谨慎。由于许多与纸张相关的代码滴都没有显式的许可证文件,因此可能有点烦人。通常,只需将电子邮件发送给论文作者即可解决问题,但您可以通过记住在公开代码发布中保留OSI批准的许可证来使工业研究人员更容易。
Neel Krishnaswami

2
@Neel:您的意思是“ OSI批准的,但不是 GPL”吗?
Radu GRIGore 2011年

3
GPL通常还可以-我们很多人都使用Emacs!:)我们不允许使用Affero GPL软件,因为它的互惠条件适用于与该软件进行交互的任何人(即,它关闭了Web服务漏洞),并且MS不想冒险使用某些内部服务器的可能性运行AGPL代码可能会意外地面向公众。但是,即使是AGPL也比根本没有许可证要好,因为选择许可证实际上会使共享的条款明确。
Neel Krishnaswami

13

从评论迁移和扩展:

我认为这必须因子字段而异。我所熟悉的几乎所有Theory B东西(尤其是Haskell,Agda,有时还与Coq相关)都包含已发布的代码,有时甚至是附录,或者更好地嵌入了本文。首先,来自ICFP的大量论文都是作为扫盲程序编写的,其全部内容由作者发表。反过来,相当数量的结果导致提取了要分发的库。

在其余的论文中,相当一部分从来​​没有代码开始。其中,可能有两个主要原因。首先是主要内容是证明树,带有关联的健全性证明的键入规则等的论文。其中,机械化元理论的发展鼓励至少一些作者在他们选择的定理证明者中提供代码(请参阅Weirich在POPLmark上的幻灯片:http//www.seas.upenn.edu/~sweirich/talks/cambridge-09。 pdf格式)。其次是那些源自Bird-Merteens东西(banannas&co。)的东西。这些通常无需太多工作即可翻译成功能语言。但是,我怀疑通常都缺乏通用性,并且处理语法和键入的具体问题会不必要地使事情复杂化,并使遵循等式推理变得更加困难。

我想证明我的观点,所以对ICFP 2010的前两天做了一个粗略的计数。在标准论文(即没有经验报告或邀请的演讲)中,有21篇中有12篇提供了某种代码。3个提供了Coq(第4个声称提供了部分证明,但未公开)。三名哈斯克尔。三人提供阿格达。一个提供了Scheme,一个提供了Caml,一个提供了Twelf。(请注意,有些提供的代码用于多个证明助手,或者用于形式化和实现)。在其余的论文中,有一些工作的抽象度足够高,以至于在证明助手中实现本身就是一张新论文,而我怀疑还有更多的工作可以在证明助手中实现。标准技术,但是这样做肯定会花费大量工作。


12

您认为应该发布代码,但是您问为什么论文不包含代码。这是两件事。

在大多数情况下,根本没有足够的空间来发布大量代码。在我的研究领域(图像处理)中,伪代码或体系结构信息通常更有价值,并且我从来没有发现自己由于论文中缺少代码而陷入困境。它通常留给掌握文章的读者作为练习。

然而,有许多代码可用于说明论文。作者通常都有一个网页,即使审阅者没有机会尝试检查代码本身,自然选择似乎也能很好地工作,而未发布代码的作者被引用的次数要少得多。


8

这可能已经在某个时候问过了,但是我一直对此深有感触,所以我会给我两美分。我已经在SAT社区工作了多年(不再有)。大多数研究人员很少发布他们的代码。该论文与该算法一起发表,但很少见到与该论文一起发表的SAT解算器(MAXSAT求解器)等的实际代码。

现实情况是,仅使用论文中发布的代码,您将永远没有机会重现作者的实验。不仅是因为已发布的代码不完整(当然),还因为甚至已发布的伪代码也很少将半直接转换为实际实现的内容。

其背后的原因很难知道,并且可能因研究人员而异,但多数情况下有两个方面。

  • 首先,研究人员倾向于在单个求解器中连续工作,之后在同一求解器上发表论文,并逐步添加新功能,从而转化为新版本的求解器。有一种不健康的想法,即竞争将使您的求解器扩展和发布论文而没有给予您应有的荣誉(意思是,共同作者),从而使用您的求解器来进一步发展自己的职业。

  • 其次,某些代码(与所有软件一样)确实是匆忙编写的。半熟的脚本。未经测试的功能,等等。通过发布此代码,研究人员将感到自己在为自己感到尴尬并损害其声誉。

我给您提供ACM的最新参考资料:http : //cacm.acm.org/magazines/2011/5/107698-the-importance-of-reviewing-the-code/fulltext


7

从历史上看,科学论文必须被印在纸上,期刊被运往世界各地。每增加一页页面都会增加大量成本,因此文章受到长度限制,即使是简单的工作代码也通常比非正式描述占用更多空间。

今天,没有充分的理由不在任何引用算法的文章中包含代码。

放弃诸如pdf和postscript之类的面向打印的格式,转而使用更具语义意识的格式(带有MathML的HTML或Mathematica的开源版本),可能也很有用。


8
前两个段落为+1,最后一个段落为-1。当您从冰冷的死人手中撬起它时,可以拿走我的LaTeX。
Jeffε

2
现在有很多工具可用来进行识字LaTeX编程...
sclv 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.