练习 3:质量

原文:Exercise 3: On Quality

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

我将提出一个关于认知的科学理论,我并不能证明它:

你所做事情的记忆,会让你思考最终产品,这是正确的行为。

这基于我所做的,几乎每一个创造性的事情的观察,它是这样:

  • 你创造的东西需要很长一段时间。这可能是软件,绘画,写作或任何需要时间的东西。
  • 你“完成”了它,然后当一个朋友过来之后,退后一步并且惊叹于它有多好。
  • 你的朋友然后指出了一个明显的问题,突然间,你对你所创造的东西改变了看法。
  • 现在你看到的是你朋友指出的这个错误,你不知道怎么可能错过了它。

我相信这种现象会发生,是因为你记得你如何实现了它,它影响着你所认知的概念。创造的行为往往是一个积极的思想和工作流,所以你的回忆更积极或中立。这样就会使你对作品的看法变得模糊,让你认为它比实际更棒,但也隐藏了许多缺陷和细节。自从你创造它,并且记住了所做的事情,还有一种对作品的情感依恋,这影响了您对作品的判断。然而,你的朋友没有任何回忆,能够更客观地看待作品,这使其更容易看到这些缺陷。这就是为什么复制编辑者发现的错误比作者多。或者,为什么安全专业人员比作者发现更多的缺陷。

在绘画世界中,这是很常见的,画家有很多技巧来颠覆现象。莱昂纳多·达·芬奇(Leonardo Da Vinci)在他的笔记本中甚至提到了这些技巧,他们的设计目的是,让画家站在他们挑剔的朋友的角度上:

  • 将画面颠倒下来,从更远的地方看。这表明了颜色和对比度的明显问题,同时也显示出您需要改变的重复形状。在一个优秀的作品中,重复的形状是不受欢迎的。
  • 在镜子中看着一幅画,将其水平翻转,所以你的大脑没有如何创造的概念。水平翻转将它变成一个你从未见过的全新的画,然后突然间你是一个讨厌的挑剔的朋友。
  • 通过红色玻璃或黑色镜子来看这幅画,它可以去除颜色,使其只能以黑色和白色显示。这显示了绘画太亮或太暗的区域,这使得它在颜色上看起来奇怪。
  • 通过放在他们前额上的镜子来看待绘画和主体,向上看镜子,使镜子和主体上下翻转,以便比较两者。这显示了绘画的明显问题,并使场景和绘画看起来像抽象的形状,你的大脑没有记忆。
  • 把画放几个月,所以你忘了你怎么做了,然后再次看它。
  • 请你讨厌的朋友看看它,让他们告诉你他们看到什么。

一些画家甚至在他们的画后面放了一面镜子,所以他们可以简单地转过来检查他们的进度。我经常使用黑色镜子(或者只是将你的手机的屏幕关闭)放在我的额头上来检查绘画。

在其他创意学科中,没有这么多的自我批评技巧,并且在软件中也只有很少。事实上,我发现程序员由于他们使用“程序员的方式”来完成代码而声名狼藉。“程序员的方式”,指程序员 Hack 一小段代码,然后改一改,直到通过编译,之后宣城他们完成了工作,并继续。事实上,在这之后有很多事情要做,例如清理代码,执行质量保证检查,添加不变量和断言,编写测试,编写文档,并在整个系统的大环境中确认是否工作。但是没有,程序员经常在编译器(或测试套件)没有错误时就停止了。

在这本书中,你将学习如何执行自己的一套检查,类似于画家使用的检查。他们是看待你的代码的方法,并断开了你如何制作它的历史,秘密就变成了检查清单。颠覆你的工作记忆的方式,是强制自己遵循一套检查,它假设你写的东西有缺陷。我交给你的质量过程不会捕获到所有的东西,但它会帮助你发现你能发现的,尽可能多的错误,也可以帮助你跟踪正在犯下什么样的错误,所以你可以在将来避免他们。之后,我会鼓励让其他人审核您的代码,并审核其他人的代码,以便您可以擦亮眼睛,找到更多的缺陷。

缺陷减少的理念是一种概率。你永远不能删除所有的缺陷。相反,您将致力于降低出现缺陷的可能性,并能够粗略估计其概率。这样可以避免您不知道您的代码是否有缺陷,并帮助您摆脱,不知道你的代码是否存在缺陷的恐慌。你不再使用“程序员的方式”,反之,当你完成并准备复查时,你会拥有很好的概念。你不再不断地担心每一个不可能的边界情况,你将能够评估这些边界情况的可能性,并处理最可能的情况。

研究性学习

在这个练习中,你需要找到一段你在几个月前写的代码,然后再回顾一下。您可能不知道如何审核一段代码,但只要浏览代码,并对任何您不喜欢的内容编写评论即可。关键是逐行并逐个文件查看每一行代码。然后,标记您发现的令人反感的代码,并写出原因。它不一定是一个非常大的软件,只是你之前写的一些东西。

深入学习

编写您发现的所有缺陷的列表,并尝试对其进行分类。您可以查看正式的缺陷类别,但是一个很好的基本集合是:逻辑,数据类型,调用。逻辑错误是,你写的if语句或循环是错误的。数据类型错误是,您使用变量,并假定它是错误的类型。调用错误是,你调用一个函数并且犯了错误。这些不是正式类别,但是这是一个很好的开始。