技术人如何"结构化"高效思考?
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换人 // 下一篇:最近发展区/脚手架 工具/轮子 软件工程/计算机相关专业的一个特点是会使用到众多的工具,工具的使用是从程序猿进化到程序员的一个关键要素.软件工程师 ...
随机推荐
- vue中setTimeout之前 一定要 clearTimeout 否则将失效
window.clearTimeout(this.singleClick) // 这句很重要,否则不起作用 this.singleClick = window.setTimeout(() => ...
- stm32 文件系统数据读写源码解析
一 概念 fatfs文件系统在文件读写中不可或却.熟悉和深入理解是一个不可或缺的前提. 这里面需要先明确几个概念:文件open的属性,这个非常重要.可以并列使用. 二 源码解析 A 写入数据: i ...
- Tornadofx学习笔记(3)——使用Maven编译成jar包
之前我都是使用的IDEA自带的工具来编译jar包 但是增加了新的依赖,又得去修改project structure的依赖,过于麻烦 某天Android开发的时候,想到gradle可以一键打包,是不是m ...
- 今日头条Linux 运维工程师面试真题
今日头条Linux 运维工程师面试真题 首先我们来看下今日头条 Linux 运维工程师招聘岗位要求: [岗位定义]系统运维工程师 [岗位薪资]10K-24K [基本要求]北京 / 经验 3-5 年 / ...
- 大年学习linux(第二节---磁盘管理)
二.磁盘管理 文件系统配置文件 /etc/filesystems: 系统指定的测试挂载文件系统类型 /proc/filesystems: linux 系统已经加载的文件系统类型 /lib/module ...
- Cloud XR面临的问题以及Cloud XR主要应用场景
cloud xr面临的问题 带宽要求高:cloud xr需要实时把一个高码率的视频流,从云端传输到终端,这需要一个非常大的带宽. 延迟要求低:在传输的过程中,它需要一个非常低的时延,XR每进行一个新动 ...
- 【教程】深入探究 JS代码混淆与加密技术
引言 在网络世界中,保护代码安全是至关重要的一环.JS代码混淆与加密技术则成为了开发者们常用的手段之一.本文将深入探讨混淆和加密的概念,以及其实现原理和应用方法,帮助读者更好地了解并运用这些技术. 概 ...
- 把分钟数转化成几小时几分钟(100 -> 01:40)
/// <summary> /// 把分钟数转化成几小时几分钟(100 -> 01:40) /// </summary> /// <param name=" ...
- 二.安装ifconfig命令
二.安装ifconfig命令 1.ifconfig命令是设置或显示网络接口的程序,可以显示出我们机器的网卡信息,可是有些时候最小化安装CentOS等Linux发行版的时候会默认不安装ifconfig等 ...
- KingbaseES 复制冲突之锁类型冲突
背景 昨天遇到客户现场的一个有关复制冲突的问题 备库报错:ERROR: canceling statement due to conflict with recovery,user was holdi ...