软件工程常见概念

收集一些软件工程中常见的一些概念

橡皮鸭调试法

传说中程序大师随身携带一只小黄鸭,在调试代码的时候会在桌上放上这只小黄鸭,然后详细地向鸭子解释每行代码。

许多程序员都有过向别人(甚至可能向完全不会编程的人)提问及解释编程问题,就在解释的过程中击中了问题的解决方案。一边阐述代码的意图一边观察它实际上的意图并做调试,这两者之间的任何不协调会变得很明显,并且更容易发现自己的错误。如果没有玩具小鸭子也可以考虑向其它东西倾诉,比如桌上的花花草草,键盘鼠标。

类似的,有一种现象叫做 ConeofAnswers,这是一个常见的现象。你的朋友跑来问你一个问题,但是当他自己把问题说完,或者说到一半的时候就想出了答案走了,留下一脸茫然的你。是的,这个时候你就起到了那只小黄鸭的作用。

相似的概念还有不少,列如自白调试、纸板程序员或程序员的假人、想出脑外等等。总的来说,在你试图表述自己的想法的过程中,自然地在促使自己去整理思路,重新考虑问题。

《程序员修炼之道》

零知识证明

“零知识证明”(zero-knowledge proof),证明者在不透露“任何有用信息”的情况下,使验证者相信某个论断是正确的。

举例:

你拥有一个宝库,可以通过念咒语来开门。有天你想在朋友面前证明你能打开宝库,但又不想让他听到咒语。这该如何解决? 正好,他知道你的宝库里有个独一无二的宝物,如果能取出来给他看,自然就能证明你能打开。这样就无需带他到场,自己单独打开取出宝物,然后拿给他看就行了。于是,就可以在不暴露咒语的同时,证明你能打开。

无形验证码 - POW“算力验证”

PoW(Proof-of-Work),一种鉴定对方是否投入计算工作的机制。并且只需花费少量的资源,即可鉴定大量的工作。

使用散列函数实现的 PoW,就叫做Hashcash。现实中比特币使用了类似的原理,它使用了 SHA-256 作为散列函数。有权威的密码学算法作为保障,因此只能暴力穷举,而无法使用投机取巧的方法获得结果,保障了挖矿工作的价值。

目的:增加攻击者计算成本 引用: 【探索】无形验证码 —— PoW 算力验证

鸭子类型

鸭子类型(Duck-Typing),它弱化了对象的 类型,强化了对象的 功能

JavaScript 识别对象是否属于某个类有2种办法,一种是 instanceof 运算符和 constructor 属性,但描述的检测对象的类的各种技术多少都会有些问题,至少在客户端 JavaScript 中是如此。

解决办法就是规避掉这些问题:不要关注「对象是什么」,而是关注「对象能做什么」。这种思考问题的方式在 Python 和 Ruby 中右学普遍,称为「鸭子类型」

像鸭子一样走路、游泳并且嘎嘎叫的鸟就是鸭子

引用《蝙蝠侠》里面的台词:

It’s not who you are underneath, it’s what you do that defines you

FIRST 原则

  • Focused:专注
  • Independent:独立
  • Reusable:可重用
  • Small:小巧
  • Testable:可测试

能够降低应用复杂度,同时提升测试能力与重用率。

晓月风尘 wechat
扫描二维码与我相识
你我共同创造价值,记得支持一下哦~