<audio id="audio" title="26 | 你解决问题的能力有多强？" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/26/f2/268cfb1074a5b44bc32e04a5205596f2.mp3"></audio>

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

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

## 什么是解决问题的能力

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

<li>
**错误。**需要找到问题原因，进行修复。
</li>
<li>
**提高。**当前状况不错，但还有上升空间，可以进一步提高。比如，提高吞吐量。
</li>
<li>
**未知的机会。**新的尝试，和拓展到一个新的领域。比如，研究一个新的课题。
</li>

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

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

#### 1. 找到问题

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

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

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

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

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

<li>
“项目质量很好，没什么特别要提高的。” 这类回答可能是怕暴露问题惹火烧身，也可能是真的没看到什么提高项。
</li>
<li>
“因为工期紧，有些技术债，需要提高下。” 这类回答提出了一些不痛不痒的普遍问题，不能展示应聘者的独到见解。
</li>
<li>
“这个社区产品用户活跃度半年不见增长，调研后发现是讨论区缺少级联回复，这个功能的实现难点在于XX。” 这样的回答，很明显一针见血地指出了问题所在， 可以展现应聘者的深度思考。
</li>

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

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

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

#### 2. 妥善解决问题

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

<li>
探索多种解决方案；
</li>
<li>
比较和决策；
</li>
<li>
实施解决方案。
</li>

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

<li>
技术层面，比如修正编码或数据问题、自动化控制、引入监控工具；
</li>
<li>
流程层面，比如加强代码评审流程、改变上线审批控制、增强沟通、把线下改为线上操作等；
</li>
<li>
组织层面，比如加强人员培训、调整角色分工等。
</li>

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

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

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

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

<li>
快速修复，先止血；
</li>
<li>
长期修复，为使类似的问题将来不再发生，从根本上解决问题。
</li>

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

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

<li>
通过回答中对技术选型的介绍，可以看出你的技术能力；
</li>
<li>
通过结果验证，可以看出你对业务问题的关心程度；
</li>
<li>
通过对组织流程层面的理解，可以看出你的管理意识。
</li>

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

#### 3. 验证和复盘

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

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

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

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

## 修正错误的效果

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

<li>
**只消除了当前影响。**这种修复大多只是解决了表面问题，去除了症状，所谓“头疼医头，脚痛医脚”。比如，某种不可重现的订单金额出错，只去数据库里把金额改成正确的数值，而不去分析订单计算逻辑。这种“打补丁”的方法，只是在止血的情况下使用，而事后，你一定要找到问题根源彻底修正，否则问题还会反复发生。
</li>
<li>
**‌彻底根除了错误。**这是我们希望的长效解决方案。这要求分析足够深入，触及内部逻辑，进行有意义的修复，避免以后此类错误再次发生。
</li>
<li>
**‌变问题为机会。**这是指当我们解决问题时，发现机会，扭转局势，取得收获。举个例子，我们这个专栏的文章，有一次发现被某个公众号不合规地抄袭。极客时间的小分队在与公众号主人交涉后，不但顺利使对方撤掉不合规的文章，还和对方谈成了合作伙伴。
</li>
<li>
**‌分享方法，教导他人。**在对问题复盘的过程中，把经验教训的总结文档化，分享给相关的人和团队，供将来出现问题时参考，教导他人不要再犯同样的问题。这样一来，你的经验和能力使整个团队都受益，也是你影响力和领导力的展现。
</li>

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

## 解决问题能力的培养

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

<img src="https://static001.geekbang.org/resource/image/32/9c/32312e6b7a33e930063e4ed71369279c.png" alt="">

## 总结

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

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

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

## 思考时间

结合你的工作经历，请思考下面的问题：

- 你主导解决过哪个问题，第一次失败了？后面经过怎么样的纠正，才成功的？

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

<img src="https://static001.geekbang.org/resource/image/10/54/10e37c40fe7cfac5b0ca0710439ecf54.jpg" alt="">
