14条原则 (0)引言这是一个系列博客,源于调试计算机网络的14条原则,适合于广泛得多的领域。
这些原则来自一本并不太著名的书,讲Novell的,这14条原则是"故障诊断和排除
的基本原则"部分。那本书是[美]Logan G. Harbaugh 著《Netware系统故障诊断与排队》。可能是
Harbaugh, L.G., Novell's problem-solving guide for NetWare
systems. The Inside story. 1993, San Jose: Novell Press ;. xii, 459
p. 或者是 Harbaugh, L.G., Troubleshooting NetWare systems. 2nd
ed. 1996, San Francisco: Network Press ;. xxv, 532 p.1996年前后,我看了这本书,这些原则带给我很大帮助。而且越是经过长时间的
考验,越显示出它们的用途。我在某计算机生产商给工程师的维修手册上看到了类似的原则;我在理工科实验
中看到了类似的原则;从本科开始,每个教导我工程和实验方法的老师,他们都
贯彻了类似的原则。希望也能帮助你。14条原则 (1) 不要怕实验,但一定要确保能返回开始试验时的设置。前面提过,我小学诸多学校之一,看起来是个专门培养贵族的学校。大约小学毕
业10多年以后,我才意识到,小学同学中很多人跟我根本不是一个阶级的。比如
我住在半农村半郊区的平房里,他们中的好多人那个时候就住在楼房中。我1994
年大学入学开始长期住在楼房中,所以虽然屋子中间桌子上的水也能结冰,我也
没有觉得有多么异常。说远了,我小学有个邱同学,她的家也住楼,似乎家长之
一或者全部是医生。提她的父母职业的意思是,她的阶级挺高的。邱同学给我印象较深刻的一件事情,是她姥姥去世的时候,她带到学校两样好东
西。一件是一本小册子,比现身份证大一圈,一寸厚,针灸的书。所以后来的某
些同学,我能跟你们扯上一些穴位任督二脉啥的,还真不是从金庸那学的。这本小册子后来归我了,我用一本作文选换的。这本作文选,似乎是用一张林彪
提词邮票换的。邱同学那个时候还带来一件好东西,包括你在内的很多同学也会同意那是好东西。那是一块钻石。有我现在的小手指甲那么大的面积,阳光下那真是光茫四射。托
子是白金或者黄金的,具体颜色我确实不记得了,但是邱同学一定记得我--因为
那上面现在应该还有我的牙印。我说:是真金的?她说:肯定啊。我就用牙咬了一口。狠狠咬的,参考电视上坏人咬黄金时的那个表情。牙印深而
大,真是真金呐。我当时还出过一个主意。据说,金刚石是石墨的同素异形体,用放大镜聚光可以
烤着。这个提议被她拒绝了。我至今也未能验证金刚石和石墨是否同素异形体。我还提议用很多不错的东西跟她换这块金刚石,当然,也被拒绝了。而如你所
知,如果我换来了,这块金刚石一定第一时间被我放在放大镜的光斑下。你现在相信那是培养贵族的学校了吧。"不要怕实验,但一定要确保能返回开始试验时的设置。"这涉及到两个问题。一,不要怕实验,二,要确保能返回开始试验时的设置。上面这个故事告诉我们,万一,只要存在这样的可能,实验的后果都可能是非常
糟糕的。当我们在一个工程中,不能确定某种技术是否应该这样用,比如一个API的参数,
其执行后果,某种特别的算法,或者进程线程同步的用法。这时,我们不应该在
工程中测试这项技术,而是应该再单独建立一个小的原型工程,它是干净的,唯
一的目的就在于测试这项技术。不在复杂的环境下测试,而创造一个相对理想的环境,原因之一就在于,复杂的
环境可能不容易恢复。在实验前,要考试后果,所以尽可能备份。以便失败以后可以再来。我小时候做过三个实验。一个实验是为了验证人自己憋气能不能憋死。我站在立柜的大镜子前面,看着自
己,不呼吸,然后发现越来越暗,最后眼前一黑。当然,你容易猜到,我的实验
失败了,否则你看到我的文字挺超自然的。眼前一黑以后,我撞在镜子上,然后
恢复了呼吸。这大约是小学四五年级时候的事。大约2年内,我才知道,人不能自主地憋死自己,会在失去意识的瞬间恢复呼吸。
我很庆幸,当时不知道另一件事:咬舌自尽成功的人,是由于流出的血液堵塞了
呼吸道而未能及时清除。可以想像,如果当时我就知道,这个实验可能会成功。小时候的另一个实验,是测试我姥家一把小刀是否锋利。用的测试用例是我的手
指。我把小刀按下去,没出血,再使劲,还是不行。结论,这把小刀不够快。但
是它能削铅笔啊。啊,我突然想起来,刀不是这么用的,应该"拉"。于是我按如
上操作,成功了。手指的血刷一下就出来了,止了半天。实验之前,我只想到实验的技术路线是否合理,而没有想到实验万一成功了的后
果。这大约是五六岁时候的事。小学的时候,就是在那个培养贵族的学校,我有一块手表,丹东产的机械表。那
个时候,这也算个不错的东西了,在我心里估计跟现在的ipad3有得一拼。问题来了,那块表是防震的。所以,我测试了。我用压腿的那种一格一格的器械
作为参照,每次抬高一格,把表扔下去,而且我注意到了是自由落体,不要用向
用力。很多次,我都失败了,也就是说,表都没有任何问题。真的是防震的啊。当然,你猜到了,后来表终于摔坏了,表蒙子裂了,表也不走了。实验,成功了。同上,我只设计了技术路线,没有考虑实验后果。那是小学五年级前后的事。当我们做任何破坏性实验的时候,我们应该想想当年那个傻小子,智商不能比他
更低。当我们想要检测某个变量的值的时候,我们也同样应该想想他,考虑无损
的检测手段。以上,是问题的二个方面,一定要确保实验是安全的,既要预计实验成功的后
果,也要考虑实验失败的后果。同时,还要考虑,是否有我们没有考虑到的程序
走向,它的后果是什么。这也是我们为什么要写实验报告的一个原因,因为可能的实验后果太多太复杂,
不能凭空想像。有的同学可能会说,现在我做的实验都非常非常简单,那么,写
实验报告的原因是:写实验报告是一种能力,它需要先通过简单的实验来训练,
然后你才能把这种能力应用在复杂的实验上。当确保实验是安全的时候,我们回到问题的第一个方面,要敢于实验,不要害怕。当你还什么也不是的时候,当你对一个系统还不怎么了解的时候,能设计实验整
坏它是非常困难的。更不用说摧毁它。黑客还是什么英雄找到系统的某个弱点,
然后爆炸啊什么的酷场景,只存在于科幻片当中,发生在你身边那台计算机中的
可能性微乎其微到可以忽略。对于一个强健的系统,只有真正了解它的人,才能摧毁它。就像,只有你真正爱
着的人,才能伤害你。而那些你陌生的没有任何期待的人,你又怎么会因为他们
做的任何事情而伤心。这个故事告诉我们:当我们是别人的陌生人的时候,可以
可着劲地折腾,但是当你走入一个人的内心,一举一动就都要小心。我还记得马
越同学文章里写到的她知道妈妈在目送她上学:我走得小心翼翼,因为我走在妈妈
的目光上面。不过计算机,强健得多了。因为它一般地,不会对你产生感情。只要你不使用机
械工具,比如榔头,你的计算机在你初学时是安全的。你不熟悉原理的工具,很
难用它解决问题,当然,也很难用它制造问题。所以,你可以大胆实验。有同学可能会说,我经常"正常"用着用着啪一下机器就不好使了。这可能勉强算大胆,但这不是实验。实验,必须有记录。这也是为什么航海家们
要记航海日记的原因--即使我们挂了,也要让后来人知道发生了什么。实验时,你必须记录你每一个动作。详细到你的同学可以根据你的记录重复你的
实验--这时,通常也可能重复出你造成问题的动作来。如果他按你的记录操作却
没有产生相同的问题,请参照后面的原则"对比法"。也有的同学说:我也不知道我做了什么,我不记得我做了什么,反正毛病就出了。那么你有记录么?如果有记录,那么分析记录,重复实验吧。人类区别于动物的
一个重要方面,就是能从大量的现象中猜测出原因或者瞎编出原因来。如果你没
有记录,那么重复实验并做记录吧。这种重复,不仅带给你如何解决这一个问题的知识;同时,它带给你更重要的,
实验的技能,这些技能也适合于以后更多的实验。以前我读到过《读者》故事里印弟安还是什么老人的,对要走出大山的年轻人
说,人生前三个字是"不要怕"。这和咱们的原则是一致的。后来这个年轻人历尽
沧桑回到山里,老人去世了,给他留了另外三个字,"不要悔"。咱们的原则是,
要确保能恢复到实验前的设置。为什么我们的原则不同于人生呢?因为我们工作在虚拟的世界中,所以,回到过
去真是易如反掌。前提是,你得记着过去是什么样的。你真的还记得过去么,比如你为什么走到此你,比如你曾经的理想?