[2021] Software Development

Title Text:Update: It turns out the cannon has a motorized base, and can make holes just fine using the barrel itself as a battering ram. But due to design constraints it won’t work without a projectile loaded in, so we still need those drills.<

Origin:https://xkcd.com/2021/

https://www.explainxkcd.com/wiki/index.php/2021:_Software_Development

軟體開發

更新:原來加農砲有機動底座,用砲身當成衝撞臂就可以在牆上打洞。但由於設計上的限制,沒有填裝彈丸就就無法使用,所以我們還是需要那些鑽頭。

https://xkcd.tw/2021

软件开发通常以对基本问题的无理解决方案为特征。 Cueball建造了一个优雅的钻头(功能),可以根据需要自动调整扭矩和速度,以满足他在墙上500孔的要求。毛茸茸的,在一个绝对不优雅的解决方案中,将500个钻头加载到一个大炮中并将它们射向墙壁。实际上,这个解决方案需要执行太多可笑的安全问题,但在软件中,其含义只是非常糟糕的代码。

随意忽略软件本身就让人想起在部署到服务器时牛而不是宠物的想法。

这类似于分配两个不同的软件团队来解决问题的不同部分,并使独立工具协作以形成流畅的解决方案。所谓的“钻井队”的任务是使系统的一部分在墙上形成一个洞。加农队的任务是制作系统的一部分,目标是钻井队在墙上的指定地点生产,然后钻孔。钻井队假设瞄准装置只是将他们的部分定位在墙壁上,允许它制造洞,但是加农队不能对钻井队如何产生漏洞做出假设 – 他们需要制造一些可以使用任何东西的东西。钻井团队制作了这个洞,从而制作了一门大炮,因此他们可以确保他们的成功。

标题文本是一个笑话,关于软件中问题的最佳解决方案是一般的而不是具体的。例如,参见使用Ruby on Rails的开发人员(一个支持电子邮件,模板和Web套接字的完整Web框架),用于简单的仅API服务。它们只需要一小部分导轨(钻孔部分),但由于设计的限制,最终还是需要整个框架。

标题文本的另一种解释是软件开发的特征通常还在于不同代码模块之间的复杂性和无意的相互依赖性。对于编码人员来说,这是一个无休止的挫折源,对代码的看似微小的改变可能会导致程序工作方式发生重大变化,包括看似与更改的特定代码无关的更改。类似的问题是当一行代码“不应该”(根据编程语言的规则)最终是必不可少的,因为如果代码被清理并且线被移除,程序将不起作用。 Randall引用了以前不起作用的代码问题。最后一个因素是编码员经常在第一个模块中编写一次特定函数,然后在必要时在后续模块中回调该函数,而不是一遍又一遍地重写函数。在这种情况下,即使不再需要,也不能删除第一个模块,因为对原始函数的所有调用都将为空,其余模块无法工作。这不仅发生在程序内,而且发生在它们之间,因为互联网上的许多软件都依赖于公共或开源软件数据库中的大量程序模块。当模块丢失时,它可以产生广泛的影响,如2016年3月所示。

在漫画的背景下,可能是大炮的代码是在它做任何事之前编写的,以检查它是否是“加油的”,因此仍然需要钻探代码以使大炮在其机动基础上移动打洞。或者钻头的代码定义了一个模糊的变量,其他代码用于加农炮或其底座,因此“钻探”钻探代码会导致加农炮“晃动”而不能操作。

Leave a Reply

Your email address will not be published. Required fields are marked *

Categories