专栏读到现在,你有没有想过,公司招人的目的是什么?你可能说,是为了完成工作任务。是的,进一步说,是为了解决问题。这里的问题,可能是技术问题,也可能是业务或者管理问题。工作,就是一个问题跟着一个问题,面试官考查你的经验、技能、潜力、动机,归根到底,就是考查你解决问题的能力。

作为“贯通篇”的最后一篇文章,我们综合看一下:解决问题的能力究竟体现在什么地方,怎么培养解决问题的能力,以及怎样在面试过程中展现你解决问题的能力。

什么是解决问题的能力

说到解决问题的能力,我们先要定义什么叫“问题”。我在这里把它划分为三层含义:错误、提高、未知的机会。

这三层内容其实本质是一样的:改变现有的工作。我将它们笼统地称为“问题”。说到这里,你是否对“工作就是一个问题跟着一个问题”有了新的理解呢?

说回到解决问题的能力,它体现在找到问题找到解决方案复盘问题三个步骤上。这需要很强的逻辑思维和抽象能力,你可以遵循一套通用的方法或者模式来解决问题,从而让自己更加专注在问题的解决方案上,以此为基础探索不同的选项,然后基于目标和项目经验对适用选项进行决策。

1. 找到问题

这是指发现、分析和定位问题,包括看到问题的“症状”,通过分析调查,找到问题发生的原因。

对于错误,作为工程师,有时会在“症状”未暴露时,发现代码、配置或者数据错误,直接更正,避免损失。这种“由内而外”发现问题的方式,是损失最小、最省力省时的做法。

但是很遗憾,很多“雷”都是在事后通过“症状”发作,甚至形成“综合症”后才被发现的。这种“由表及里”的逆推调查方式,难度大,压力也大,损失也大。也正因为如此,你需要更强的逻辑思维能力,以及拨开现象看本质的能力。所以,我们经常嘉奖那些力挽狂澜的救火队员。可是,那些一开始就把质量做好,无声无响把问题消灭于无形的人,不是更应该奖励和给予认可么?

对于提高和机会,无论是技术的、业务的,还是管理的,首先要能够识别出来。我们很容易识别错误,但是很难在平庸中想清楚怎么提高。

面试中,我常问应聘者:“这个项目有什么待提高的?” 答案大体可归为以下几类:

在发现提高和机会之后,你需要将之界定成结构清晰的问题,包括目标、边界和验收标准,从杂乱的工作中抽离出低耦合、高内聚的工作块,以便于团队协作,各个击破。而问题定义的效果,依赖于你对工作细节的认知深度,还有你的项目经验和洞察力。

分析问题方面,菜鸟和高手的区别就在于:前者在分析问题时流于问题表象,无法直接触及问题本质;而高手正好相反,他能够直达问题本质,并且能够快速分析和定位问题。因此,你重点需要培养:从问题表象(比如日志、系统错误、后台数据等提取出相关信息),直接映射到技术或者业务上导致产生这种表象的问题本质。然而,这并非易事,这要求你在技术和业务领域日积月累,拥有良好的技术感知力,并且注意业务上不断精进,才有机会做到从问题表象中抓取指向问题症结的重要信息。

在分析问题的基础上,项目中产生的信息都值得你深入挖掘,这个信息意味着什么,为什么是那么回事,对你会有什么样的直接或者间接影响,任何时候你都要有批判性思维,对自己也不丝毫吝啬。因为,快速定位问题的能力取决于你所提取的信息以及这些信息间的关联,有些重要信息可能就是你脑中闪现过的,有些重要信息或许就隐藏在某位同事不经意的聊天中,有些重要信息甚至需要从以前解决的问题中推导出来 …… 在此我不一一列举。

2. 妥善解决问题

当你找到了问题的原因之后,可以遵循下面的步骤来解决问题:

首先,来看如何探索方案。解决方案并不唯一,它可能是:

因此,探索解决方案是一个思维发散的过程,要发掘出多个方案,你不能局限于惯性思维,而应该相信总有不同或更好的解决方法,从而积极探索。这里也恰恰体现了你的学习能力和创新能力。

其次,再来说决策。既然有不同的解决方案,如何确定哪个最优?什么叫“最优”呢?这需要你充分了解问题的上下文(包括技术上或者业务上的约束、组织的策略导向,甚者可能是团队政治因素等),问题的解决一定脱离不了这些上下文的制约,你需要综合考虑这些约束从而优中选优,而不是寄希望于某方面最佳。如果只放眼在最完美的技术上,解决效果不一定好。

说到技术方案的决策,顺便提一下,我会考查应聘者对比多个技术方案的方法、维度,以及衡量标准。如何评估方案的合理性、易用性,资源消耗,次生问题,用户和团队的接受度等,这些方面都是决策中需要考虑的。

最后,来谈谈实施方案。根据问题的影响面和复杂度,解决方案可以分步实施:

当同时处理多个问题时,一定要分清轻重缓急,明确主要问题和紧急问题,着重于解决那些有最大价值的方面;也一定要保持开放的头脑,勇于采用新的手段,以及探索不同的解决方案;同时,需要把问题从大化小,从复杂化简单,运用分治的思想,这有利于团队成员一起更高效地协作。

面试的很多问题都和解决方案相关。对于技术问题的解决,这是考查应聘者是否“扎根技术、着眼业务、懂得管理”的好时机:

这部分是面试中项目展示的重头戏,你一定要慎重对待。

3. 验证和复盘

也就是说,你需要验证结果是否达到了预期。通过持续监控修复后产品的运行状态和结果,以及用户反馈,来看问题解决的满意程度。

问题的解决或许迫于时间或者投入产出比的考量,采用的并不是最优的解决方案,没关系,上面说到问题上下文的限制,因为它的存在,我们在决策时设定了对解决结果的容忍度。只要在容忍范围内,就是可以接受的。

对结果的验证和满意度的衡量,可以触发我们对解决这个问题的整体复盘。我们除了要知道这个问题是怎么解决的,还要知道为什么那么解决,以及如果用其他解决方案会怎样,这往往需要你进一步深究下问题涉及的技术或者业务,积累的经验对于你解决新问题会非常有益。

而且,在解决问题时的忙碌中,我们容易“当局者迷”;在事后,你终于可以冷静下来,跳出局限,从客观的角度,审视自己是否思路正确,有没有考虑不周全的地方,更容易做到“旁观者清”,这就是复盘的好处。

修正错误的效果

评价一个人解决问题能力的强弱,除了看以上解决问题的过程,还要看最终效果。对于修正错误类的问题,我把效果分成以下四个层次。

  1. 只消除了当前影响。这种修复大多只是解决了表面问题,去除了症状,所谓“头疼医头,脚痛医脚”。比如,某种不可重现的订单金额出错,只去数据库里把金额改成正确的数值,而不去分析订单计算逻辑。这种“打补丁”的方法,只是在止血的情况下使用,而事后,你一定要找到问题根源彻底修正,否则问题还会反复发生。

  2. ‌彻底根除了错误。这是我们希望的长效解决方案。这要求分析足够深入,触及内部逻辑,进行有意义的修复,避免以后此类错误再次发生。

  3. ‌变问题为机会。这是指当我们解决问题时,发现机会,扭转局势,取得收获。举个例子,我们这个专栏的文章,有一次发现被某个公众号不合规地抄袭。极客时间的小分队在与公众号主人交涉后,不但顺利使对方撤掉不合规的文章,还和对方谈成了合作伙伴。

  4. ‌分享方法,教导他人。在对问题复盘的过程中,把经验教训的总结文档化,分享给相关的人和团队,供将来出现问题时参考,教导他人不要再犯同样的问题。这样一来,你的经验和能力使整个团队都受益,也是你影响力和领导力的展现。

以上是逐层上升的关系,希望你在解决问题过程中,尽量利用自己的技能,力所能及地做到最好。这样,面试时你才会更自信地展示自己解决问题的能力。

解决问题能力的培养

要系统地讲解决问题能力的培养,这样短的篇幅是很难讲清的,在此我只希望能够为你提供一些方法和思路,并用一个尽量简单的表格形式呈现,以供你参考对照。其中,你可以从左边对问题的把握入手,着重于要解决的问题的方方面面,不断培养分析问题和解决问题的能力。篇幅所限,这里我就不再展开细说了。

总结

总结一下今天的内容。我们讨论了解决问题能力的体现:在识别问题和定义问题时,既要识别错误,也要能明确怎么提高;在解决问题时,要尽量探索多个方案,周全地考虑问题上下文的约束,分阶段地实施方案;最后,别忘了验证结果和复盘。

我还谈到了解决问题的四个层次:只消除当前影响、彻底根除错误、变问题为机会,以及分享和教导他人。期望你在面试时有针对性地运用好前面讨论的方法和技巧,力争更立体地把你解决问题的能力呈现给面试官。

解决问题的过程中,要把“贯通篇”的几篇文章所讲的学习能力、精益能力、协作能力、领导力综合运用到实际工作中,追求预期结果。想一想你在其中,是解决问题的主导者、中流砥柱,还是救火者?每一个角色都有它存在的价值,但我希望你至少是个辅助者,不要总做旁观者,千万不要成为阻碍者。

思考时间

结合你的工作经历,请思考下面的问题:

欢迎你在留言区留言,一起讨论。如果今天的文章让你有所收获,也欢迎你把它分享给你的朋友。

评论