直觉(英语:Intuition),又称为直观,通常被描述为,一种不用经过太多思考过程,很快就能出现的直接想法、感觉、信念或者偏好。当我们有某种信仰,但是不确知它的原因时,通常会将它归于是一种直觉。认知科学认为这是因为生存的演化压力而产生的人类心智能力,让人类可以快速做出判断,采取行动,它通常与右脑连结在一起。心理学与超自然学对这个能力深感兴趣。(以上内容来自维基百科)
有很多次,在我向新人演示或者帮助Ta解决宕机或BUG的时候,他们都会用诧异的眼神看着我,一脸疑惑地问道:“这么快地定位到问题,你是怎么做到的?”,然后我很装逼地对Ta说:“直觉”。当然,相视一笑之后,我还是会整理一下思路,然后解释一下推理过程。
可以快速解决问题的直觉,并非朝夕之间就能获得的。至今做了七年服务器端开发,遇到过各种各样的宕机和BUG,凌晨三四点被叫到公司家常便饭,也就仅仅获得了针对我们游戏服务器出的问题的一些直觉而已,多数时候还是挺准的。每次当我遇到一些疑难问题的时候,我心里都会默默在念:Every thing happened has a reason。事出必有因,现在没有找到原因,只是因为对问题的认识和分析还不够,考虑的还不够全面,应该分析所有可能的已知因素。就这样,你必须熟练并理解手头的各种工具和代码。正所谓熟能生巧,见得多了,理解的深了,在别人看来很难的问题也不是问题了,这是一个持久的过程,需要大量的时间和机会,当然征服问题的信念也是很有必要的。
当一个BUG/宕机出现的时候:
首先要弄清楚问题,要了解正常的代码逻辑,若是中途接手别人的代码,那就得硬着头皮去理解别人的代码。
然后,思考问题出现的环节,然后针对出问题的环节仔细分析代码的每个分支,往往一些很难复现的BUG很容易在分析代码的过程中发现。
最后要想到的才是复现BUG并使用调试工具进行追踪调试。
PS. 记得之前在笔试阅卷的时候,看到一个关于调试器的回答,问题是:“请写下你的调试工具及其简单用法?”,有一个同学的回答:“脑子”。开始拿来当笑话,笑过之余,想一下还是挺有道理的,脑子才是最牛逼的调试器,可以进行情景模拟,还原问题发生的各种可能性,请问GDB可以吗?哈哈。