1
0
mirror of https://github.com/apachecn/lmpythw-zh.git synced 2025-05-28 03:58:19 +00:00
lmpythw-zh/ex3.md
wizardforcel c2553b7b43 ex3
2017-08-05 19:05:40 +08:00

48 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 练习 3质量
> 原文:[Exercise 3: On Quality](https://learncodethehardway.org/more-python-book/ex3.html)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
我将提出一个关于认知的科学理论,我并不能证明它:
> 你所做事情的记忆,会让你思考最终产品,这是正确的行为。
这基于我所做的,几乎每一个创造性的事情的观察,它是这样:
+ 你创造的东西需要很长一段时间。这可能是软件,绘画,写作或任何需要时间的东西。
+ 你“完成”了它,然后当一个朋友过来之后,退后一步并且惊叹于它有多好。
+ 你的朋友然后指出了一个明显的问题,突然间,你对你所创造的东西改变了看法。
+ 现在你看到的是你朋友指出的这个错误,你不知道怎么可能错过了它。
我相信这种现象会发生,是因为你记得你如何实现了它,它影响着你所认知的概念。创造的行为往往是一个积极的思想和工作流,所以你的回忆更积极或中立。这样就会使你对作品的看法变得模糊,让你认为它比实际更棒,但也隐藏了许多缺陷和细节。自从你创造它,并且记住了所做的事情,还有一种对作品的情感依恋,这影响了您对作品的判断。然而,你的朋友没有任何回忆,能够更客观地看待作品,这使其更容易看到这些缺陷。这就是为什么复制编辑者发现的错误比作者多。或者,为什么安全专业人员比作者发现更多的缺陷。
在绘画世界中这是很常见的画家有很多技巧来颠覆现象。莱昂纳多·达·芬奇Leonardo Da Vinci在他的笔记本中甚至提到了这些技巧他们的设计目的是让画家站在他们挑剔的朋友的角度上
+ 将画面颠倒下来,从更远的地方看。这表明了颜色和对比度的明显问题,同时也显示出您需要改变的重复形状。在一个优秀的作品中,重复的形状是不受欢迎的。
+ 在镜子中看着一幅画,将其水平翻转,所以你的大脑没有如何创造的概念。水平翻转将它变成一个你从未见过的全新的画,然后突然间你是一个讨厌的挑剔的朋友。
+ 通过红色玻璃或黑色镜子来看这幅画,它可以去除颜色,使其只能以黑色和白色显示。这显示了绘画太亮或太暗的区域,这使得它在颜色上看起来奇怪。
+ 通过放在他们前额上的镜子来看待绘画和主体,向上看镜子,使镜子和主体上下翻转,以便比较两者。这显示了绘画的明显问题,并使场景和绘画看起来像抽象的形状,你的大脑没有记忆。
+ 把画放几个月,所以你忘了你怎么做了,然后再次看它。
+ 请你讨厌的朋友看看它,让他们告诉你他们看到什么。
一些画家甚至在他们的画后面放了一面镜子,所以他们可以简单地转过来检查他们的进度。我经常使用黑色镜子(或者只是将你的手机的屏幕关闭)放在我的额头上来检查绘画。
在其他创意学科中,没有这么多的自我批评技巧,并且在软件中也只有很少。事实上,我发现程序员由于他们使用“程序员的方式”来完成代码而声名狼藉。“程序员的方式”,指程序员 Hack 一小段代码,然后改一改,直到通过编译,之后宣城他们完成了工作,并继续。事实上,在这之后有很多事情要做,例如清理代码,执行质量保证检查,添加不变量和断言,编写测试,编写文档,并在整个系统的大环境中确认是否工作。但是没有,程序员经常在编译器(或测试套件)没有错误时就停止了。
在这本书中,你将学习如何执行自己的一套检查,类似于画家使用的检查。他们是看待你的代码的方法,并断开了你如何制作它的历史,秘密就变成了检查清单。颠覆你的工作记忆的方式,是强制自己遵循一套检查,它假设你写的东西有缺陷。我交给你的质量过程不会捕获到所有的东西,但它会帮助你发现你能发现的,尽可能多的错误,也可以帮助你跟踪正在犯下什么样的错误,所以你可以在将来避免他们。之后,我会鼓励让其他人审核您的代码,并审核其他人的代码,以便您可以擦亮眼睛,找到更多的缺陷。
缺陷减少的理念是一种概率。你永远不能删除所有的缺陷。相反,您将致力于降低出现缺陷的可能性,并能够粗略估计其概率。这样可以避免您不知道您的代码是否有缺陷,并帮助您摆脱,不知道你的代码是否存在缺陷的恐慌。你不再使用“程序员的方式”,反之,当你完成并准备复查时,你会拥有很好的概念。你不再不断地担心每一个不可能的边界情况,你将能够评估这些边界情况的可能性,并处理最可能的情况。
## 研究性学习
在这个练习中,你需要找到一段你在几个月前写的代码,然后再回顾一下。您可能不知道如何审核一段代码,但只要浏览代码,并对任何您不喜欢的内容编写评论即可。关键是逐行并逐个文件查看每一行代码。然后,标记您发现的令人反感的代码,并写出原因。它不一定是一个非常大的软件,只是你之前写的一些东西。
## 深入学习
编写您发现的所有缺陷的列表,并尝试对其进行分类。您可以查看正式的缺陷类别,但是一个很好的基本集合是:逻辑,数据类型,调用。逻辑错误是,你写的`if`语句或循环是错误的。数据类型错误是,您使用变量,并假定它是错误的类型。调用错误是,你调用一个函数并且犯了错误。这些不是正式类别,但是这是一个很好的开始。