清洁代码——每个人都听说过它,每个人都认为它很棒,而且没有人愿意为此付费。在项目开始时,编写测试并保持代码和设计干净的开发人员比其他同事慢。这是一个完全现实的评估,而不仅仅是从项目管理的角度来看。
从纯粹的经济角度来看,让我们看看开发人员或整个开发团队的产出:这里重要的是每单位时间要构建的产品的已交付部件的数量(假设还构建了“正确的东西”) )。重要的是,不仅要在整个项目中保持这种“速度”,而且最好还要提高它。为了实现这一目标,了解开发人员将大部分工作时间花在什么上是有意义的 - 那就是阅读源代码!
猜测源代码中的内容会花费时间(和金钱),因此应该尽量减少。可能的解决方案包括许多干净的代码实践,例如 Robert C. Martin 多年来在他的同名书中推荐的那些实践。然而,这些做法常常被忽视,在最坏的情况下,人们拼命地应用这些做法,往往会产生相反的效果。因此,了解我们的感知处理的工作原理不仅对于理解清洁代码的目的至关重要,而且对于能够将这些原则应用到各自的项目环境中也至关重要。通过这种方式,可以创建一个随时保持可读且易于理解的代码库。
熟悉的模式如何影响我们
首先,做一个小练习:下图包含三个线索来回答这个简单而简单的问题:哪条线最长?
通常表现形式的插图
那么,请认真思考,你们中谁会立即回答“第 3 行”或者至少有第一个冲动这样做?但我不得不让你失望,因为不幸的是“第 3 行”是错误的答案。但别担心,您并不是唯一一个回答错误的人。
在三个线索中 - 1. 标签,2. 颜色,3. 线条本身 - 前两个线索完 糖尿病邮寄名单 全不相关,并且模糊了所有线条的视图。让我们在没有任何干扰信息的情况下再次看一下该图:
上面显示的图像以另一种表示形式
现在很容易看出底线显然是最长的。为什么你没有在第一个插图中立即注意到这一点?标签和颜色突出是罪魁祸首。您可能非常熟悉使用不同颜色和标签来表示此类图像,但此时这并不重要。毕竟,这是最长的队伍——无论颜色或名称如何。
造成这种误解的原因很简单:你不再真正考虑它,因为任务可以轻松解决 - 至少你认为是这样。
感知是两个系统的结果
根据心理学家、诺贝尔经济学奖得主丹尼尔·卡尼曼的感知模型,我们的感知或感官印象是由两个不同的系统处理的。卡尼曼将它们简单地称为“系统 1”和“系统 2”。
系统 1 几乎存在于每一个拥有中枢神经中枢的生物体内——可以说是“古老的”且完全成熟的。该系统速度快,不需要体力甚至脑力劳动,并且本质上基于模式识别。如果找到合适的模式,系统 1 就会触发与其相关的反应。
另一方面,系统 2 相对较新,仅存在于少数物种中,它现在负责分析复杂的数据并将现有知识与新的解决方案联系起来。与系统 1 不同,该系统非常慢、懒惰,并且只有在使用时才会启动。当您花一整天时间阅读需求规范或破译前辈的意大利面条代码而咖啡不再起作用时,您通常会注意到这一点。当系统 1 找到合适的模式时,系统 2 通常会立即停止工作。
我不想用“哪条线最长?”这个问题来证明任何其他事情。由于您的系统 2 也是惰性的,它会尝试从分析中删除系统 1 已识别的所有数据。换句话说,没有进一步考虑每个参与者都熟悉的假设模式,因为解决方案显然已经找到了。
我对卡尼曼感知模型的描述可能被大大简化了,但这仍然是通过应用干净代码实践来实现的目标的精髓:一方面,应该捕获尽可能多的源代码另一方面,通过系统 1,系统 2 应该使破译其余部分尽可能容易。此外,必须避免系统 1 由于误导性信息而得出错误的结论 - 例如第一个插图的情况。
系统 1 和 2 的实践
丹尼尔·卡尼曼 (Daniel Kahneman) 的更多理论构想如何转移到软件项目中,从而转化为实践?我认为当涉及“统一”、“名称”和“注释”主题时最清楚:
均匀性
让我们从“均匀性”这一点开始。系统 1 的能力不仅在于有效识别模式,而且还在于学习它们。这可用于快速捕获和理解源代码。最著名的方法是使用设计模式。正确学习和应用这些模式不仅可以节省实施时间,还可以节省阅读时间。你不再需要主动思考某个代码的详细功能,因为你训练有素的系统 1 会立即告诉你。