paint-brush
软件开发中的破窗理论:为什么细节很重要经过@aferreira
1,715 讀數
1,715 讀數

软件开发中的破窗理论:为什么细节很重要

经过 André Ferreira, MSc10m2023/02/27
Read on Terminal Reader

太長; 讀書

破窗理论表明,环境混乱会助长犯罪、反社会或公民混乱行为。本文通过让读者了解他们的行为如何影响他们所参与的环境来提供反思并尝试鼓励改变。软件开发世界中的一些问题可能看起来无关紧要,但它们可能会对人和社会产生严重的副作用和成本。
featured image - 软件开发中的破窗理论:为什么细节很重要
André Ferreira, MSc HackerNoon profile picture
0-item


虽然软件开发世界中的一些问题可能看起来无关紧要,但它们可能会对人们和社会产生严重的副作用和成本。本文通过让读者了解他们的行为如何影响他们所参与的环境以及一些小事如何最终导致财富损失,提供反思并试图鼓励改变。

破碎的窗户

作为一个年轻的小伙子,在我拥有第一台电脑之前,我总是骑着自行车。在我家对面,有一片小森林,有几条狭窄的步行道,我经常在那里骑自行车。


我经常幻想我的 BMX 自行车是一级方程式赛车,我正在与 Nigel Mansell、Alain Prost 或 Ayrton Senna 竞争。然后,在接近终点线时,我会进行超车并以微弱优势获胜。


在森林的尽头,有一个旧仓库。它在靠近屋顶的顶部有小窗户,可以让光线进来。然而,这些窗户足够高,可以用来窥视内部。


我永远不会忘记我第一次停下来休息并凝视这座建筑的情景。我记得当时在想:“奇怪!为什么它不靠近马路?...有人扔石头,打碎了一些窗户...为什么还没有修好?看似神秘,却又阴森森的。我最好远离,感觉有些不对劲”。然后我会骑车离开,再也不会冒险进入那个地区了。


几年过去了,最终森林被一条路穿过,慢慢地,一些新建筑在它旁边萌芽。但至少有一段时间,旧仓库经受住了。然而,随着时间的流逝,越来越多的窗户被迫向扔向它们的石头屈服。


公平地说,无论是谁打破了窗户,都不会被悔恨所困扰。有的已经坏了没修好,谁会在乎多几个?毕竟,更换的成本与它们都需要修补的成本是一样的。


因此,旧仓库窗户提供了一个训练目标的机会,并在过早的拆除援助成功时庆祝(另一个窗户破了),正如我曾经观察到一些年长的小伙子所做的那样。


对于我和其他一些同事来说,这条路可以缩短上学的路程。尽管如此,我们都更喜欢那条较旧且稍长的路线,因为这是一条已知的路线,而且它可以让我们避开让我们感到奇怪的不安的破旧建筑。这是不需要考虑或担心的事情。


我分享这个故事,从一个没有手机的时代开始,试图把你带到你自己的童年,并试图挖掘出你小时候观察一个破旧的建筑或区域时可能有过的类似感受,并介绍破窗论


简而言之,破窗理论表明,环境混乱会助长犯罪、反社会或社会混乱行为。没有破窗意味着混乱的可能性较小,有利于和平与合法。就像旧仓库的破窗一样,当已经很乱的时候,再往上堆更容易。


我第一次接触破窗理论是在很久以前,当时我正在阅读《实用程序员》 。如果您是软件开发领域的新手,那么这本书值得一读。


我经常想到破窗理论的智慧。当然,犯罪学家和行为专家对此还有很多话要说,但对我来说,这是环境如何影响人类行为的生动例证。


虽然最近一些学者声称该理论不再成立,即使没有阅读他们的论文或主张,我也已经挑战:“道歉。我知道你是专家,但根据我的经验,它确实站得住脚”。


如果您喜欢“Bing Bang”电视节目,那么您就会知道即使是专家也可能是错的,甚至被朋友证明是错误的。


我希望你明白,这个旧仓库故事中的破窗,招致了反社会行为,这也会导致路人,仿佛受到麻烦的自动预感的引导,采取措施远离它,并将其从脑海中移除。

科技与犯罪

为了让您不觉得我太老,请允许我使用 TikTok Kia 挑战作为另一个例子(要进行的挑战,可能还包括打破车窗)。


如果你不熟悉它,它是关于在该平台上分享的一段视频,该视频导致了一系列针对起亚和现代的机动车盗窃案,主要是青少年盗窃案,导致财产损失、悲痛、生命损失和其他不法行为结果,所有这些都是负面的……不包括 TikTok 的收益和进一步的平台恶名。


作为那些汽车制造商有意或不幸的设计决定,它仍然是一个系统脆弱性,通过普通 USB 电缆成功利用了这一脆弱性。


一家汽车厂的图片


成年人,或者至少是负责任的事情,本来应该向两个品牌披露上述漏洞,并希望他们采取措施纠正它。当然,这意味着视频的作者很可能永远不会出名,也不会在制作过程中获得乐趣。


我觉得有趣的是,现在的年轻人宁愿成为有影响力的人,即使是作为邪恶的大使,也不愿成为消防员、医生或宇航员。干得好大众媒体! (我试图讽刺那些很难讽刺的人)。


所以在这个例子中,我们可以承认,即使是无意的,破碎的窗户(和 USB 电缆)也会导致比破碎的玻璃更严重的后果。


此后,两家公司都采取了措施,试图尽量减少和解决犯罪行为,或者换句话说,修复破损的窗户,但在此之前已经遭受了声誉损害和经济损失。

软件开发设计:HTTP Referer Header 示例

多年来一直是破窗的软件世界的一个例子是 HTTP Referer 标头,它是 referrer 一词的拼写错误。它给我带来了麻烦,也许给你和成百上千的人带来了麻烦。


像我一样,您可能也会嘲笑作者(做出粗鲁和嘲讽的言论,通常是大声)。您可能还搜索过这是谁的错,并且可能还得出结论,即使在这么多年后,太忙的借口或“我最终会解决它”……是非常人性化的,就像您对于其他破碎的窗户,之前肯定听过类似的推理。


当很容易教你需要做错事时,谁会在乎其他人浪费时间,因为那是正确的做事方式?或者,这里有一个有趣的想法,我们为什么不更改字典呢?那么就不会再是错误了。


打开您选择的文本编辑器,并用英语字典中的拼写错误版本写一个句子。这个词会被标记为拼写错误吗?

结果可能会让你吃惊。


一扇破窗户,如果不修理,会导致更多破窗户,但如果连专家都不关心这些,我们其他人为什么要关心呢?为什么不打破更多的窗户?总有一天,一切都必须修复。


这是一个潜在的原因!它涉及数字,很容易出错,但让我们试一试。


根据此来源,我们使用 2021 年美国程序员的平均工资为 93,000 美元。让我们假设每周工作 40 小时,每周工作 52 小时,每小时价值为 44.71 美元(美国人显然不太喜欢休假)。


鉴于此,根据该消息来源,仅在美国就有 430 万程序员。即使我们只选择其中的 5%(我随意选择了这个值),我们也会得到 215,000 名程序员,他们以某种方式遇到了拼写错误,并且不得不采取措施来理解和解决它。


如果这些程序员中的每个人平均只损失 1 小时来处理副作用并首先理解它为什么会出现,那么他们第一次相遇的成本将是960 万美元。如果是 30%(129 万人),价值将是5770 万美元。再次:仅限美国


即使您选择另一个任意百分比,浪费仍然是巨大的。


一个人双手拿着钱,好像在数数的图像


请注意,我没有考虑到在开发周期早期发现的问题比在生产中发现的问题成本要低得多。我也没有添加通货膨胀调整,也没有考虑不同的国家或花时间解决它的学生和教授,也没有考虑那些拥有网站但不被视为程序员的人,也没有退休的人,也没有那些仍然拥有网站的人学习它。


现在,推断该值以包括世界。有多少金钱,有多少价值,有多少生命,你相信已经失去了,将会失去吗?


我渴望有一天善良的灵魂在某个地方分享,“顺便说一句,我们修复了它,旧的方式将在版本 X 中被弃用”。因为对我来说,除非对这个简单错误负责的人卑鄙到应该为这个错字而被记住,否则最好的修复时间是昨天。 (认识 Apache 基金会的人或与 Nginx 一起工作的人?拜托!唠叨他们!)


“以终为始”,这包括您为他人所做或未做的事情。


然而,这只是软件世界的一个例子,不是独角兽,我们还有更多。

企业成熟度和破窗

根据我的经验,利益相关者的成熟度、经验和软件的寿命越高,破损窗口持续时间越长或从未得到解决的可能性就越高。


和不。我不会站在后面,甚至不会站在那些对早期和经常发布感到满意的人旁边,因为它通常会转化为较低的质量和关注度。知道你发布的大多是破烂的窗口,未考虑的完整功能,这不是敏捷,而是草率。


是的,我知道有很多原因会出现并与上述声明相矛盾,但我相信没有一个会抵制决定获利的网络对手带来的天气变化。更清楚的是:初创公司的代码库通常是犯罪的成熟时机,换句话说,是犯罪分子可以采摘的唾手可得的果实。


但对于成熟的组织而言,成熟拥抱破窗现实背后的最强大力量是低投资回报率和其他紧迫的优先事项,这些优先事项决定和强制需要可用资源的关注。


此外,已建立的组织受法规和合规性的约束,这些法规和合规性限制它们承担某些风险,如果这些风险成为现实,将产生广泛的社会影响。这也是为什么这些公司更愿意孵化初创企业,让他们获得特定的利基市场,然后等到法规和活动更加稳定,然后再进行实际收购。


几个堆叠的档案的图像


社会不偏袒失败者,我们庆祝胜利者!因此,在犯错误或失败时采取防御措施是人之常情。我们要求除我们之外的其他所有人都不要错过点球或任意球。还有,程序员之间肯定是不善待彼此的,但这并不是他们孤立的问题。


因此,一个团队或个人以这样的推理回应并不奇怪:“这不是一个真正的错误”,“这不是一个真正的缺陷”,这是一个设计决定,“我们从来没有想过它可以这样使用”、“没有人会那样做”、“它不会伤害任何人”、“它正在按预期工作”等。


当破损的窗户没有得到修复时,至少在不久的将来,以一种幽默的极客方式,程序员称它们为:“一个功能”。


听起来很傻不是吗?让我们看看可能发生了什么。


如果我们舒舒服服地坐下来,试图抵制自己的偏见,也许我们中的更多人会观察到同样的情况:一群以解决问题为生的人,可以肯定且轻松地识别破窗。因为有些问题永远无法解决,人们会想方设法不再担心并将它们从头脑中的积压中移除。


因为就像生活中许多其他无法单独或直接控制的事物一样,如果您继续花费精力思考它们,它们就会给您带来压力。

结论

那么什么时候,这种带有负面情绪且不受欢迎的常见行为变得不可接受了?难道只有当人坠毁和死亡时才会发生吗?


如果是这样,那么,有些事情永远无法解决……让我们继续输,或者更准确地说,让别人继续输。


在仅影响仓库所有者的破碎玻璃、车辆所有者、抢劫他们的人,最后是其他程序员之间,处理细节,即使很小,也会有所作为。


我希望下次你做错事时,考虑立即改正或让做错事的人修改。


请停止乱扔垃圾,因为其他人也会这样做。


如果他们是专家,请挑战他们!他们是人,他们会犯错误,但他们可能甚至没有注意到。如果他们反应像傻子,回应:“不客气”。


如果我要为我一生中所做的所有打字错误和其他愚蠢的事情付出代价……


但我总是尝试做一件事:修复它们,一旦我意识到它们。你也应该!


小事,它们很重要。如果不完全是他们,他们的存在意味着什么。


不要让“破窗”(糟糕的设计、错误的决定或糟糕的代码)得不到修复。 - Dave Thomas 和 Andy Hunt 的 The Pragmatic Programmer

(包括小孩子)