程序员如何思考复杂问题

您所在的位置:网站首页 程序员方法论 程序员如何思考复杂问题

程序员如何思考复杂问题

2024-07-10 19:18:05| 来源: 网络整理| 查看: 265

欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我微信「java_front」一起交流学习

1 方法论很重要

在日常工作中,大家肯定处理过一些棘手的问题。在面临这些复杂的问题时,尤其当问题又很紧急时,有人完全没有头绪,不知道从哪里下手,而有人思路清晰,分析问题有条有理,行动步骤清晰明确。为什么会产生这样的差距?

我认为思路清晰的人掌握了一套方法论,这种方法论可以套用在很多场景,让他们在遇到问题时不慌不忙,最终找到问题的答案。

程序员在工作中就需要面对很多复杂问题。比如当系统出现问题时,由于系统的复杂性,很难一眼看出问题所在,那么更需要学会解决问题的方法论。

本文谈一谈程序员如何解决问题,我们就从一个问题开始:网页访问突然变慢了。

2 发现问题

我们首先区分两个概念:表征和问题。

表征是问题的表现。比如同样网页访问突然变慢,但是导致表征的问题根源并不相同,那么解决方案肯定不同。

问题是表征的根源。技术人员需要找到问题根源,而且必须符合一元论原则,即这个问题可以解释当前系统中出现的所有表征。

我认为辨析上述概念给我们的启示是:不能纠结于表征,这只是外在的表现,需要深入思考导致表征的问题。

这里介绍第1个方法论:根据表征罗列问题。

网页访问突然变慢了。这个描述是表征还是问题?很明显是表征。

明确了这一点,下一个步骤就是根据表征,罗列所知可能导致表征的问题,程序员可以根据经验,罗列到底有什么问题会导致网页访问突然变慢呢?我们尝试罗列两个问题:

问题1:同事刚刚修改的代码有错误

问题2:流量激增引发数据库性能问题

这个步骤需要程序员在工作中多多学习实践,才能见多识广,并且在罗列问题维度上要做到MECE,即相互独立,完全穷尽。

需要说明本文着重介绍方法论,所罗列问题并不全面,而且不涉及具体技术方案。

3 验证问题

现在我们已经提出了问题,现在就要验证问题,就是看看我们提出的问题到底对不对。

这里介绍第2个方法论:PDCA循环。

PDCA循环是质量管理专家休哈特博士首先提出的,由戴明采纳宣传普及,所以又被称为戴明环。我们来介绍PDCA循环的概念:

P:计划(plan)

D:执行(do)

C:检查(check)

A:处理(act)

第一步:提出计划。可以根据假设,提出验证假设的计划。我们先验证提出的问题1。上面我们猜测有同事进行了代码升级,从而引发的网页变慢。那么我们的计划是:查看发布记录和代码提交记录。

第二步:执行计划。我们对发布记录和代码修改记录进行查看。

第三步:检查执行结果。上一个步骤的执行结果,并没有发现发布记录和代码修改记录,那么可以排除是由这个原因导致的。

第四步:根据检查结果,决定是直接处理这个问题,还是重新制定新计划验证下一个问题,即进入PDCA循环。此时我们应该进入循环,验证问题2。

我认为这个方法意义在于每次可靠得验证一个变量,找到问题则退出循环,没有找到问题则进入下一个循环。虽然每一步虽然迈得不大,但是每一步都是扎扎实实。

这个理论在各个行业都有广泛应用。比如科学实验中常用的方法:控制变量法。为了验证一个变量是否对试验结果有影响,那么就要保持其他变量不变,只对这一个变量进行修改,验证是否对实验结果有影响。

还有互联网产品常说的最小可用品,即每一个版本推出解决满足一个主要的核心需求,根据用户反馈,在下一个版本中解决或优化。这就是快速迭代,小步快跑。

同一现象或实践,在不同领域被重复发现。同一规律或理论,在历史上被反复总结。

4 解决问题

假设根据第三步验证问题,我们发现了真正的问题是问题2:流量突然增大,引发了数据库性能问题。

即使是同一个问题,解决的方案也可以有很多,比如对于性能问题,可以加缓存,优化数据索引,优化交互流程,流控隔离熔断等等,那么应该选择哪一种方案呢?

这里介绍第3个方法论:因时因地评估解决方案成本和效果,先治标再治本。

假设现在网站正在进行双11促销活动,所以现在最高优先级是保证用户可以正常参与活动,那么需要选择时间成本最小的方式快速解决问题,如果加一个索引就可以搞定的事情,那么就选择这个方案。先治标的意思是先把迫在眉睫的问题解决。

假设现在用户量高峰已过,响应时间逐渐正常,那么给程序员留出比较充裕解决问题时间,此时可以添加缓存层,优化代码,发布新版本。

假设你发现产品交互流程有不合理之处,那么在项目会议上,你要向产品经理抛出这个问题,一起优化产品流程。流程优化后进行大版本迭代。

解决方案非常具体,因时因地而异,根据优先级,先治标,再治本。

5 文章总结

程序员思考问题主要有三大步骤:发现问题,验证问题,解决问题。

发现问题首先要区分表征和问题,不能被表征所迷惑,不要陷在表征的泥潭里,应该思考表征背后的问题,罗列出可能造成表征的所有问题。

验证问题就是对罗列的问题进行证实或者证伪,采用的工具是强大的PDCA循环,这个循环也广泛应用于各个学科和产业。

解决问题时要因时因地评估解决方案的成本和效果,先治标,再治本。问题发生的场景不同,要针对当前场景给出边际效益最高的解决方案。

方法论是一个非常重要的工具。一个看似纷繁复杂,杂乱无章的问题,使用得当的方法论进行梳理,立刻使得问题清晰,方案具体,结果可衡量。这就是从实践总结理论,再用理论指导实践。

欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我微信「java_front」一起交流学习

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭