The Kollected Kode Vicious

Kode Vicious - @kode_vicious

  下载本文的PDF版本 PDF

Kode Vicious

移除代码

无用函数和无用功能

亲爱的KV,

您关于代码的专栏文章经常谈论在添加新代码时出现的问题,但何时是移除一段代码的正确时机?我一直在处理一个庞大的遗留代码库,我们站立会议中提出的大多数问题都与我们认为可以从系统中移除哪些模块有关。

准备移除

 

亲爱的Ready,

我对你问题的狭隘感到惊讶和好笑。大多数程序员在面对遗留代码库时,只是想把它扔掉并重新开始。我不得不说,这种情况至少每周发生一次在我身上,仅仅是看看那些堆积如山、令人震惊的遗留代码,它们竟然被当作软件使用。

从系统中移除无用代码是KV最喜欢的编码消遣之一,因为没有什么感觉比得上当你摆脱了你明知没有被使用的东西时所获得的感觉。代码移除就像打扫房子,只是有时你用火焰喷射器打扫房子,说实话,这非常令人满意。既然你正在使用版本控制系统(你最好正在使用VCS!),那么移除代码就很容易而不用担心。如果你需要移除的代码,你可以随时从VCS中检索它。

至于你何时应该移除代码,有几种答案。当然,第一个答案是,如果你有真正的无用代码,这些代码从系统的任何地方都无法访问,并且不仅仅是条件编译掉的测试代码(参见我2016年的专栏文章“软件开发的不神圣三位一体”,https://queue.org.cn/detail.cfm?id=3014148),那么这些代码应该立即移除。一个好的编译器或其他工具会告诉你何时有无用代码,这应该使这项工作相当简单明了。

当你的代码不常用但已经在系统中存在很长时间时,情况就会变得复杂。此时,你必须更多地思考你的代码,以及你正在查看的代码是否——如果可以这么说的话——接近无用。任何存活多年的系统都倾向于增长一些功能,这些功能有时会被短暂使用,然后被丢弃或忽略。不移除无用功能的逻辑通常被表述为“如果没坏,就别修......”,这实际上非常愚蠢。如果你的软件如此脆弱,以至于移除一个功能就会破坏整个系统,那么你遇到的问题比需要一点代码清理要大得多,这意味着整个系统可能需要深耕细作,如果不是彻底重写的话。

无用的功能与无用的函数不同。无用功能要么完全未使用,要么仅由少数用户使用。无用或接近无用功能的风险在于,它们在你的代码中留下了更大的攻击面。曾经,我们也关心无用功能会在可执行文件中留下代码,从而使系统臃肿,但似乎只有我们这些在嵌入式系统领域工作的人仍然关心这个问题。对于现代基于服务器的系统,无用功能给攻击者提供了一个渗透你系统的地方,这可能是你心中最重要的风险,或者至少应该是这样。

有时,一个无用功能会有一小部分吵闹的用户或一个多年来一直维护该功能的内部拥护者。此时,移除就变成了一个政治(即,人为的)问题。有很多方法可以解决工作中的政治问题,但如果你执行其中一些方法,你可能会被判处10到20年监禁。如果吵闹的少数人非常少,则有可能将该功能分离出来成为一个独立的程序,这样代码就不再是较大整体的一部分。如果问题是开发者,那么,是时候给他们一个新的挑战了,远离他们心爱的功能。一旦你有了拥有心爱功能的开发者,你就会遇到一种非常不同的管理问题,我们在这里不会讨论这个问题。

你会注意到我没有在回答你的问题时给你一个明确的时间表,那是因为实际上没有其他时间表,除了尽快移除真正无用的代码。对于功能移除,这实际上取决于你如何与你的用户和开发者打交道。不过,一个好的经验法则是仅在主要版本发布时移除功能,以限制意外程度。

KV

相关文章

Kode Vicious
代码囤积

提交提交,以及总结图表的美妙之处
https://queue.org.cn/detail.cfm?id=2897034

在软件依赖中生存
软件复用终于到来了,但也带来了风险。
Russ Cox
https://queue.org.cn/detail.cfm?id=3344149

Kode Vicious
编写测试计划

确立你的假设、方法论和预期结果。
https://queue.org.cn/detail.cfm?id=3294770

 

Kode Vicious,在凡人中被称为George V. Neville-Neil,为乐趣和利润从事网络和操作系统代码方面的工作。他还教授与编程相关的各种主题的课程。他的兴趣领域是代码探险、操作系统以及重写你的烂代码(好吧,也许不是最后一个)。他获得了马萨诸塞州波士顿东北大学的计算机科学学士学位,并且是、Usenix协会和IEEE的成员。Neville-Neil是与Marshall Kirk McKusick和Robert N. M. Watson合著的《 FreeBSD操作系统设计与实现 》(第二版)的作者之一。他是一位狂热的自行车爱好者和旅行者,目前居住在纽约市。

版权 © 2020 由所有者/作者持有。出版权已授权给。

acmqueue

最初发表于Queue第18卷,第4期
数字图书馆中评论这篇文章





更多相关文章

Catherine Hayes, David Malone - 质疑评估非加密哈希函数的标准
尽管加密和非加密哈希函数无处不在,但在它们的设计方式上似乎存在差距。出于各种安全需求,存在许多针对加密哈希的标准,但在非加密方面,存在一定程度的民间传说,尽管哈希函数历史悠久,但尚未得到充分探索。虽然针对真实世界数据集的均匀分布很有意义,但当面对具有特定模式的数据集时,这可能是一个挑战。


Nicole Forsgren, Eirini Kalliamvakou, Abi Noda, Michaela Greiler, Brian Houck, Margaret-Anne Storey - DevEx实践
DevEx(开发者体验)在许多软件组织中越来越受到关注,因为领导者们寻求在财政紧缩和人工智能等变革性技术的背景下优化软件交付。直观地看,技术领导者普遍认为,良好的开发者体验能够实现更有效的软件交付和开发者幸福感。然而,在许多组织中,旨在改善DevEx的拟议倡议和投资难以获得支持,因为业务利益相关者质疑改进的价值主张。


João Varajão, António Trigo, Miguel Almeida - 低代码开发生产力
本文旨在通过展示使用基于代码、低代码和超低代码技术进行的实验室实验结果,以研究生产力差异,从而为该主题提供新的见解。低代码技术已清楚地显示出更高的生产力水平,为低代码在短期/中期内主导软件开发主流提供了强有力的论据。本文报告了程序和协议、结果、局限性和未来研究机会。


Ivar Jacobson, Alistair Cockburn - 用例至关重要
虽然软件行业是一个快节奏且令人兴奋的世界,在这个世界中,新的工具、技术和技巧不断被开发出来以服务于商业和社会,但它也很健忘。在它匆忙地向前发展时,它容易受到时尚潮流的支配,并且可能会忘记或忽略针对它所面临的一些永恒问题的成熟解决方案。用例,最初于1986年引入并在后来普及,就是这些成熟的解决方案之一。





© 版权所有。

© . All rights reserved.