读薄《你的灯还亮着吗?》

本文链接:http://woaitqs.github.io/logic/2015/01/05/how-to-solve-problem/

如何解决问题

问题太多了,实在太多了。

这是大多数项目开发里面遇到的情形,好不容易翻山越岭地解决了一个Bug,结果冒出另一连串Bug(不要和我谈OO,GOF这些的)。不只是项目里面,人生简直就是用来和问题搏斗的,打完一个小问题Boss,迎面的而来是大问题Boss。

如果所有问题都有一套解决方案来应对,这个世界会幸福好多。可这是妄想,问题太复杂,根本不可能完全解决,也不会有一个通用的方案(各位读者不要按「Ctrl+W」)。

近来略微闲下来,也仔细想想「问题」这个复杂的问题。得出一些有意思的看法,和大家分享。

问题是什么


一花一世界,一叶一如来,春来花自青,秋至叶飘零,无穷般若心自在,语默动静以自然。

问题是「理想世界与现实世界的差异」的心理学定义

问题真的只是一种「心理学定义」,你觉得这是问题,那么它就是问题,你不觉得他是问题,那么它就不是问题。听起来挺玄乎的,可这就是一个感受问题。隔壁搬砖王老五早起发现自己的波斯猫丢了,吓得下巴掉到了地上,你却不屑地走过,“这个死娘炮”!王老五的问题对你而言就不是问题。 问题也是一种差距,理想情况下你是王思聪,所以买房,泡妞,放浪形骸这些都不是问题,可你现实里面只是一个上班的白领,所以买房,泡妞,放浪形骸这些都是你要面对的问题。

理解了这个过后,可以适当地调节下自己的心理预期,好多问题就不是问题了。不去想明天双色球就中个超级大奖,那么就不会把当下的两张彩票当做问题了。这些问题都是佛说的「妄念」

我们面对的问题是什么


除去妄念,剩下来的都是实实在在的「问题」。这些围绕在身边,让人心里有落差的烦心事到底是什么?

想要很好地定义一个问题,这几乎是办不到的事情,所以我没法回答副标题里面的问题「我们面对的问题是什么?」这里可以通过一个简单的事情来说明一下。写程序时,避免不了Bug的出现,解决Bug常是让程序员头痛的问题。有一个Android项目里面需要使用Blur的效果,于是在Github上搬砖下来一个BlurImage项目的例子,顺利地完成了产品狗的需求,Blur效果上线后,问题接踵而至,OutOfMemory Exception总是时不时地可以在堆栈里面发现。「如何避免OutOfMemory?」就成了一个挡在眼前的问题。在发现CP妹纸配的图片里面有2张是1024*456后,当时就怒了,“你难道不懂Android的内存很局限吗?”,想当然地以为问题是「CP如何保证图片大小合适?」。问题过了一段时间后,OutOfMemory真的减少了不少,更加确认了问题就是「CP如何保证图片大小合适?」。直到一个偶然的机会,我才知道真实的问题是「运维这边的Bug导致图片的压缩服务没Work」,运维修复这个bug后,OutOfMemory自然而然就少了,当然也许事实还不一定是这样的。

即使问题已经解决,你依然无法确认问题的定义是否正确。
定义问题是很困难的事情,但别停下寻找真相的脚步。特别是Programmer,对于真相的探求是进步的阶梯,而且这关乎我们的职业道德。

问题一定与人有关的,只与物相关的那叫客观规律。而问题对于不同人而言又不是相同的,因而这里要将「问题是什么」,定义为「我们的问题是什么?」。公司最近开始运营班车,而某些职员住的比较远,从班车运营的费用而言,对这些部分员工专门开通班车是不太现实的。这个时候对于公司和职员而言问题就是不一样的。公司的问题是「如何设计合理的线路,让这些住的远的人在合适的地点搭上其他班车?」,职员的问题则是「如何住得近点?」

每个人的问题都不一样,但我们可以换位思考。

这样看来,我们需要重视解决的主要还是「第一印象」?问题追溯起来,可能太负责,在大多数情况下,我们需要针对这「第一印象」提出解决方法。

怎么解决问题?

在心惊胆战地尝试定义问题后,如何来解决这些问题了?没有统一的公式来应对,但可以提供一些角度来思考日常问题的解决。首先问问自己是否需要解决这个问题,谁来解决这个问题?

谁来解决问题?

某班级由11个学生组成,他们每周三下午上3小时课,讨论问题的解决方法,而且老师是个聪明人。尽管12个人中有11个不抽烟,剩下的那个人却有严重的雪茄瘾,这让大家错愕不已。教室很小,通风不畅。那位学生的雪茄烟虽然廉价,但烟雾扩散得非常快。第一次上课时,刚上完第一节课,烟气就已经布满了整个空间,只有最矮的学生幸免于难,几个高个子的脸都已经变绿了。而吸烟的同学还在一脸幸福地吞云吐雾,完全没有意识到有任何问题。老师是个问题解决者,在他看来,显然出现了问题,或者说问题很快会出现。

如何解决这个问题?按照一般的思路下去,大抵的解决方案是“开掉抽雪茄的学生?”。显然一般思路下去,我们会按照老师的角度做下去,提出类似于惩罚抽雪茄学生的方法。思考下「谁来解决这个问题?」。也许更好的方案应该有那些参与的学生来提出。事实上,最后的解决方案是 – “抽雪茄的同学是因为和同学之间无交集,无聊才抽烟的。于是大家决定,每天有一个同学带零食给大家吃,边吃边分享,大家团结过后,自然就不会有这个问题了”。

在寻找方法来解决问题时,切记提醒自己,「有没有更合适的问题解决者」?

需要解决吗?

不需要把力气都放在与世界为敌?那样太累。 有些事情,可能不需要解决,就像没必要拼上老命去当个公务员。在职场里面,潜下心来思考下老板让你做这个事情是为了什么?以前就听说过一个例子,老周是一个很牛的员工,但是他所在的公司又没有适合他的岗位,所以公司就给他开了较高的薪水让他去完成一些复杂的事务,其实老板和老周都知道,这些事情没必要解决。生命太宝贵了,就只一次,那些没必要的问题真没必要去解决。

发现问题的所在

解决问题难,「提前发现问题更难」。三国演义里面的蒋干(事实上是一个有名的才子)自以为成功说服周瑜,可实际问题是「他被骗了」。我们往往醉心于解决了某某问题,却忽略了可能带来的问题,热衷于线程带来方便,忽视了程序的碎片化。当发现问题后,问题往往可以得到解决,在覆水难收之前发现问题才是最难的。

看看你对问题的理解,如果想不出至少3个可能有出错的地方,你就没有真正理解这个问题。

似乎这样的难题没有有效的方法,但有两个建议。「常换位」和「常回顾」。

每每站在不同的角度上去思考问题,总会发现不协调的地方。
我们在不断前行的路上,常回头看看,有没有不对劲的地方。

怎么解决问题

具体到解决问题时,却没有什么可以可说的了,毕竟这是一个领域性极度耦合的事情。 个人有愚见,可以沿着这条思路一路下去:

```
    「需要解决吗?」 -》
    「谁来解决?」-》
    「不管和自己有没有关系,请尝试思考如果和自己有关系?」 -》
    「换个位置想想?」-》
    「解决问题」-》
    「回顾以上」
```

文档信息


Published: January 05 2015