人们常说,编程行业的核心竞争力,是解决问题的能力,
软件工程师们,每天都会遇到新的问题,
他们不断的思考,尝试,以找到解决方案,从而创造社会价值。
我们都有自己的一套解决问题的方法,
随着经验的增涨,它们无往不利,屡试不爽。
然而实际上,问题本身却没有这么简单。
不是单纯找到解决方案就够了。
这些待解决的问题是从哪里来的?谁需要这些问题被解决?
为什么是这些问题,而不是别的问题?
不解决他们会怎样?
跳出问题求解者的思维模式,
我们才能看到新的世界。
被需要
问题解决者,经常是忙碌的,
在他们眼中,到处都有待解决的问题。
因此,不是他们发现不了问题,
而是他们眼中的问题太多了,不知道应该解决哪一个。
经验表明,
想做一个系统,以期望它能达到某个效果,
这样的设想,通常都会以失败告终。
因为,可能人们并不需要它。
一个没有人来使用的系统,它是否存在,并不重要。
因此,我们应该首先关注别人需要什么,
而不是我们可以做什么。
我们可以做的事情多了,
但很少是恰好被人们所需要的。
我们的客户
当我们做一件事情的时候,总会有人来反问我们,
这件事的价值在哪里。
这意味着,我们除了要看问题是否需要被解决之外,
还要思考,它是否值得解决。
一件我们认为有用的事情,别人可能会觉得没用,
我们认为创造了价值,别人可能会觉得浪费资源。
那怎么办呢?
其实,出现这个状况的原因是,
我们没有事先明确,与问题相关的价值判断者。
不明确价值判断者,一百个人就会有一百种不同的判断标准。
这个人通常被称为客户。
所以,尊重客户,
从解决问题之前要找到他开始。
快求解多探索
问题的解决方案,通常是不能一步到位的,
我们会面临很多选择,也不知道哪一个会凑效,
因此,问题求解是一个探索的过程。
探索对正在进行选择的人来说,是动态的,
而对已被告知选项的人来说,是静态的。
因此,提问者有可能会修改,或废弃一个已存在的问题。
将哪一个问题设置为求解目标,
比求解一个给定问题,要困难得多。
对于软件系统而言,一个理论上可解的问题,剩下的只是人日罢了。
但是,考虑把哪些问题列入工时,以及这些问题解决后是否能达成目标,
是一件非常烧脑的事情。
所以,有经验的软件工程师,
他们总是设法,提高解决给定问题的工作效率,
节省出时间来,以拓宽探索的广度。
核心问题
当有多件任务需要完成的时候,除了加班之外,
更重要的是分清这些任务的优先级。
没有完不成的任务,只有优先级不够高的任务。
在解决问题的时候,我们会遭遇同样的处境。
这个时候要考虑清楚,核心问题是什么。
哪个问题不解决,其他问题就失去了价值,
哪个问题的答案会影响整个解决方案的成败。
核心问题,就应该优先解决。
甚至可以容忍被粗糙的解决。
因此,与做任务要考虑优先级类似,
解决问题也要按重要性来排序。
结语
习惯解决别人提出来的问题,
就会不习惯向别人提出问题,
也会不习惯站在问题本身进行考虑。
跳出问题求解者的思维限制,才会看到,
我们花费时间所解决的问题,可能只是别人的一种尝试。
提问者需要答案,以探索更多的可能性,
求解者花费了时间,得到了结果,输出反馈。
因此,是先有客户,才有了问题,最后才有我们要做的事情,
而不是反之。
完全出自内心想做成一件事情,
从社会角度来看,是不理智的。