是的,应该进行基准测试。我以编辑、作者和审稿人的身份提出此声明。下面,我稍微夸张地代表这些角色的立场。
但是,让我先强调你的论点。除了以下声明
基准测试没有说明算法 A 与算法 B 的内在速度——它只是告诉我们算法 A 的实现恰好比算法 B 的实现快。
[...] 它是在做出断言(A 比 B 快),而事实上这样的断言完全取决于代码作者的编码和优化能力。
我认为您可能同意甚至隐含地提出额外的主张:
如果算法 A 具有明显的算法 B 的理论优势,那么在实践中没有必要将两者进行比较。例如,如果算法 A 在 O(N) 时间内运行,而算法 B 在 O(N^2) 时间内运行,那么比较它们是没有意义的。
你会宁愿:
- 生活在一个作者实现他们的算法并使他们的代码可供普通人使用的世界中?
- 还是您更喜欢生活在一个作者取得“出色”进步但从不费心编写代码的世界中,将其留作“读者练习”?
我更喜欢第一个世界。当我遇到问题时,对我来说最好的办法是查看文献,找到带有 Github 存储库链接的清晰文章,然后去下载注释良好的源代码以用作库我的工作。可能需要几轮理论才能达到这一点,但我认为这是一个客观上更好的世界状态。
作为编辑,我如何创造这个世界?通过要求作者连同他们的论文一起提交代码。
作为作者,我如何创造这个世界?通过使我的代码可用并获得引用。
作为审稿人:通过建议修改和拒绝没有实现的论文。
另一个问题。你会宁愿:
生活在一个很清楚应该使用哪种代码的世界中。
在这个世界中,每个作者都声称他们的代码是最好的代码,并且将其作为“读者练习”来验证这些主张。
我更喜欢第一个世界。
作为一名编辑,我收到的每篇论文都声称比任何其他论文都更好地解决了 X。我的工作是保护你的时间,作为抵御一波 BS 的第一道防线(相反:通过帮助人们看到好作品来保护你的时间)。有时这很容易。作者减少了O(N2)解决方案O(N). 其他时候一切都是O(N).
在后一种情况下,我有几个选择:接受每一篇写得很好的论文,声称由于理论上的原因他们的工作更好,拒绝所有新论文,因为现状显然足够好,或者要求作者进行基准测试。
最后一个选项让作者承担举证责任以支持他们的主张,重要的是,它鼓励他们编写性能良好的实现,因为他们知道我将要求未来的作者将他们的工作用作基线。
因此,通过不断地要求进行基准比较,我鼓励作者 (a) 实现他们的代码,(b) 将他们的实现与现状联系起来,以及 (c) 限制他们对自己工作所做的声明。
作为一名编辑,我可以要求作者重写其他人的代码以进行“公平”比较。但我不能相信他们是公平的:他们没有动力去做这项工作,很可能会错过一些东西。因此,我只要求改进新工作。如果较旧的作品没有得到正确的实施细节,那对他们来说太糟糕了。
作为一名编辑,我是一名志愿者。我工作过度了。我每周收到几十篇论文。如果有一种简单的方法可以确定它们是否符合进一步出版的标准,那不是很好吗?
作为审稿人,我更喜欢第一世界。我是一名志愿者。我工作过度了。我想做一个名义上的好工作,但我没有时间或动力去做一个伟大的工作。等等,有基准吗?问题解决了。
作为一个作家,我也更喜欢第一世界。我背景部分的每篇论文都声称它是有史以来最好的论文。为了将我的工作与喧嚣的海洋区分开来,我使用基准以清晰且令人信服的方式证明我的主张是真实的。
tl;dr 编辑、审稿人和读者都被激励想要基准。作者也应该如此,但他们有利益冲突,因为他们希望通过最小化每个出版物的工作来最大化他们的出版物数量。编辑和审稿人提供了作者需要做正确事情的借口。
你说得对,R 让编写缓慢、蹩脚的代码变得容易。但这正是基准测试很重要的原因:它是我们提高性能的唯一机制。