gitbook/面试现场/docs/90151.md
2022-09-03 22:05:03 +08:00

141 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 26 | 你解决问题的能力有多强?
专栏读到现在,你有没有想过,公司招人的目的是什么?你可能说,是为了完成工作任务。是的,进一步说,是为了解决问题。这里的问题,可能是技术问题,也可能是业务或者管理问题。工作,就是一个问题跟着一个问题,面试官考查你的经验、技能、潜力、动机,归根到底,就是考查你解决问题的能力。
作为“贯通篇”的最后一篇文章,我们综合看一下:解决问题的能力究竟体现在什么地方,怎么培养解决问题的能力,以及怎样在面试过程中展现你解决问题的能力。
## 什么是解决问题的能力
说到解决问题的能力,我们先要定义什么叫“问题”。我在这里把它划分为三层含义:错误、提高、未知的机会。
* **错误。**需要找到问题原因,进行修复。
* **提高。**当前状况不错,但还有上升空间,可以进一步提高。比如,提高吞吐量。
* **未知的机会。**新的尝试,和拓展到一个新的领域。比如,研究一个新的课题。
这三层内容其实本质是一样的:改变现有的工作。我将它们笼统地称为“问题”。说到这里,你是否对“工作就是一个问题跟着一个问题”有了新的理解呢?
说回到解决问题的能力,它体现在**找到问题**、**找到解决方案**、**复盘问题**三个步骤上。这需要很强的逻辑思维和抽象能力,你可以遵循一套通用的方法或者模式来解决问题,从而让自己更加专注在问题的解决方案上,以此为基础探索不同的选项,然后基于目标和项目经验对适用选项进行决策。
#### 1\. 找到问题
**这是指发现、分析和定位问题,包括看到问题的“症状”,通过分析调查,找到问题发生的原因。**
对于错误,作为工程师,有时会在“症状”未暴露时,发现代码、配置或者数据错误,直接更正,避免损失。这种“由内而外”发现问题的方式,是损失最小、最省力省时的做法。
但是很遗憾,很多“雷”都是在事后通过“症状”发作,甚至形成“综合症”后才被发现的。这种“由表及里”的逆推调查方式,难度大,压力也大,损失也大。也正因为如此,你需要更强的逻辑思维能力,以及拨开现象看本质的能力。所以,我们经常嘉奖那些力挽狂澜的救火队员。可是,那些一开始就把质量做好,无声无响把问题消灭于无形的人,不是更应该奖励和给予认可么?
**对于提高和机会,无论是技术的、业务的,还是管理的,首先要能够识别出来。我们很容易识别错误,但是很难在平庸中想清楚怎么提高。**
面试中,我常问应聘者:“这个项目有什么待提高的?” 答案大体可归为以下几类:
* “项目质量很好,没什么特别要提高的。” 这类回答可能是怕暴露问题惹火烧身,也可能是真的没看到什么提高项。
* “因为工期紧,有些技术债,需要提高下。” 这类回答提出了一些不痛不痒的普遍问题,不能展示应聘者的独到见解。
* “这个社区产品用户活跃度半年不见增长调研后发现是讨论区缺少级联回复这个功能的实现难点在于XX。” 这样的回答,很明显一针见血地指出了问题所在, 可以展现应聘者的深度思考。
**在发现提高和机会之后,你需要将之界定成结构清晰的问题,包括目标、边界和验收标准,从杂乱的工作中抽离出低耦合、高内聚的工作块,以便于团队协作,各个击破。而问题定义的效果,依赖于你对工作细节的认知深度,还有你的项目经验和洞察力。**
分析问题方面,菜鸟和高手的区别就在于:前者在分析问题时流于问题表象,无法直接触及问题本质;而高手正好相反,他能够直达问题本质,并且能够快速分析和定位问题。因此,你重点需要培养:从问题表象(比如日志、系统错误、后台数据等提取出相关信息),直接映射到技术或者业务上导致产生这种表象的问题本质。然而,这并非易事,这要求你在技术和业务领域日积月累,拥有良好的技术感知力,并且注意业务上不断精进,才有机会做到从问题表象中抓取指向问题症结的重要信息。
在分析问题的基础上,项目中产生的信息都值得你深入挖掘,这个信息意味着什么,为什么是那么回事,对你会有什么样的直接或者间接影响,任何时候你都要有批判性思维,对自己也不丝毫吝啬。因为,快速定位问题的能力取决于你所提取的信息以及这些信息间的关联,有些重要信息可能就是你脑中闪现过的,有些重要信息或许就隐藏在某位同事不经意的聊天中,有些重要信息甚至需要从以前解决的问题中推导出来 …… 在此我不一一列举。
#### 2\. 妥善解决问题
当你找到了问题的原因之后,可以遵循下面的步骤来解决问题:
* 探索多种解决方案;
* 比较和决策;
* 实施解决方案。
**首先,来看如何探索方案。**解决方案并不唯一,它可能是:
* 技术层面,比如修正编码或数据问题、自动化控制、引入监控工具;
* 流程层面,比如加强代码评审流程、改变上线审批控制、增强沟通、把线下改为线上操作等;
* 组织层面,比如加强人员培训、调整角色分工等。
因此,探索解决方案是一个思维发散的过程,要发掘出多个方案,你不能局限于惯性思维,而应该相信总有不同或更好的解决方法,从而积极探索。这里也恰恰体现了你的学习能力和创新能力。
**其次,再来说决策。**既然有不同的解决方案,如何确定哪个最优?什么叫“最优”呢?这需要你充分了解问题的上下文(包括技术上或者业务上的约束、组织的策略导向,甚者可能是团队政治因素等),问题的解决一定脱离不了这些上下文的制约,你需要综合考虑这些约束从而优中选优,而不是寄希望于某方面最佳。如果只放眼在最完美的技术上,解决效果不一定好。
说到技术方案的决策,顺便提一下,我会考查应聘者对比多个技术方案的方法、维度,以及衡量标准。如何评估方案的合理性、易用性,资源消耗,次生问题,用户和团队的接受度等,这些方面都是决策中需要考虑的。
**最后,来谈谈实施方案。**根据问题的影响面和复杂度,解决方案可以分步实施:
* 快速修复,先止血;
* 长期修复,为使类似的问题将来不再发生,从根本上解决问题。
当同时处理多个问题时,一定要分清轻重缓急,明确主要问题和紧急问题,着重于解决那些有最大价值的方面;也一定要保持开放的头脑,勇于采用新的手段,以及探索不同的解决方案;同时,需要把问题从大化小,从复杂化简单,运用分治的思想,这有利于团队成员一起更高效地协作。
面试的很多问题都和解决方案相关。对于技术问题的解决,这是考查应聘者是否“扎根技术、着眼业务、懂得管理”的好时机:
* 通过回答中对技术选型的介绍,可以看出你的技术能力;
* 通过结果验证,可以看出你对业务问题的关心程度;
* 通过对组织流程层面的理解,可以看出你的管理意识。
这部分是面试中项目展示的重头戏,你一定要慎重对待。
#### 3\. 验证和复盘
也就是说,你需要验证结果是否达到了预期。通过持续监控修复后产品的运行状态和结果,以及用户反馈,来看问题解决的满意程度。
问题的解决或许迫于时间或者投入产出比的考量,采用的并不是最优的解决方案,没关系,上面说到问题上下文的限制,因为它的存在,我们在决策时设定了对解决结果的容忍度。只要在容忍范围内,就是可以接受的。
对结果的验证和满意度的衡量,可以触发我们对解决这个问题的整体复盘。我们除了要知道这个问题是怎么解决的,还要知道为什么那么解决,以及如果用其他解决方案会怎样,这往往需要你进一步深究下问题涉及的技术或者业务,积累的经验对于你解决新问题会非常有益。
而且,在解决问题时的忙碌中,我们容易“当局者迷”;在事后,你终于可以冷静下来,跳出局限,从客观的角度,审视自己是否思路正确,有没有考虑不周全的地方,更容易做到“旁观者清”,这就是复盘的好处。
## 修正错误的效果
**评价一个人解决问题能力的强弱,除了看以上解决问题的过程,还要看最终效果。**对于修正错误类的问题,我把效果分成以下四个层次。
1. **只消除了当前影响。**这种修复大多只是解决了表面问题,去除了症状,所谓“头疼医头,脚痛医脚”。比如,某种不可重现的订单金额出错,只去数据库里把金额改成正确的数值,而不去分析订单计算逻辑。这种“打补丁”的方法,只是在止血的情况下使用,而事后,你一定要找到问题根源彻底修正,否则问题还会反复发生。
2. **‌彻底根除了错误。**这是我们希望的长效解决方案。这要求分析足够深入,触及内部逻辑,进行有意义的修复,避免以后此类错误再次发生。
3. **‌变问题为机会。**这是指当我们解决问题时,发现机会,扭转局势,取得收获。举个例子,我们这个专栏的文章,有一次发现被某个公众号不合规地抄袭。极客时间的小分队在与公众号主人交涉后,不但顺利使对方撤掉不合规的文章,还和对方谈成了合作伙伴。
4. **‌分享方法,教导他人。**在对问题复盘的过程中,把经验教训的总结文档化,分享给相关的人和团队,供将来出现问题时参考,教导他人不要再犯同样的问题。这样一来,你的经验和能力使整个团队都受益,也是你影响力和领导力的展现。
以上是逐层上升的关系,希望你在解决问题过程中,尽量利用自己的技能,力所能及地做到最好。这样,面试时你才会更自信地展示自己解决问题的能力。
## 解决问题能力的培养
要系统地讲解决问题能力的培养,这样短的篇幅是很难讲清的,在此我只希望能够为你提供一些方法和思路,并用一个尽量简单的表格形式呈现,以供你参考对照。其中,你可以从左边对问题的把握入手,着重于要解决的问题的方方面面,不断培养分析问题和解决问题的能力。篇幅所限,这里我就不再展开细说了。
![](https://static001.geekbang.org/resource/image/32/9c/32312e6b7a33e930063e4ed71369279c.png)
## 总结
总结一下今天的内容。我们讨论了解决问题能力的体现:在识别问题和定义问题时,既要识别错误,也要能明确怎么提高;在解决问题时,要尽量探索多个方案,周全地考虑问题上下文的约束,分阶段地实施方案;最后,别忘了验证结果和复盘。
我还谈到了解决问题的四个层次:只消除当前影响、彻底根除错误、变问题为机会,以及分享和教导他人。期望你在面试时有针对性地运用好前面讨论的方法和技巧,力争更立体地把你解决问题的能力呈现给面试官。
解决问题的过程中,要把“贯通篇”的几篇文章所讲的学习能力、精益能力、协作能力、领导力综合运用到实际工作中,追求预期结果。想一想你在其中,是解决问题的主导者、中流砥柱,还是救火者?每一个角色都有它存在的价值,但我希望你至少是个辅助者,不要总做旁观者,千万不要成为阻碍者。
## 思考时间
结合你的工作经历,请思考下面的问题:
* 你主导解决过哪个问题,第一次失败了?后面经过怎么样的纠正,才成功的?
欢迎你在留言区留言,一起讨论。如果今天的文章让你有所收获,也欢迎你把它分享给你的朋友。
![](https://static001.geekbang.org/resource/image/10/54/10e37c40fe7cfac5b0ca0710439ecf54.jpg)