红尘踏破逍遥境
回首何处是人间

此文档记录我在解决代码问题的过程中得到的经验,虽然我没有快速的level up,但应该也差不多了吧。

1. 发现问题
首先需要重现你发现的那个bug,如果它是凑巧或只在特定环境下出现,那么一定要:
把那部分“不确定”的条件找出来。
如果可以不调试代码就重现问题,便是最好的情况。
如果该bug将导致严重后果但很难重现,不要忽略它!即便只有万分之一的几率,也比买彩票中奖要高很多!
然后是把问题描述出来,最好的办法是用纸和笔,而不是电脑打字,你需要跳出机械思维,站在地球的另一端去看,在纸上可以用随意的图表勾画,把系统环境,触发条件一一列出来,如果你可以拿着笔描绘出自己遇到的问题,那么至少会有一种解决的方法,反之你就悲剧了。
把头脑中对于此问题的初步推测用思维泡泡圈起来,这绝对有助于下一步对问题的分析。很有名的橡皮鸭解决法事实上也很有效,你需要对着一样东西自言自语,把你对问题的描述复述给它,有时候你越描述,就会得出越多可能性,这些都是你劳动的成果,把它记录下来,当你觉得自己成功说服了一只橡皮鸭时,就可以开始下一步了

2. 分析问题
进一步,就要分析问题了,可以查看代码或者使用其它工具,找出源代码中可能导致此问题的那部分,并做好记录。
不要被一大堆的问题的搞到抓狂,先找到毛线的一端,把问题分解一下,虽然差劲的代码总是牵一发而带全身,但总不至于像神经网络那么复杂。
然后使用调试工具证实你的推测,断点要下在所有可能的地方,再一一排除。
如果你所有的推测都被否决掉了,google一下你遇到的问题,你会发现总是有人和你一样悲剧,看看他们是怎样解决的,看看能不能把他们的思路推广到你的程序上来。
如果你还是一无所措,跳到第4步。
3. 开始尝试
修正代码并编译运行,重新触发问题产生的条件,这一过程有时候很短,有时候又很长,如果你要开始抓狂了,停下来,回到第1步重新发现问题。
不要盲目的尝试,撞大运这种事实际上并没有解决问题(你以为你解决了),没撞上还好,要是撞上了,难保你下次不会再这样做,如此往复,只会让你陷入无尽的代码赌徒状态。
需要注意的是,有时候解决了一个问题会导致更多的问题,快速审视你的修改,看看你到底动了谁的奶酪。
4. 调整思路
当你一筹莫展的时候(相信我,这是很正常的),继续待在屏幕前根本于事无补,这和人月神话一样,并不是你在代码上捣鼓的时间越长,就离解决问题越近,有可能你一开始就走错了路,这样只会越走越远。
最好的办法是换个环境,出去散散步,或者做点别的事情分散自己的精力,你的头脑在这时候应该自动的运转起来,有时候会带给你突如其来的灵感,当你重获能量的时候,回到第2步继续工作。
5. 持之以恒
成功者总是矢量的,方向加距离,两者同样重要,每当想要放弃的时候就应该把脾气倔起来,到第4步去调整思路,而不是彻底放弃。
6. 解决问题
享受一杯牛奶,你终于牛气哄哄的把它搞定了。
如果可能,把你的解决方案写下来与大家共享,因为总有人和你一样悲剧。
知识存在的意义就是为了传承过去的经验,站在巨人的肩膀上,你,也应该要成为巨人的一部分。

发表回复 取消回复