“实践研究”专栏结合了 数字图书馆(世界上最大的计算机科学研究集合)的资源和 会员的专业知识。在每一期“实践研究”专栏中,专家们都会分享一份关于集中且面向实践主题的精选论文集。
本期“实践研究”专栏特别收录了由 John Regehr 精选的内容,他将带领我们回顾学术计算机科学研究领域中的伟大辩论。如果您认为口水战仅限于 Usenet 邮件列表和 Twitter,那就再想想:学术文献中充满了关于文件系统、操作系统内核设计和形式化验证等方面的戏剧性、引人入胜且激烈的辩论。请尽情欣赏!- Peter Bailis
科学通常被描绘成一个充满冷冰冰的逻辑和确凿事实的世界,但作为人类,我们很难将情感和偏见排除在外——无论手头的问题是无关紧要的(“冥王星是行星吗?”)还是威胁到我们生存的(“我们能阻止全球变暖吗?”)。从历史上看,正如伽利略与罗马宗教裁判所的遭遇所表明的那样,离经叛道可能会产生非常严重的后果。最近的科学辩论往往比较平静,但站在错误的一方仍然可能对职业生涯产生改变性的影响 (http://www.mcfarlandbooks.com/book-2.php?id=978-0-7864-6301-5)。计算机科学,也许是因为它年轻且资金充足,似乎相对没有真正的分裂,但它仍然激发了充满活力的辩论。
计算机科学没有撤稿的文化,而且在任何情况下,许多辩论都不是关于导致撤稿的那种错误。有用的辩论,我们可以从中学习的辩论,是那些双方的观点都以书面形式公开可查的辩论。这些是宝贵的教学资源,我有时会将它们作为阅读材料分配给我的学生。它们展示了科学中常常被掩盖的重要部分——学生们很高兴看到事情并不像老师们经常试图让它们听起来那样是非分明。尝试弄清楚谁对谁错是有用的。或者,有些辩论更多的是关于个性,还有一些辩论的特点是研究人员基于他们不同的假设和观点而各说各话。
早期的辩论之一,现在感觉有点古怪,始于 Edsger Dijkstra 发表的 Go-to 语句被认为有害 (1968),该文反对编程语言中非结构化的控制流。后续文章包括 Goto Considered Harmful Considered Harmful 和 Goto Considered Harmful Considered Harmful Considered Harmful (1987)。
我最喜欢的公开辩论之一是关于 N 版本 编程:一种软件开发方法,其中并行运行规范的多个实现,并使用投票来确定正确的结果。如果独立的实现具有独立的缺陷,则此方法将大大提高软件的可靠性。 John C. Knight 和 Nancy G. Leveson 发表了一篇论文(1986 年),表明独立故障的假设值得怀疑。这一发现并没有受到 n 版本编程支持者的欢迎,虽然我找不到他们反驳的在线副本,但 Knight 和 Leveson 的 对批评的回应 中包含了大量的引述。这是一篇很棒的读物,是该类型的经典之作。
从 1980 年代后期开始,Ken Birman 的团队一直在倡导 因果和完全 有序组播:一种用于构建分布式系统的原语,它为分布式系统中的节点间通信提供强大的保证。 David Cheriton 和 Dale Skeen 对此不以为然,并 为此撰写了 15 页的文章 (1993)。 Birman 写了一篇很长的 对批评的回应。另请参阅 Neha Narula 后来对这场辩论的看法 (2013)。
1991 年的一篇论文 介绍了基于日志的文件系统,该系统通过减少执行文件更新所需的寻道次数来提高文件写入的性能。 1993 年,Margo Seltzer 等人发表了一篇论文,描述和评估了基于日志的文件系统的实现,并于 1995 年进行了后续研究。 John Ousterhout 是最初论文的作者之一,他 不同意该评估。 Seltzer 和她的合作者 驳斥了他的 批评,据我所知,Ousterhout 拥有 最后发言权。
另一场经典辩论,Torvalds 与 Tanenbaum (1992),是关于操作系统应该如何构建:作为在内核模式下运行的单内核代码集合,还是作为一组由内存管理单元隔离的独立子系统。另请参阅关于这场辩论的复兴的一些(片面的)评论。与此讨论相关的是,2005 年,Steven Hand 等人发表了 虚拟机监视器是正确完成的微内核吗?。作为回应,Gernot Heiser 等人于 2006 年撰写了一篇 标题相同的论文,但得出了相反的结论。
“社会过程与定理和程序的证明”是 Richard De Millo 等人于 1979 年撰写的一篇关于形式化方法在软件开发中的作用的挑衅性观点文章。 Dijkstra 称其为“一篇非常令人讨厌的论文”(参见 2001 年对 Dijkstra 的采访记录的第 14 页),并撰写了一篇名为“中世纪的政治小册子”的回应文章。 De Millo 等人回复道:“我们必须首先拒绝承认我们对一个真实软件的信心曾经因其正确性的证明而增加......”另请参阅 C 编辑的信,回应这篇文章,Victor Yodaiken 对这场辩论的看法,以及 2010 年的另外三篇 反驳文章 ——其中两篇由 Moshe Vardi 撰写,一篇由最初论文的作者撰写。
Dijkstra 和 John Backus 在 70 年代后期发生了一场(仅部分公开的)争吵,在此处 和 此处 进行了描述。
计算机安全研究界有着特别强大的反驳已发表结果的传统。例如,SWATT (基于软件的证明) 提供了一种协议,用于检查远程系统是否具有其应有的内存映像。 2009 年一篇名为“基于软件的嵌入式设备证明的难度”的论文提出了针对 SWATT 的具体攻击。 SWATT 作者 Adrian Perrig 和 Leendert van Doorn 不同意这些攻击是有效的,最后,该论文的作者 Aurelian Francillon 等人回应了反驳。
CPI (代码指针完整性) 是一种避免由 C 或 C++ 代码中的内存安全错误引起的控制流劫持的技术。 Missing the Point(er) (2015) 提出了针对 CPI 的攻击,而 Getting the Point(er) (2015) 则论证了 CPI 的安全性。
致谢
我要感谢许多博客读者和 Twitter 用户对本文所改编的原始博客文章提供的反馈。
John Regehr 是美国犹他大学的计算机科学教授。他喜欢创建软件工具来改进软件。
版权所有 2017 年归所有者/作者所有。出版权已许可给 。
最初发表于 Queue vol. 15, no. 3—
在 数字图书馆 中评论本文
Ellen Chisa - 产品经理的演变
软件从业人员都知道,产品管理是软件开发的关键部分。产品经理与用户交谈,以帮助确定要构建什么、定义需求以及编写功能规范。他们在整个软件构建过程中与工程师密切合作。他们充当想法的倾听者,在出现技术挑战时帮助平衡进度——并在需要技术修订时反驳执行团队。产品经理从编写第一行代码之前一直参与到产品出厂之后。
Jon P. Daries, Justin Reich, Jim Waldo, Elise M. Young, Jonathan Whittinghill, Daniel Thomas Seaton, Andrew Dean Ho, Isaac Chuang - 社会科学中的隐私、匿名和大数据
开放数据对于科学具有巨大的潜力,但在人体受试者研究中,隐私和发布高质量开放数据之间存在着张力。关于学生隐私和学生记录发布的联邦法律表明,匿名化学生数据可以保护学生隐私。在这一标准的指导下,我们对来自 MITx 和 HarvardX 在 edX 平台上的 16 个 MOOC(大型开放式在线课程)的数据集进行了去识别并发布。在本文中,我们表明,这些以及其他去识别程序需要对数据集进行更改,从而威胁到基线分析的复制和扩展。为了平衡学生隐私和开放数据的好处,我们建议将重点放在保护隐私上,而无需匿名化数据,而是扩展政策,以强制研究人员维护开放数据集中的受试者的隐私。
Michael J. Lutz, J. Fernando Naveda, James R. Vallino - 本科软件工程:满足专业软件开发的需要
1996 年秋季学期,RIT(罗切斯特理工学院)在美国启动了第一个本科软件工程专业。该计划是五年规划、开发和审查的成果,从一开始就旨在培养毕业生在商业和工业软件开发领域担任专业职位。