技术人如何"结构化"高效思考?
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换人 // 下一篇:最近发展区/脚手架 工具/轮子 软件工程/计算机相关专业的一个特点是会使用到众多的工具,工具的使用是从程序猿进化到程序员的一个关键要素.软件工程师 ...
随机推荐
- 案例8:将"picK"的大小写互换
最终输出结果为PICk. 需要先计算两个字母之间的间隔,比如a和A之间的间隔为多少. 然后在将大写字母转换为小写字母,加上间隔的值: 将小写字母转换为大写字母,减去间隔的值. 示例代码如下: #def ...
- vscode 格式化 vue 和 js代码 vetur prettier beautify
这个文档 不涉及eslint 只专注自动格式化 格式化个性化需求: js中 自动去分号 js中 双引号变单引号 最大空换行数 是2 vue template中 属性自动折行 vue 的自动格式化 需要 ...
- python的替换函数strip(),replace()和re.sub()实例分析
前记: python是一个非常好用的语言,能够帮忙处理很多日常的耗费体力的事情.今天做一个脚本的时候,遇到了python替换的问题,这里就梳理一下知识点吧. 概念: 1.replace() 基本用法: ...
- Django:Nginx 启动,无法加载样式,无法加载静态文件
一般是由于 Nginx 配置文件的问题 # 编辑 Nginx 配置文件 vim /etc/nginx/nginx.conf # 如果出现下面这个 use nginx 就需要改成 use root 保存 ...
- Locust 断言的实现?
一.检查点的方式有哪些: 主要是python 内置的assert 断言(自动断言)还有locust 中的catch_response 断言(手动断言):那么这两者之间有什么区别呢? 其实主要区别在与生 ...
- 一文搞懂idea中的根目录和路径(以Mybatis为例)
一文搞懂idea中的根目录和路径(以Mybatis为例) 在 IntelliJ IDEA 中,项目结构和组织比较灵活,允许用户根据项目需求进行定制. 1.根目录概念: 1.1 项目根目录(Projec ...
- html+css实现指针时钟
周末时间,突然想用html+css实现一个简单的指针时钟的功能,以下是具体代码实现,文末附有线上链接地址. 效果图: 1.代码 1.1.clock.html <!DOCTYPE html> ...
- nginx location块
location块在server块中使用,它的作用是根据客户端请求URL去定位不同的应用. 匹配格式 作用 location = /uri = 表示精确匹配,只有完全匹配上才能生效 location ...
- PostgreSQL 函数稳定性在索引与全表访问下的性能差异
一.构建测试数据 create or replace function test_volatile(id integer) returns bigint volatile language sql a ...
- KingbaseES索引坏块
错误信息产生: 下面的报错一般为有坏块的产生. test=# select max(create_time) from public.tbl_table where create_time>=' ...