Udacity调试课笔记之简化的哲学思考

 

Udacity调试课笔记之简化的哲学思考

       干货无几,水文续之。

       嗯,作为一个完全没有哲学概念的人来说,写这么一篇笔记,那绝对比水文还水了。

       接上一回简化失败,我们用Delta调试法从大堆沙子输入中淘到了,呃,炸药。这些输入放到熔炉里,炸药就会爆炸,所以我们需要学会使用Delta自动地完成沙中淘炸药的过程。

       从哲学的抽象层次来看,这堆炸药就是爆炸的起因(cause)了。

       呜,Zeller教授不是这么说的,照刚才那么一说就一点问题都没有了。Zeller说的是,Delta调试法不只是简化了输入——从沙子中淘到炸药,关键的是这些简化后的结果就是失败的起因。这就是哲学上的理解。而问题就是为什么这些简化后的结果就是起因呢,为什么Delta调试法这么厉害,一来就找到失败的起因呢?


       算起来,起因这个东西,没吃过猪肉还没见过猪啊——这年头可能还真有人没见过猪跑,只见过猪肉了吧,但还是要有个比较准确的定义。

       哲学上的因果(causality)关系可能有点不太直观。哲学中的起因(cause,原因)定义为:

             如果存在A,B两个事件,AB前,所谓引起(cause) B ,就是如果A没有发生,则B也不会发生的情况。

       

       Zeller教授举的是球打烂玻璃这个事件。让我想到快乐大本营某一期,应该是最近一次宋茜来的那期中,维嘉和何炅的心有灵犀第一题就是打烂玻璃,维嘉急得直叫“臣妾做不到”大笑,说起来,他如果把这个场景表现一下应该就容易多了“嘭~呼~哐啷~快跑啊”偷笑

        

       扯远了,话说有一些哲学家都置疑因果的存在——物理上,相对论挑战了很多直观的时间认知,但是因果关系上好像还是没有挑战。既然哲学家自己都置疑因果的存在了,为什么还要讲因果、起因,这个在调试中很有用吗?

       答案是噎死!就像我自己举的从沙子中淘炸药一样,炸药会引起熔炉爆炸,这一点很明显,但假设这些炸药长得跟沙子像近亲一样(颗粒炸药吗),就不知道是哪些“沙子”会爆炸了。

        太阳当空照,花儿对你笑,小鸟说早早早,这些跟你背上炸药包有关系吗?所以Delta调试法就会把沙子(无关项)全部过掉,只留下炸药(有缺陷项),而这些有缺陷地方就是程序失败的罪魁祸首了。

        最后,起因加强版重磅推出——实际起因(actual cause)。可能应该要有个更规范的中文术语来代表才好。

        为什么会有实际起因这个概念?因为通用的起因会有一些误导作用,比如说,<select>Mozilla浏览器弄趴下了,那不用Mozilla了呗,要么,这家公司就不要成立,这个产品不就没有了吗?这些说话听起来很荒谬,但不得不说,还真符合前面的起因(cause)的哲学定义。所以,就需要更加准确的实际起因这个概念了。

        何谓实际起因:

An actual cause assumes and change as little as possible, yet changes the effect.


        实际起因除了改变特定的结果——程序失败的结果,其他影响会尽可能小。也就是副作用尽可能小。不要怪我,那个assume我确认不了。

        

        Delta调试法所实现的正是找到了实际起因——从纷繁复杂的背景中,找到了错误的实际起因——输入中的一个很小的子集,子集里面每个元素、每个项、甚至每个字母都跟错误的产生有关。所以Delta调试法才这么厉害,成为Zeller教授的代表作了。


       最后的最后,我们已经从Delta调试法得到了实际起因的输入了,要开始修复程序的缺陷了。在修复程序的缺陷时,要确认这个缺陷是否满足两点:

       1、它是个错误。让我想到了郑愁予的《错误》,可惜我不是文艺青年,一向觉得那诗实在是无聊+八卦的典范。

       2、是它引起了程序的失败。

      它得是个错误,我们才知道如何去修复它。就拿引起Mozilla浏览器崩溃的、由Delta调试法从800行代码中挑剩下的<select>标签来说吧。这个标签引起了错误,但它本身却不是个错误,首先它语法是对的,其次再怎么也不该把浏览器给弄趴下了。所以Delta调试此时返回的实际起因<select>是一个导火索,真正“潜伏”在人民内部的还是代码中的缺陷,不过我们此时很容易知道缺陷是什么了,就是Mozilla浏览器中处理select标签的那段代码。

       它引起了程序的失败,这样在我们修复了它之后,程序才不会再度失败,最起码不会再出这个错。

       水文笔记一篇送上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值