当构建一个新的软件或一个新的体系结构时,一个常见的做法就是我所说的设计上的浪费。通常,问题不再是如何使用技术来解决特定问题,而是如何在没有真正考虑特定需求或实际需求的情况下将技术硬塞进问题中。
当预测的可伸缩性需求过于乐观,但设计上的浪费与此业务现实无关时,可能会出现这种情况;它是关于为一组需求或数字设计一个系统,而不考虑需要构建什么。
那是一排排闪闪发光的电器;然后是太多的虚拟机,它是“弹性计算”,然后是容器,然后是Kubernetes,现在是无服务器。每出现一种趋势,实用主义就会消失在大量科技债务中。
先是SQL数据库,然后是NoSQL,然后是无服务器数据库。通常不清楚讨论的是什么,查询语言、数据库引擎、复制技术、存储模式还是营销术语?
这种困惑导致了无望的选择,而这往往不适合领域问题。这就是我们看到MongoDB被用来开发银行软件,Kubernetes被用来部署静态网站,Hadoop被用来处理excel规模的数据的方式。
通常,当告诉某人某项技术选择最终有多么荒谬时,人们会提出许多借口。我们的目标是让最初的领域问题被夸大到荒谬的程度,以便让一些务实的人看到它。然而,这并不是说要实际,而是要表现为一个拥有深厚领域专业知识的人,而不是通过将批评描述为缺乏专业知识或对手头问题的理解而在最初的选择上突出。
当一个工程师表现出实用主义时,他现在是一个悲观主义者,或者是一个缺乏选择“正确”解决方案的能力的人。更糟糕的是,这种思路导致了基于时尚的设计,而最后一种趋势是正确的工程选择。
现实世界中有很多例子,比如编程语言中最新的结构比旧的好,以及框架中最新的设计模式必须取代以前的结构,部署解决方案中最新的与最好的一致。
当某件事变得太出名或太突出时,即使以前被认为是最先进的,现在也应该避免这种粗俗。
因为人们可能会更早地实现简单的概念,所以这些概念不仅因为时间而广为人知,而且因为其易于教授的性质而广为人知;因此,新概念自然会变得更加复杂。
有些人会因为复杂而依恋复杂的概念。这可能是因为他们不想浪费时间学习一些概念,也可能是因为这可能会让他们觉得使用复杂技术在智力上更优越。
过度设计比设计一个恰到好处的解决方案更容易。过度设计解决方案会浪费资源,导致完全缺乏适当的规划和理解。
当技术选择成为时尚驱动因素时,专家知道或使用最新趋势时,推广低效或不恰当的解决方案就更容易了。