技术人如何"结构化"高效思考?
1 前言
你是否在解决问题时,常常觉得脑子很乱,很多零散的信息迸发出来,但就是无法形成解决方案。
之所以这样,原因就在于,我们的大脑处理不了太多零散而复杂的信息。人类大脑在处理信息的时候,有两个规律:第一,不能一次太多,太多信息会让我们的大脑觉得负荷过大;第二,喜欢有规律的信息。
如果我们在解决问题时,能够找到一个结构,将所有的碎片信息放进去,就能够大大减轻大脑的负担,更容易地解决问题。而这,就是所谓的“结构化思维”。
2 什么是结构化思维?
如果给结构化思维下一个定义,结构化思维是什么呢?我们先看百度百科是如何定义的。
结构化思维(Structured Thinking)是指一个人在面对工作任务或者难题时能从多个侧面进行思考,深刻分析导致问题出现的原因,系统制定行动方案。
从百科中提炼出一句话,“结构化思维是从多个侧面思考问题的方法”。所谓多个侧面,就是结构。
我们再看下智库百科是怎么定义的。
结构化思维是指在思考分析解决问题时,以一定的范式、流程顺序进行,首先以假设为先导,对问题进行正确的界定,假设并罗列问题构成的要素,其次对要素进行合理分类,排除非关键分类,对重点分类进行分析,寻找对策,制订行动计划。
"以一定的范式、流程顺序进行"说明结构化思维是一个关于思考流程的方法。
那么这个思考的流程是怎么样的呢?
1.正确界定问题。
2.罗列问题构成的要素。
3.对要素进行合理分类。分类的过程就是寻找结构的过程。
4.排除非关键分类,对重点分类进行分析,寻找对策。
总结一下百科的定义,结构化思维是一个关于思考流程的方法。流程以事物的结构为思考对象,要么利用已有结构,要么自己寻找结构,来引导寻找问题的解决方案。思考的流程分三步: 1.正确界定问题。2.构建结构。3.按结构进行分析,寻找对策。
3 如何界定问题?
界定问题的目的是为了弄清楚要解决的问题是什么,也可以说成:“为什么要做?/ 目标是什么?”,只有知道了目的和目标,才能去寻找解决方案以及知道解决方案是否能达成目标。那么我们该如何界定问题呢?
界定问题分为列框架和确定问题两步。
列出框架。用来界定问题的框架,分为5个要素。
1.旧解法。指现在用来达成目标的手段,可以是一个低效的人工流程、架构、算法。
如果我们是要做一个数据处理平台/工具,旧解法就是没有这个平台/工具之前,人工处理流程是怎么样的。
如果我们是要做架构/性能优化,旧解法就是现在的架构和算法实现是怎么样的。
2.症结。指让旧解法失灵的原因。
我们做一个平台/工具,是因为业务扩张,统计维度和数据量大了之后,人工处理太低效?
我们要做架构/性能优化,是因为数据量大了之后,读写性能裂化,不满足性能要求了?
3.现实结果。也叫痛点,症结让旧解法失灵,进而导致了不好的现实结果出现。
每次数据统计,人工需要处理1天,跟不上业务发展。
单个请求平均延时1s,请求超时导致用户看不到页面。
4.理想结果。或者叫目标。
原先人工处理一天的事情,希望半个小时能处理完。
之前单个请求平均延时1s,希望单个请求平均延时10ms。
5.新解法。消除症结,把现实结果导向理想结果的新方法。
建设一个什么样的软件平台/工具,自动化处理数据统计。
分库分表,降低数据量对请求延时的影响。
确定问题。5个要素列出来了,要解决的问题就产生在5个要素里。
情况1:前4个要素都是已知,由要素5「新解法」产生的问题,包括:
新解法是什么?(最常见,记这个就行了,后面的问题都是由此衍生的)
新解法也已知,是否对?
新解法也已知,并且有多个,哪个好?
新解法也已知,接下来具体怎么做?
情况2:由其他要素产生的问题,包括:
「症结」是什么?比如延时突然暴跌,得先确定症结,确定后才到解法。如果症结是qps突增,cpu负载过高,一般水平扩容就可以解决。
「理想结果」是什么?比如⽬前正是从不景⽓⾏业脱身进⼊成⻓性⾏业的机会,但不知道进⼊后会到达什么样的理想结果。确定理想后才到「新解法」是什么。
用表格总结下:
平台建设 |
|
step1-列出5要素 |
|
旧解法 |
人工从数据库查出数据,导出到excel,统计数据结果 |
症结 |
数据量大,统计维度多 |
现实结果 |
每次统计数据要1天 |
理想结果 |
半个小时可以出统计结果 |
新解法 |
无 |
step2-确定问题 |
|
问题 |
如何才能半小时统计出数据结果 |
性能优化 |
|
step1-列出5要素 |
|
旧解法 |
从数据库查出数据,计算后返回 |
症结 |
无 |
现实结果 |
单次请求平均延时1s |
理想结果 |
平均延时10ms |
新解法 |
无 |
step2-确定问题 |
|
问题 |
导致延时上涨的原因&&解法 |
4 如何构建结构?
当你面临一个难题的时候,该如何去寻找结构呢?这里给出两种方法:一种是自上而下地找结构,一种是自下而上地归纳提炼结构。
自上而下找结构:思考一个框架,将信息和解决方案放入框架
思考问题和表达时,根据主题去寻找是否他人或自己是否已经有适用框架,如果已经有框架,则按框架将已有的信息或者解决的方案放入到框架中。
我们来看一个问题,如何制定一个服务性能优化的季度OKR?
假如没有结构,我们可能直接写这个季度的目标是优化服务性能。至于目标是否完成,非常依靠主观判断。
我们可以用SMART框架(Specific 明确的, Measurable 可衡量的,Attainable 可达到的, Relevant 相关的,Time-bound 有截止时间的)来衡量OKR是否写得符合标准。
用SMART结构,我们服务性能优化的季度OKR可以写成:优化服务延时,平均延时从1s->200ms。
明确的:优化服务延时,是明确要做的事情。
可衡量的:1s->200ms,是衡量目标达成的指标。
可达到的:200ms是靠技术优化可达到的。
相关的:这个服务是我负责的,和我相关的。
有截止时间:这个季度。
自下而上归纳总结成结构:当我们不清楚用什么框架时,四个步骤把信息结构化
当我们对某一问题或信息掌握不全面导致还不能明确讨论主题时,或无法确定应如何做下一层次的分解时,这时候我们可以采用自下而上思考的方法。
自下而上建立框架的过程,主要分为四步:
1.罗列要点。把所有的要求和想到的点子先写下来,这是一个思维发散的过程。
2.分组。将上面所有要求和点子做分组,这一步是从发散到收敛的过程,在充分发散的基础上,又发挥了收敛思考的价值。
3.结构提炼。看一下这些分组,是否存在某种规律,按照这样的规律,是否需要补充或调整组。这时候需要用到MECE(Mutually Exclusive, Collectively Exhaustive,即相互独立、完全穷尽)原则,来决定分组调整。最后形成的组,其实就是你的结构
4.观点补充。确定了结构之后,看每个结构之下是否还需要补充其它信息,最后完善思路。
为了更容易理解,我举个例子来说明:
思考“相比回省会城市(武汉),还是留在深圳”这个问题的时候,可以先头脑风暴罗列要素,对要素进行分组,最后再总结提炼出自己的决策。
1.罗列要点。包括:1.深圳房价高 2.深圳房租高 3.深圳工资高 4.深圳互联网公司多 5.工作人脉在深圳 6.武汉离家近 7.武汉教育资源比深圳好
2.分组。我们发现,1/2/3说的是收入和成本,4/5说的是就业选择,6/7说的是家庭方面的
3.用MECE原则找出各组的规律,确定结构。根据MECE的原则,这些分组需要相互独立、完全穷尽。收入和成本、就业选择、家庭——这三个要素符合相互独立吗?是的,这是三个无关的要素。但是,这三个要素完全穷尽了吗?好像没有。还有深圳气候好、商场多、公园多等,所以,我们扩展一下,找出了这些组:收入和成本、就业选择、家庭、生活舒适度、生活便利度。
4.观点补充。比如,收入这块,除了考虑工资,是不是还有其它,比如股票增值、加薪速度呢?等等。
5 如何培养结构化思维
知道什么叫做结构化思维,是远远不够的,要将它变成自己的思维方式,能够做到不加思考地习惯性应用,还需要刻意练习。我们该如何培养结构化思维呢?
下面我给出两个方法,如果坚持几个月,结构化思维能力一定能得到提升。
1.累结构:看书的时候,看到一些有意思的理论,思考出它的三个应用,然后把它记下来,作为自己的素材,有空可以拿出来看看。同时,还可以给这些理论进行归类,比如价要素类结构、流程类结构等等。
2.要有结构化思维的意识:当你面临一项挑战性任务时,不要急着开始解决问题,切忌一开始就进入细节,先思考是否可以运用一些框架来解决问题。如果自己暂时没有思考框架,可以去找寻前辈和他人的框架借鉴。
技术人如何"结构化"高效思考?的更多相关文章
- <阿里工程师的自我素养>读后感-技术人应该具备的一些基本素质
一.技术人具备"结构化思维"意味着什么? 1.什么是结构化思维? 结构化思维:逻辑+套路. 表达要有逻辑,所谓逻辑是指我们的结构之间必须是有逻辑关系的. 四种组织思想的逻辑关系 : ...
- 工作中的Buff加成-结构化思考力:第一章:认识结构化思维及其作用
一:引言 为了更好的说明结构思考力,我们先来做几个小测试. PS:如果你能做到,请留言,因为我要和你交好友,因为你是人才啊,可以挖一挖,挖到我的公司中. 第一个测试:请在三秒内记住下列数字.数字顺序不 ...
- Spark如何与深度学习框架协作,处理非结构化数据
随着大数据和AI业务的不断融合,大数据分析和处理过程中,通过深度学习技术对非结构化数据(如图片.音频.文本)进行大数据处理的业务场景越来越多.本文会介绍Spark如何与深度学习框架进行协同工作,在大数 ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- XHTML 结构化:使用 XHTML 重构网站 分类: C1_HTML/JS/JQUERY 2014-07-31 15:58 249人阅读 评论(0) 收藏
http://www.w3school.com.cn/xhtml/xhtml_structural_01.asp 我们曾经为本节撰写的标题是:"XHTML : 简单的规则,容易的方针.&qu ...
- [转] Protobuf高效结构化数据存储格式
从公司的项目源码中看到了这个东西,觉得挺好用的,写篇博客做下小总结.下面的操作以C++为编程语言,protoc的版本为libprotoc 3.2.0. 一.Protobuf? 1. 是什么? Goo ...
- [转帖]技术人眼中的Facebook Libra
技术人眼中的Facebook Libra https://www.jianshu.com/p/ddc733077749 比特币 以太坊 EOS Libra 0.8352019.07.01 14:15: ...
- XHTML 结构化:使用 XHTML 重构网站
http://www.w3school.com.cn/xhtml/xhtml_structural_01.asp 我们曾经为本节撰写的标题是:"XHTML : 简单的规则,容易的方针.&qu ...
- 结构化CSS设计思维
LESS.SASS等预处理器给CSS开发带来了语法的灵活和便利,其本身却没有给我们带来结构化设计思维.很少有人讨论CSS的架构设计,而很多框架本身,如Bootstrap确实有架构设计思维作为根基. 要 ...
- 软工+C(2017第5期) 工具和结构化
// 上一篇:Alpha/Beta换人 // 下一篇:最近发展区/脚手架 工具/轮子 软件工程/计算机相关专业的一个特点是会使用到众多的工具,工具的使用是从程序猿进化到程序员的一个关键要素.软件工程师 ...
随机推荐
- CodeIgniter3.chm 打包编译 需要 hhc.exe - php框架
电子书地址 https://github.com/CodeIgniter-Chinese/rapid-php-application-development 我打包编译好了chm,https://fi ...
- 摆脱鼠标系列 - vscode 软件 最大化快捷键 - win + ↑
摆脱鼠标系列 - vscode 软件 最大化快捷键 - win + ↑ vscode默认打开不是最大化,所以按 win + 上箭头 使其最大化 不想按 F11 那个不太方便,左上角就没有项目名称了 优 ...
- 数据湖-Hudi/IceBerg
- TomCat 的 Jenkins 提示:你的容器没有使用UTF-8解码URL地址
1.编辑 Linux 系统的 Tomcat 安装目录的 conf 目录的 server.xml 文件 2.在 <Connector> 追加内容 URIEncoding="UTF- ...
- drf(认证、权限、频率)
一. 认证组件 1. 流程 1. 写一个类,继承BaseAuthentication,重写authenticate,认证的逻辑写在里面. 认证通过,返回两个值,一个值最终给了包装以后的request对 ...
- RSA算法揭秘:加密世界的守护者
RSA算法起源: RSA算法是由Ron Rivest.Adi Shamir和Leonard Adleman在1977年共同提出的.它是一种非对称加密算法,基于两个大素数的乘积难以分解的数论问题.RSA ...
- 记录--css水滴登录界面
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 今天我们来分享一款非常有趣的登录界面,它使用HTML和CSS制作,具有动态的水波纹效果,让用户在登录时感受到了一股清凉之感. 基本h ...
- KingbaseES V8R6集群运维案例之---securecmd连接需要密码问题
KingbaseES V8R6集群运维案例之---securecmd连接需要密码问题 案例说明: 在KingbaseES V8R6集群可以使用securecmdd代替sshd实现集群主机节点间的通讯, ...
- 【Java】这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
String s1 = "a"; String s2 = s1 + "b"; String s3 = "a" + "b" ...
- ET介绍——分布式Actor模型
Actor模型 Actor介绍 在讨论Actor模型之前先要讨论下ET的架构,游戏服务器为了利用多核一般有两种架构,单线程多进程跟单进程多线程架构.两种架构本质上其实区别不大,因为游戏逻辑开发都需要用 ...