在您编写任何代码之前 - 询问您是否可能想要您正在编码的多种类型。如果是的话,只是做到这一点。现在,不是稍后。
您假设一个团队有许多用户,相应地,一个用户属于一个团队。但是,你受到沮丧,因为你现在必须花2个月重构每一系列代码和数据库模式,这是一个假定的一到一个映射😱这里的更多例子。
您假设加载状态只有两个状态 - 真/假 - 所以您制作一个布尔上载变量,然后您实现了需要跟踪错误状态,因此您可以使用iSError。您可以做一些工作,以确保各国的4种组合直观行为。您可以为您的每个良好开发人员编写测试测试。当然。
最终,您实现了每种添加或修改,以呈指数延长的时间才能考虑每个边缘案例。它'甚至甚至讲你的' ve and#39;大多数Don' t。
该解决方案是明确的状态机 - 但此时你' refe and and才能证明重写。
分页。 Quote Simon Wallison,Django的共同创建者,"重构现有的非分名API来支持分页将打破一切。更好地假装分页,但只返回一个页面,以防万一。
我完成了一百万次的重构。我'我想,我认为只有一个订阅团队,用户计划,姓名,地址,它总是如此,"哦,实际上有更多。&# 34;我几乎永远不会去另一种方式。如果你刚刚支付思维&#34的前期成本怎么办;这只是一个集合&#34 ;?
唐纳德Knuth着名,因为注意到的过早优化是所有邪恶的根源(其中有一些细微差别,BTW)。我非常同情对简单性的吸引力 - 如果"你是AIN' t将需要它"然后不要使用它。但我认为先发制人的多元化 - 当你需要n种类型的东西时,突出到假设的情况 - 豁免,即使你对未来的优化,你不会'目前居住。
从2到3的基数比为1至2的基数,从2到3的基数缩放代码更容易。这是一个从根本上不受欢迎的非线性。换句话说,先发制人的多元化可以使&#34之间的差异有所不同;当然,我' ll今天补充说,今天和#34;和#34;这将带我们2个月,我们' LL与其他所有正在进行的进展功能介绍合并冲突。"
要求波动性是软件工程的核心问题。作为一个软件工程师,编写您今天要求的代码是最少的。您的真实技能会发生在接下来的情况下 - 当需求不可避免地改变时,无论是通过I / O或计算界限引起的新功能请求还是缩放问题所做的事情。
对于您在近期预见的内容来写代码可能不够 - 这些是更多的要求。软件设计和架构是关于使不可预见的更改的响应容易。
Hillel Wayne提出了这些要求扰动。如果一个小的,典型的特征请求可以丢弃你的整个设计,然后你有脆弱的代码。显然你想要脆弱的对面 - 我很想打电话给它"抗皱"因为那里点击 - 但是真的最好的是你能希望的代码是大多数' t由于1-2要求的标准偏差变化而崩溃。换句话说:强大的代码。强大的代码针对变更进行了优化(在未来的博客中更多)。
非线性在如何昂贵,改变来自"紧急硬化和#34;代码。对未来变化具有强大的代码,今天写入比在稍后写入时,您必须在您必须在进行功能请求之前支付的延迟技术债务。脆弱的代码就像是发薪日贷款贷款人的技术债务。
我如此致力于过早地优化我想做最终的音高,为什么先发制人的多元化不足。让'解决了对先发制人的多元化的两个明显的批评:
增加的代码复杂性:功能语言和其他抽象可以帮助使阵列或矩阵操作变得易于使用作为常规操作。
额外循环的性能缓慢:当您有很多N的情况下,循环只能成本显着。根据定义,如果您是过早的,N = 1。
最终,我认为是什么让某些东西过早或不是您对所需的定义。如果您查看"今天工作的代码"作为你的工作,先发制人的多元化是早产。如果您浏览"从现在&#34的一年中爆炸&#39的代码。作为你的工作,那不是。
贵公司中的云数(您认为您将避免这种情况......直到您可以' t,每个Hashimoto lemma)
感谢Jon Wong进行审查此帖子的草案并促成布尔和国际化的例子
Jared Palmer和Daniel Yokomizo提到零一个无限统治 - 虽然本文争辩于先发制人的青睐和#34;无限"过度"一个"
披露:这是我一直在仔细考虑一段时间的想法,但尚未以规模实行。在从播客的提示之后写的几个小时。
关于这篇文章的推文,它将在这里出现,或者您可以在dev.to上发表评论