错误的抽象(2016)

2021-05-10 07:48:49

_I最初为我的Chainline通讯写了以下内容,但我继续获得关于这个想法的推文,所以我在我的博客上重新发布了这篇文章。此版本已被轻微编辑._

我一直在考虑&#34的后果;错误的抽象。"我的railsconf 2014"所有的小事和#34;谈话包括一个我被声称的部分:

这一小部分更大的谈话援引了一个令人惊讶的强烈反应。一些人建议我失去了思想,但沿着以下更加表达的情绪:

这是一百万次! " @bonzoesc:"复制比错误的抽象&#34更便宜; @sandimetz @rbonales pic.twitter.com/3qmi0waqwb"

- 2014年3月7日的41个蓝色(@PIM)

反应的力量让我意识到"错误的抽象&#34是如何普遍和棘手的。问题是。我开始提出问题并来看以下模式:

这会创建一个新的抽象。它可能是一种新方法,或者甚至可能是一个新的课程。

程序员B感觉荣誉持续保留现有的抽象,但从每种情况都完全相同,它们会改变代码拍摄参数,然后根据值添加逻辑以便根据值那个参数。

你在这里出现在故事​​中,你的生活变得更糟。

现有代码发挥了强大的影响力。它的存在符合它既是正确的,也是必要的。我们知道代码代表努力消耗,我们非常有动力,以保护这项努力的价值。不幸的是,悲伤的事实是代码更复杂和难以理解的代码,即创造它的投资更深,我们对保留它的压力越多("沉没成本谬误")。它'因为我们的无意识告诉我们"善良,'如此令人困惑,它一定要达到正确的。肯定是它真的很重要。让所有努力浪费的罪恶将是一个罪恶。"

当您在上面步骤8中出现本故事时,此压力可能会强迫您前进,即通过更改现有代码来实现新要求。然而,试图这样做是残酷的。代码不再代表单个常见的抽象,而是成为一种条件加载程序,其交织了许多模糊相关的想法。很难理解和容易休息。

如果您在这种情况下发现自己,抵制受到沉没的推动。在处理错误的抽象时,前进的最快方式是回来。请执行下列操作:

在每个来电者中,使用传递的参数来确定此特定呼叫者执行的内联代码的子集。

这删除了抽象和条件,并将每个来电者缩短为只需的代码。当你以这种方式倒带决定时,它的共同点是发现,虽然每个来电者表面上调用了一个共享抽象,但他们运行的代码是相当唯一的。一旦完全删除旧抽象,您就可以重新开始,重新隔离重复和重新提取抽象。

我已经看到了人们勇敢地努力向前推进错误的抽象,但成功很少。添加新功能令人难以置信的硬,每个成功都进一步复杂了代码,这使得添加下一个功能即使更加困难。当他们改变他们的角度来从&#34改变;我必须保留我们对此代码&#34的投资; "这段代码有一段时间,但也许我们学到了我们所能的所有东西,"并让自己允许根据当前要求重新思考他们的抽象,一切都变得更加容易。一旦它们引入了代码,前进的道路变得明显,并且添加新功能变得更快,更容易。

这个故事的寓意?不要被沉没的成本谬误陷入困境。如果您发现自己通过参数并通过共享代码添加条件路径,则抽象不正确。它可能是正确的,但那天已经过去了。一旦证明抽象错误,最好的策略就是重新引入重复并让它向您展示什么&#39。虽然它偶尔会累积几个条件来获得洞察力,但是如果你越早放弃错误的抽象而不是以后,你会忍受痛苦的痛苦。

当抽象错误时,前进的最快方式就会回来。这不是撤退,它的进步在更好的方向上。做。你' ll改善你自己的生活,以及所有遵循的人的生命。

第二个版本包含3个新章节,比1st长约50%。此外,由于99瓶OOP是关于对象设计的一般设计而不是任何特定语言,这次我们在技术上创建了单独的书籍,这是技术上相同的,而是针对示例使用不同的编程语言。

99瓶OOP目前在Ruby,JavaScript和PHP版本以及啤酒和牛奶饮料中提供。它'在EPUB,KEPUB,MOBI和PDF格式中提供。这导致六个不同的书籍和(3x2x4)24可能的下载;所有独特,但仍然是一样的。一次购买为您提供下载任何或全部的权利。