解决问题的能力

  

作为程序员的一个很重要的能力,就是从纷乱的表象中找到问题,说白了,就是从众多的蛛丝马迹中寻找事实的真相 ( 听起来有点像破案吧 ) 但不管如何,逻辑推理能力很重要。不过在计算机系统上的推理,还多了几条基本定律:
1. 因果定律:
计算机是一个逻辑性绝对强的东西,有因必有果。你给他一颗豆子,绝对不会长出西瓜来
2. 计算机不会犯错误
出现错误必有因,绝对不会无缘无故;没有无厘头的事情,只是没有找到最本质的原因。所以当你苦苦找不到原因,一定提醒自己:这是我的错误,不是计算机错误。
同样推理出:在windows上开发,99.99%是我的编程错误,0.01%是Microsoft的错误。如果你不幸中了那0.01%,恭喜你,马上去买彩票。
3. 计算机在相同条件下,错误可以重现。
a)        引申 1 如果错误不能重现,是运行条件发生了变化
b)       引申 2 如果希望错误重现,尽量模拟当时环境。
c)        备注:微软的蓝屏除外,属于 0.01% 概率
 
解决问题的心态
1. 必胜的信心:不管你多么不了解问题的前因后果,首先要树立的就是: 问题肯定会被解决。这样你就可以斗志昂扬的开始战斗了。听上去有点像唐吉珂德骑马冲向了风车,不过反过来想,如果认为问题很难解决,心里就会给自己找到种种借口“我怎么可能解决这个问题” ,“这个问题又不是我造成的,干吗让我解决呢?” ,“这个问题本来不应该我解决的” ,“应该有一个经验丰富的人”。本来可以有100个脑细胞用来思考解决方案,结果其中50个在寻找借口,解决问题的概率就减少了50%;
2. 享受成功的快乐:解决问题最大的奖励就是 享受成功,尽情享受解决问题的荣誉和达到目标的快乐,并牢记这一个的感觉。呵呵,这样有助于进入下一个问题的解决;
3. 不要有侥幸心理:侥幸心理表现有二:
a)        不做任何改进,期待问题可以随时间流逝。这种想法明显违背 基本定律二:在相同条件下,错误可以重现。比较常见的后果是同样问题会在你意料不到的时候出来,给你一个突然袭击。
b)       随便改个地方,看看是否问题解决了。请尊重 基本定律一:因果定律。不排除你会被天上的馅饼砸中,但侥幸心理不是解决问题的主要办法,会减少对逻辑推理能力的锻炼。 以逻辑推理为主,以尝试为辅。
4. 耐心:好的猎手要有耐心。
 
解决问题的技巧
总结一下个人的小技巧,
1. 通过调试和日志定位错误的位置:定位错误就是走向成功的一半,不,应该更多,经常离成功只有一步之遥。当写程序时,我发现IDE的调试环境非常有帮助,可以单步跟踪,发现异常,记得我学会单步调试时,当时的心情是相当的幸福,F8/F9/F10运指如飞,仿佛所有的编程问题都可以迎刃而解;不过现实环境常常是残酷的(你一定要承受住这个打击):我们经常没有调试环境,比如发布到生产环境,或者换了某种低级开发语言。这时日志就非常重要了,真的很重要。它能有效地帮助你定位错误,因此,请把日志放到你的开发计划中,不要等到出现问题再记录日志,亡羊补牢。
2. 二分查找法定位错误
在数据结构中二分检索是一种很快的检索算法,记得有一次一个几千行的存储过程出现错误(不是我写的,业务逻辑也不清楚),要在一天内解决。看懂每行逻辑是不现实的,通过二分查找很快就找到问题原因。同样在代码调试中也可以采用二分检索,可以很快定位错误。
3. 利用 Google
请原谅我对Google的一往情深,记得2003年Google被大陆封杀时,我几乎要考虑是否离开编程这个行业。我想大家都在用Google,但不知为什么总会遇到有人问我些问题,告诉我不知如何解决。而我只是打开google,输入了一些关键词,就找到了答案。所以遇到问题时请google先。
4. 区分问题和目标
a)        在解决问题前首先明确: 解决这个问题所要达到的目标是什么?《你的灯还亮着吗?》这本书里有一些小故事描述了如何定义问题。
b)       当我们解决问题时,会针对问题钻的非常深入,这时切记 不要迷失目标。所以在你发疯前,尝试换一种方法,条条大路通罗马。当你死活找不到代码中的错误时,请换一种实现方式。
5. 积累经验,扩大知识面
这个不属于技巧,不要只作一类事情,会限制思路。扩大知识面也不仅是追求新知识,很多基础知识反而是更重要。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值