`
huorongbj
  • 浏览: 19618 次
文章分类
社区版块
存档分类
最新评论

解决问题的能力 > 10倍程序员

阅读更多
如果第二次看到我的文章,欢迎「文末」扫码订阅我的个人公众号「跨界架构师」)哟~ 

每周五11:45 按时送达。当然了,也会时不时加个餐~

我的第「120」篇原创敬上

 

 

大家好,我是Z哥。

 

今天我们聊的话题对大多数人来说应该都算是一个“痛点”,就是怎么提高自己解决问题的能力。

 

我们的工作中,每天会遇到大大小小的很多问题。其中有些是之前从未遇到过的问题,这对很多人来说就会很棘手,不知道该怎么解决,可能吭呲吭呲折腾好几天都不一定能搞定。

 

 

但是身边往往也一定会存在这么一小部分人,好像无论什么问题,到他们那就能够顺利地解决。


难道他们真的只是“看得多,懂得更多”而已吗?

 

我根据我身边所接触的人群来看,还真不是。

 

根本原因我认为是他们有自己的一套成体系的思考策略。表现出来的“懂得更多”而是基于这些策略经过时间的打磨后产生的结果,而不是原因。

 

 

之前看过一个淘宝技术团队里的故事。

 

当时某个小组遇到一个问题,组内的几位成员搞了好几天没搞定。没办法,不得不跨部门去请教多隆大神,多隆5分钟后回复了一个解决方案,他们试了下果真把问题解决了。

 

所以你看,解决问题的能力高低可以差距那么大,远远超过所谓的10倍程序员的概念。而这其中能不能掌握正确的思路至关重要,但是我们很多人往往是“脚踩西瓜皮”,滑到哪算哪。

 

 

很多人平时遇到问题,最习以为常的就是四连招,「打开百度,复制,黏贴,点击搜索」。

 

然后就扫一眼标题去点开觉得靠谱的网页去看。

 

这样解决问题的方式从形态上大致是下面的这样子。

 

这其实是一种最理想的状态,从「问题」直接对应到「解决方案」。但现实是,建立这个对应关系其实没那么容易。就像找对象,你想在忙忙人海中找到你命中注定的另一半,还不想刻意去找,TA就出现在你眼前的概率有多少?

 

 

我们的人性深处就是喜欢「低投入高收益」的事情。希望正好有人和我遇到一样的问题,并且还解决了,同时还花时间整理成文发布在了网上。然后,自己可以顺手摘下这个果实,解决眼前的问题。
但现实往往是,

  • 没人和我遇到一样的问题哎。

  • 这个问题和我的有点像,但是又不完全一样,没法用。

  • 这个人和我遇到了一样的问题哎,但是下面没人回复怎么解决的,扎心……

 

要摆脱这种状态,就得培养自己解决问题的思路体系。

 

 

我们可以这样来考虑。

 

把解决问题的过程想象成是一个“漏斗”,逐渐收敛,最终定位到某几个具体的解决方案

 

这个“漏斗”分为几个阶段,场景分析、定义问题、建立假设、验证。

 


每个人大脑中所沉淀下来的「经验」,其实就是将经过这个漏斗走过一遍的路线图保存在了你的大脑里,然后才达到了“开箱即用”的状态。

 

 

/01 场景分析 when where/

 

大家都知道,很多问题其实背后的本质是一样的,只是换了一个外壳出现在你的面前。

 

比如,当你看到一个程序内存占用持续上升,和从系统日志中看到这个程序有内存溢出的错误日志,你很容易得到它们背后的原因都是一样的,某些对象使用完后没有释放资源。

 

但是,当你在实际解决一个问题的时候,还是不能把问题所在的场景给忽略了。因为这里面埋藏着导致这个问题的“变量”。

 

  • 这个问题是在一个什么场景下发生的?

  • 这个场景的完整过程是怎样的?

 

只有搞清楚了所处场景,你才能顺藤摸瓜找到问题的根源。否则你的系统化思维也培养不起来,而且系统化思维对于做接下去的第二点也很重要。

 

 

/02 定义问题 what/

 

当你通过百度搜索一个问题的时候,输入的内容越多,得到的结果越精确,对你价值越大,但是结果的数量却越少。与之相反的是,输入的内容越少,得到的结果越泛,但是数量越多。

 

当第一种方式不管用的情况下,想要得到更多有价值的信息,前提条件就是要我们提炼出合理的关键字。

 

因此,能否把一个问题定义的够清楚,触达问题的本质显得格外重要。

 

 

其实世上本无“问题”,“问题”源于现状与期望之间的「差距」

 

当你觉得现状符合你的预期的时候,哪还有什么问题啊。比如,我们做程序员的小伙伴预期是什么?永远没有bug!那么只要出现了bug,就不符合预期,这就是“问题”:D。

 

回到这个「差距」上,要搞清楚每个问题的「差距」,你就得对这个问题的相关信息有充分的认识,而不是以偏概全。

 

比如,当你看到一个程序cpu跑得很高,不能简单将其定性为cpu资源分配太小,加大就行了。而要分析看看,对比上周、上月的同期情况如何?如果对比下来差异很大,那么至少这个「cpu需要加大到XX」这个期望就是错误的。

 

期望错了,问题的定义也就错了。自然后面去解决它的道路也是错的

 

 

所以,这第二个环节就是「搞清楚这到底是一件什么事?」

 

 

/03 建立假设 why/

 

这是一个人「解决」问题能力高低的关键。「想得到」才谈得上「去解决」。

 

很多人在解决问题的时候容易停留在表面,这会导致解决问题的方式指标不治本,后续还会再反复出现。

 

比如,某个程序发起的请求出现超时,发现超时时间的配置是5秒。首当其冲进入大脑的解决方案是,改长啊,改成10秒。

 

上面提到的「程序cpu跑得很高」的例子也是这样。

 

这就是典型的还没找到原因,就去解决问题的例子。虽然短期内,从表象上看着问题是解决了,但是根本原因并没有找到,反而是被掩盖掉了。
在不久的将来必定会重蹈覆辙,再次暴露问题。

 

怎么办呢?建立假设。

 

这个方法本质上也是易经中的「象、数、理」概念的体现。
任何「现象」的背后一定会存在「数据」的变化,而之所以产生这个变化一定有它的「道理」

 

其实简单来说就是不断地追问why?why?why?将当前场景中导致这个问题的“变量”尽可能多的挖掘出来。这些变量最终会是一个「树形」的结构,因为你顺带将它们分解好了。

 

 

 

/04 验证 how/

 

Ok,通过第三步将影响这个问题的众多变量给提炼出来了,那么可以开始逐步验证了。如果这个变量……(这样),会……(怎么样)。

 

验证假设的时候,需要我们带着批判性思维来质疑自己刚才提出的假设。当然这个有点难,需要练习。

 

有时候也可以选择动手实践,比如像我们做程序员的,可以实际去改一下代码试试看。只是这会比较费时间一些。

 

 

好了,思路捋清楚了,那么具体我们可以怎么做呢?

 

 

/01  把思考的过程写下来,画出来/

 

这其实在倒逼自己转换成“漏斗思维”,而不是想寻求一步到位的结果。

 

比如,在纸上将前面提到的第一点「场景分析」通过流程图的形式画出来,这样你对整个过程能有更直观的认识,也能更准确的定义问题。(字丑,请见谅……)

 

 

 

像第三点的建立假设也可以在纸上画出来。比如,画个鱼骨图。

 

 

 

/02  帮助解决之后要追问/

 

很多人找人帮忙解决掉一个问题之后恍然大悟,哦原来是这样子啊。然后就高高兴兴的回去按照对方说的去改了。

 

只是这样的话,下次遇到类似的问题还是不会。对方身上解决问题的能力一丁点都没学到。

 

我建议是,当别人告诉你解决方法后,不要停留在结果上。简单多问问,

 

  • 你是如何想到这里的?

  • 你是如何搜索到解决方法的?

  • 你是根据问题什么输入做出判断的?

 

这种发问相当重要,通过这种发问其实你是在问别人解决问题的思考方式。别人的思考方式再和你自己的一印证,再问问自己我当时为什么没有想到那个点上呢?我下次再遇到类似问题我应该多考虑点什么呢?

 

长期以往,你的解决问题的能力会显著超过其他人,并且会大大加强「建立假设」的能力,因为你不是一个人在“战斗”,知识的广度和深度积累更快。

 

 

/03  了解上下游/

 

关于上下游的了解,不用多,只要上一级和下一级就够了。比如,遇到一个数据库的问题,可以了解一下,存储或者操作系统相关的知识。遇到某个模块B的问题,可以了解一下它的上游模块A是做什么的?对这个业务是怎么处理的?下游模块C是做什么的?对这个业务是怎么处理的?

 

这间接也是在为强化漏斗第三环的能力。

 

 

/04  关键字也需要迭代/

 

其实想用好搜索引擎,对我们大部分人来说,你不用去研究搜索引擎的原理,提炼好关键字就够了。

 

关键字的选择一定要屏蔽个性化的内容,比如源代码行数,你自己的方法命名等等。

 

其次找最有价值的关键字,比如异常的类型、某个系统原生方法或者系统内置变量等等。

 

关键字上再配合你出现问题的软硬件环境,如java环境、版本号等等。

 

在搜索过程中许多网页虽然没有明确提供解决答案,但是会提供有价值的补充关键字。所以,你可以借此来迭代你搜索时键入的关键字,以此找到更深或者更广的内容。

 

 

其实我们平时所面对的「问题」,存在两种类型。一种是现实中的“异常”,也就是「我知道应该怎么样,但实际不是这样」;另一种是现实中的“痛点”,「我知道这里不好,但是不知道该怎么变得更好」。前者面向当下,后者面向未来,我们这里聊的主要是第一种。

 

 

好了,我们总结一下。

 

这篇呢,Z哥先和你强调了解决问题的能力在不同的人之间可以拉开很大的差距,所以我们要重视培养自己解决问题的能力。

 

其次,列举了一些我们解决问题能力还不强时会普遍出现的情况,让你判断自己当前所处的阶段做参考。

 

然后,我建议你通过“四层漏斗模型”「场景分析、定义问题、建立假设、验证」来作为解决问题的思路

 

最后分享了4个实践技巧,后面有想到再补充。也欢迎大家在留言区分享你的技巧。

 

希望本文对你有所启发。愿大家都能成为10倍高效的问题解决者:D

 

 

推荐阅读:

 

 

作者:Zachary

出处:https://zacharyfan.com/archives/1018.html

 


 

如果你喜欢这篇文章,可以点一下左下角的「推荐」。

这样可以给我一点反馈。: )

谢谢你的举手之劳。

 

▶关于作者:张帆(Zachary,个人微信号:Zachary-ZF)。坚持用心打磨每一篇高质量原创。欢迎扫描下方的二维码~。

如果你是初级程序员,想提升但不知道如何下手。又或者做程序员多年,陷入了一些瓶颈想拓宽一下视野。欢迎关注我的公众号「跨界架构师」,回复「技术」,送你一份我长期收集和整理的思维导图。

如果你是运营,面对不断变化的市场束手无策。又或者想了解主流的运营策略,以丰富自己的“仓库”。欢迎关注我的公众号「跨界架构师」,回复「运营」,送你一份我长期收集和整理的思维导图。

定期发表原创内容:架构设计丨分布式系统丨产品丨运营丨一些深度思考。

 

分享到:
评论

相关推荐

    作为一个程序员很重要的一个能力应该是解决问题的能力

    作为一个作为一个程序员很重要的一个能力应该是解决问题的能力

    PHP开发程序员解决问题的能力编程小技巧共3页.pdf.z

    在PHP开发过程中,解决问题的能力是每位程序员不可或缺的技能。这份名为“PHP开发程序员解决问题的能力编程小技巧共3页.pdf”的资料,尽管我们无法直接查看压缩包内的内容,但可以推测其可能涵盖了提升PHP程序员问题...

    程序员应该具备的12种能力

    1. **编程语言能力**:精通一门编程语言是程序员的基础,这意味着深入理解语法、特性以及如何高效地解决问题。这需要时间和实践的积累,而不仅仅是速成课程。 2. **编码能力**:良好的编码规范是程序员的专业素养...

    程序员面试综合能力测试题

    - **知识点概述**:模拟现实场景的问题解决能力,比如如何通过移动一个杯子改变整体布局,这不仅考察了应聘者的空间感知,还检验了其在限制条件下解决问题的能力。 ### 结论 程序员面试综合能力测试题覆盖了从逻辑...

    像程序员一样思考

    本书分析了程序员解决问题的方法,并且教授你其他图书所忽略的一种能力,即如何像程序员一样思考。 全书分为8章。第1章通对几个经典的算法问题切入,概括了问题解决的基本技巧和步骤。第2章通过实际编写c++代码来...

    你是合格的程序员吗?—合格程序员应该具备的12种能力

    标题 "你是合格的程序员吗?—合格程序员应该具备的12种能力" 指向了一个讨论...文件"解决问题,创造力及个人知识管理.ppt"可能进一步深入探讨了这些关键能力,提供了具体的指导和建议,帮助程序员提升自己的专业素养。

    程序员的酸甜苦辣 程序员的酸甜苦辣

    【程序员的酸甜苦辣:IT行业的...在享受编程的乐趣、解决问题的成就感的同时,他们也必须承受工作压力、身体健康问题以及不断学习新技术的挑战。然而,正是这样的酸甜苦辣,塑造了程序员坚韧不拔的精神和对技术的热爱。

    程序员_面试问题回答

    2. 优点:你可以提到你的技术专长、团队协作能力、解决问题的能力和学习新知识的速度。用实例来证明你的优点,比如项目经验或奖项。 3. 缺点:聪明的做法是承认一个较小的个人发展点,然后说明你正在改进或已经克服...

    程序员第二步:从程序员到项目经理

    因为在项目过程中,总会出现各种意料之外的情况,项目经理必须保持冷静,有效引导团队解决问题。 最后,从程序员到项目经理的转型不仅需要不断学习新的管理技能,更需要在实际工作中不断实践和积累经验。只有通过...

    程序员应具备的能力和素质.doc

    因此,了解并培养程序员应有的能力和素质是解决这些问题的关键。 1. **团队精神和协作能力**:团队合作是程序员必备的基本素质,因为个人的力量有限,尤其是在大型项目中。即使是像Linux创始人Linus Torvalds这样的...

    初级程序员试题 程序员考试类

    7. **问题解决能力**:试题往往通过设计实际问题来测试候选人的分析和解决问题的能力,这包括理解问题、抽象问题、设计解决方案和实现代码的能力。 8. **编程实践**:实际编程题目的出现,可能是让你编写一段满足...

    像程序员一样思考.pdf

    《像程序员一样思考》分析了程序员解决问题的方法,并且教授你其他图书所忽略的一种能力,即如何像程序员一样思考。全书分为8章。第1章通对几个经典的算法问题切入,概括了问题解决的基本技巧和步骤。第2章通过实际...

    程序员,这十年

    对于程序员而言,具备创新思维和解决问题的能力至关重要。而创业,则为那些有梦想、有激情的程序员提供了实现自我价值的舞台。通过创业,程序员可以将技术转化为产品,解决实际问题,创造更大的社会价值。 ### 结论...

    嵌入式程序员的10个经典问题

    这些问题不仅测试了开发者的基础知识,还反映了他们在实际项目中的解决问题的能力。以下是嵌入式程序员初期经常遇到的10个经典问题的详细解析: 1. 使用预处理指令`#define`声明常量: - `#define`用于创建宏,它...

    程序员面试宝典 程序员

    同时,理解不同数据结构(如栈、队列、树、图、哈希表等)的特点及其在解决问题时的应用也是面试中的常考点。 3. **计算机网络**:了解TCP/IP协议栈,包括OSI七层模型和TCP/IP四层模型,以及HTTP、FTP、DNS等常见...

    程序员个人工作自我评价总结.doc

    2. **问题解决能力**:在项目开发过程中遇到问题,如技术难题和时间紧迫,程序员通过自我钻研、请教他人和网络资源,成功解决问题,展现出坚韧的解决问题精神。 3. **技术技能提升**:通过项目实践,程序员的技能...

    程序员面试全攻略

    3. 项目经验:详细描述参与过的项目,展示你的实际操作能力和解决问题的能力。 4. 技能列表:列出你的编程语言、框架、工具等专业技能,以及对新技术的敏感度。 二、与猎头公司和人力资源代表沟通 1. 猎头关系:...

    程序员面试逻辑题

    在程序员招聘过程中,面试官通常会提出一系列逻辑问题来评估应聘者的思维能力和解决问题的能力。这些题目旨在测试应聘者是否具备良好的逻辑思维、快速学习新技术的能力以及应对复杂问题的能力。通过解决逻辑题,面试...

Global site tag (gtag.js) - Google Analytics