solving.md 3.4 KB

问题处理能力

包括问题解决和问题规避两大方面。

问题解决能力

举个例子:在公交站有清楚明白的站牌、而且有其他等车的人可以帮你解答的情况下,却非要拦住一辆2路汽车,问司机这个站过不过8路。

我是完全没法理解这种人脑子长了是有什么用处的。独立思考、独立解决,不依赖他人。要培养自己独立解决问题的能力,而不是培养别人解决问题的能力。别人帮你是情分,不帮你是本分。所以解决问题首要的原则应该是:靠自己,少烦人

问题定位

发现问题第一步应该是思考问题产生的原因,可以通过日志记录、错误信息着手。多动手,少动口,不能瞪一眼没看到问题所在就立马张嘴问别人,这不仅会使自己的能力丧失,也会浪费其他人的时间。

在开发过程中,最常见的问题就是应用崩溃。往往这类问题,很容易找到源头。

举个例子,以下是命令行报错信息:

module.js:474
    throw err;
    ^

Error: XXX '/Users/xxx/xxx.js'
    at Function.Module._resolveFilename (module.js:472:15)
    at Function.Module._load (module.js:420:25)
    at Module.runMain (module.js:607:10)
    at run (bootstrap_node.js:420:7)
    at startup (bootstrap_node.js:139:9)
    at bootstrap_node.js:535:3

这是最浅显的错误信息,出错的文件位置、出错的行列号、出错的原因全部都一览无余,找出对应部分问题即可。

另外还有一些,如:

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at Object.exports._errnoException (util.js:1022:11)
    at exports._exceptionWithHostPort (util.js:1045:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1090:14)
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 6379

只知道错误信息,不知道具体出错位置的,也可以根据错误信息很快定位到问题。

其他一些问题,如语法问题、死循环、逻辑错误,在调试过程中很难排查,则需要耐下心来单步跳入检查。

解决问题

大多数能遇见的问题都不是什么难题。即便觉得是难题也无非是经验的不足。所以,要善于利用搜索引擎,多记录,多整理,多总结。

有一些顽固问题可能会牵一发而动全身,则需要考虑成本最小化,不能捡了芝麻丢了西瓜。

另外,切忌拆东墙补西墙。要么根治,要么不治。

问题规避能力

1.避免犯相同的错误

很多年轻人工作起来似乎从来不多加思考,不分析,也不想象,只会跟着别人的指示去做事,凭着自己的感觉去工作。结果,上次做过的事情,这次还是不会做。就像那些路盲一样,一个地方去过很多次,永远也不记得如何走。

你犯的错误,大多数都在反复,学会思考总结,避免总是在犯相同的错误。

2.举一反三

再进一步,在思考总结的基础之上,学会举一反三,能够有效规避相似的问题。

会的多了自然错的就少了,技多不压身。

3.科学严谨

严谨是不犯错的前提。

如:

  • 做事有条理、有规划(可以用一些GTD工具,如TODO List、奇妙清单、Omni Plan等)
  • 养成良好的编码注释习惯
  • 测试驱动开发(编写自动化测试用例)
  • 培养大局观和洞察力