练习 3:质量

原文:Exercise 3: On Quality

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

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

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

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

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

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

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

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

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

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

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

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

研究性学习

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

深入学习

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

笨办法学 Python · 续 练习 3:质量相关推荐

  1. 笨办法学 Python · 续 中文版

    笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓 ...

  2. 笨办法学 Python · 续 第二部分:简单的黑魔法

    第二部分:简单的黑魔法 原文:Part II: Quick Hacks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大 ...

  3. 笨办法学 Python · 续 练习 33:解析器

    练习 33:解析器 原文:Exercise 33: Parsers 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 想象一下,你将获得一个巨大的数字列表,你必须将其输入到电子表格 ...

  4. 笨办法学 Python · 续 练习 0:起步

    练习 0:起步 原文:Exercise 0: The Setup 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要设置和配置一些工具来学习此书.有可能你已经有了很多这些东西 ...

  5. 笨办法学 Python · 续 练习 52:`moreweb`

    练习 52:moreweb 原文:Exercise 52: moreweb 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 现在,你已经使用 Python http.server ...

  6. 笨办法学 Python · 续 练习 24:URL 快速路由

    练习 24:URL 快速路由 原文:Exercise 24: Fast URL Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们将结束数据结构和算法的部分,并将 ...

  7. 笨办法学 Python · 续 第三部分:数据结构

    第三部分:数据结构 原文:Part III: Data Structures 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你正在以你的方式构建个人流程,它让你以有限的阻碍快速 ...

  8. 笨办法学 Python · 续 练习 32:扫描器

    练习 32:扫描器 原文:Exercise 32: Scanners 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我的第一本书在练习 48 中非常偶然涉及到了扫描器,但现在我 ...

  9. 笨办法学 Python · 续 练习 28:`sh`

    练习 28:sh 原文:Exercise 28: sh 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你现在将继续你的 TDD 风格流程,但你将添加一个小型的 Hack 会话来 ...

最新文章

  1. : error c2062: 意外的类型“int”_Go 命令行解析 flag 包之扩展新类型
  2. 清除memcached缓存数据的方式
  3. android ndk开发之Log日志(一)
  4. 互联网下半场的角逐,玩转轻资产的大数据服务 | 阿里云栖开发者沙龙大数据专场(北京站)干货集锦
  5. 阿里带火的中台,究竟是个啥?
  6. Windows组建网络服务 ——DNS的组建与架构
  7. 关于ShowModalDialog数据缓存的清除
  8. (1)DBA查询:数据库
  9. 微博粉丝精灵_腾讯与精灵宝可梦公司宣布合作开发新游戏
  10. Java 时间处理 Instant
  11. 行为型模式之 状态模式
  12. android百度地图单点定位_Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡...
  13. 豆瓣评分9.2,GitHub 3.3k的学霸笔记终于出书了!获得李宏毅等大佬好评 -- 文末送书...
  14. AIDL 发生异常的原因 Android java.lang.SecurityException: Binder invocation to an incorrect interface...
  15. 【阿里在线技术峰会】李金波:企业大数据平台仓库架构建设思路
  16. 三明学院信息工程学院网络攻防大赛-初赛官方解题报告
  17. AdGuard自定义拦截规则
  18. 根据报告数据,2021 年 Q1,全球小说 App 推广榜 Top20 里面,有 11 个 App 来自中国厂商。最新版本已经上线
  19. ACM进阶大一到大三
  20. CPU卡内部认证与外部认证

热门文章

  1. (9)Zynq UART控制器介绍
  2. (32)FPGA面试题时序约束
  3. (35)SystemVerilog语言编写呼吸灯
  4. java concurrent 框架_Java Concurrent 框架图
  5. 6.GD32F103C8T6 定时器的基本使用
  6. python牛顿法解非线性方程组_萌新请教牛顿法求解三元非线性方程组
  7. Ubuntu下构建gstreamer开发环境
  8. 嵌入式Linux系统编程学习之十二守护进程
  9. 编程函数c语言,C语言编程(练习1:函数 )
  10. 计算机学院志愿服务活动 2013/12/23 爱心6+1,计算机学院赴淮南南站开展志愿服务活动...