福尔摩斯在《四签名》中说过:
当你把绝不可能的因素都除出去以后,
不管剩下的是什么,不管是多么难以相信的事,
那就是实情。
这句话,简直成了福尔摩斯的标志了。
人们走进自己盲区的时候。
它能帮助你打破成见,用清醒的头脑认识问题。
观察力,是一个侦探必备的技能。
甚至比推理能力更有用。
为了避免一开始就把真相错过,这句话至关重要。
但是,不幸的是。
福尔摩斯只说出了真相的结果,却没有讲明发现真相的过程。
这其实是需要很多技巧的。
小伎俩不是长久之道
软件的解决方案就是这样,蹩脚的方案,一定不会长久存活。
可能问题本身定位错了,也可能是追求了不切实际的目标。
玩弄花招,总是难以苟存。
但是,你认为不合理的,也可能是因为自己见识太短。
所以,要努力明白事情的来龙去脉。
从而,找到解决方案的必要性线索,才能长治久安。
就好比用户的需求一样。
变动最多的地方,往往是逻辑上难以理清的地方。
而逻辑复杂对提高软件的易用性几乎没有帮助。
所以,需求一改再改,就已经可想而知了。
问题发生,是因为条件满足了,绝不是巧合
当你遇到一个问题的时候,不要惊讶。
就像安全事故必然首先起于安全隐患一样。
问题的产生,也不是巧合。
任何突发事件,其实早已潜伏很久了。
任何软件漏洞,在条件成熟时,实际上必然会发生。
所以,我们遇到事情,要减少意外性考虑。
不要存有侥幸心理。
要用真诚的心去理解它的发展趋势,那才能朝着真相迈进。
可能性的判断标准
软件问题有别于其他行业问题的一个特点就是,大部分软件问题是可以重复出现的。
虽然我们不知道问题的起因,但是我们可以手动触发它。
那么打开宝箱的钥匙,就已经在我们手中。
我们总是可以找到一个与问题结果相近的环境,而这个环境中问题不发生。
而在“问题”环境中,问题就重复出现。
这样的话,问题的现象本身,就变成衡量标准了。
我们总是可以缩小“干净”环境与“问题”环境之间的差距。
让它们尽可能的相同,但是问题只在其中一个环境中频繁发生。
我们可以再“污染”一下干净环境,也可以再“打扫”一下问题环境,只要仍然保持现象稳定。
当我们学会将“为什么”转换成了“有什么不同”之后。
真相就在眼前了。
与往常不同的结果,必然由与往常不同的起因造成
解决Bug,就好像破案一样。
这并没有言过其实。
真相就在那里,只是等待我们去发现它。
有些软件问题,不是稳定出现的,或者只出现过一次。
这就很棘手了。
不能重复出现,我们就失去了判断的标准了。
怎么办呢?
我们可以通过与历史对比来找出复现它的线索。
当你明天偶尔要出门远行时,今天你一定有不同的表现。
你会做一些平时不做的事情。
而其他人通过观察和对比你的表现,就能大致推断出你的行为。
因此,之所以出现了突发情况,一定是有突发的原因所致。
和对比两个环境不同的是,复现问题时,我们要对比问题发生的场景。
我们既要留意问题发生的环境,还要留意问题发生的时间。
通过模拟场景,可以帮我们揭开真相的面纱。
结语
软件问题困扰着很多软件工程师。
但真正去解决时,总是很茫然。
本文提供了一些思路,希望有所帮助。