「案例分享」研发效能提升之第一性原理

京东云开发者
• 阅读 387

作者:樊思国

一、引言

被埃隆·马斯克多次提及的第一性原理First principle thinking,是计算物理学领域的一个专业术语,在商业领域依然具有鲜活的生命力。读过《硅谷钢铁侠》这本书的知道,正是因为应用了第一性原理对问题进行分析,才使得马斯克在跨航天、汽车、能源和软件领域创新硕果累累,比如SpaceX的成功,就是从根本上找到运载火箭的成本重头在推进系统上并解决该问题,从而创造了可回收利用的火箭推进器,从根本上解决成本问题,对行业来说是颠覆性的创新模式。

「案例分享」研发效能提升之第一性原理

第一性原理的本义是指在进行计算的时候除了告诉程序你所使用的原子和他们的位置外,没有其它的实验的,经验的或者半经验的参量,且具有很好的移植性。通俗理解,第一性原理就是基于客观事实进行的推导,其中不加入自己猜测和类比等经验性的东西。

在创新和研发效能提升的行业大背景下,作者认为在我们的日常研发工作中,也可以利用第一性原理思维帮助我们提升效能甚至是提升创新能力。比如,线上问题排查和分析解决,就可以很好的利用第一性原理指导我们实践。

下文将通过一个真实的线上问题排查经历,提炼出一种利用第一性原理进行问题排查和解决的通用流程框架,并分析案例中的第一性原理应用关键,最后总结了第一性原理应用需要具备的基本步骤,旨在为提升我们研发效能找到一个实际的结合点。

二、一次线上问题排查过程

我们经常会遇到排查解决线上问题的场景,每次如果都能运用第一性原理定位问题,将会得到不一样的效果。下面我们来看一个真实的线上问题排查场景:

11月5日早晨6:10,我们亲爱的运维同学从睡梦中被Flink作业重启的告警电话吵醒,经过排查发现redis内存满了,于是告知大家一起排查。排查过程中发现三类现象,并一步步分析得出结论,作者经过深入分析和整合大家排查情况和现象,总结如下图:

「案例分享」研发效能提升之第一性原理

上图可以看到,从收到Flink重启的告警出发,发现三个现象(或者说三个为什么),一直沿着这三个现象往下分析,逐步剥开问题表象,推导出导致问题的根本原因,最后收敛成了三个结论(标记位置),并进一步针对收敛出来的结论深入挖掘本质,从而导出我们下一步的todo项。

三、第一性原理分析

上面的问题排查过程的思路梳理,其实是一种第一性原理的运用,也就是通过不加入任何经验、猜测,只看现象和发现(日志与监控),提出假设并证明的过程。因为只有这样,才能保证我们每一步都是接近问题本质的,最终收敛出来的结论才是真实可靠的,我们针对结论再提出解决方案,才是从根本上解决问题的一种方式。

反之,如果我们加入自己经验或类比,则违背了第一性原理的出发点,使得后面所有建立起来的推导或是结论都是站不住脚的,也许某些情况下,猜测和粗暴的重启活动能够暂时性地解决问题,但长期来看,类似问题还是会存在。就比如我们去网吧上网发现机器坏了,网管一般会让你重启一下机器一样,因为网管这个时候加入了自己的经验判断,那就是重启就能解决问题,虽然大多数时候也很管用,但这很多时候其实并不是一种从根本上解决问题的办法,我想我们作为研发人员,应当具备一种刨根问底,切入本质的思维模式,这种思维模式就是利用好第一性原理。

四、应用第一性原理

那么,我们怎样才能真正的使用第一性原理呢?有三点,一是具备丰富的领域知识。二是从客观规律出发。三是从根本上提出解决方案。

4.1 丰富领域知识

就如上面问题排查过程,需要掌握的知识包括了flink、redis缓存、消息队列、日志排查能力、源码阅读能力和计算机基础等,如果不具备这些专业的知识功底,是不可能深入根本地分析和解决问题的,就像网吧管理员一样,不懂硬件和软件知识,当然就只能通过重启来解决问题。因此,作为研发人员,在工作中很好的应用第一性原理,前提条件是对相关领域知识有深入原理级别的理解,对应用的技术组件能够理解核心的技术原理和架构,对业务能够理解背后的根本动机和运行规则。

4.2 从客观规律出发

这一点尤其重要,有时候我们具备了丰富的领域知识,但是却没法扎实的去分析问题,去做到只看客观规律、然后提出假设、然后找证据来证明或是证伪,那么也是没法做到从本质上解决问题的。因为,只看现象是第一性原理的出发点,提出假设是在问题的答案空间里面做剪枝排除,最后找证据则要求我们具备绝对的理性来对待。只有这样,离真相才能更进一步,直至找到根因为止。

比如我们看到线上告警,第一步应当是去寻找和这个告警相关的原始日志,而不应该是通过现象进行经验判断或是猜测而不看日志,因为日志才是记录整个程序运行的过程,属于客观规律的范畴,而经验判断和猜测则是基于观念的偏见,是意识领域的范畴。在必要的时候,我们通过日志找到了客观现象和规律,我们还需要通过源码的分析来进一步掌握更多的客观规律,因为掌握的客观规律越多,越利于我们做出正确的判断,也就越接近事物本质。

4.3 从根本原因上提出解决方案

利用第一性原理得到根因后,最后一步也是最关键的一步则是解决问题,这个时候提出的方案要么就是从根本上解决已有问题,要么就是创新的解决方案,犹如足球运动中的临门一脚。

五、研发效能之第一性原理

除了线上问题排查,第一性原理亦可应用于我们整个研发过程中。

比如,需求阶段利用第一性原理可以帮助我们挖掘出客户真实需求而不是停留在表象层面;设计和研发阶段,利用第一性原理,在深入理解好我们研发工具箱中各类技术和组建的实现原理的基础上,针对需求阶段提炼出来的最为真实的问题点进行逐一分析,揭示问题域中核心复杂度,最终产生的架构设计和实现必定是最为合适的;测试阶段,利用第一性原理去理解系统实现的核心逻辑,针对核心逻辑设计测试用例覆盖功能点。针对系统上线后出现的问题,利用第二章的问题分析框架,可以一步步帮助我们找到问题本质,并针对该本质采取改进措施,反馈回我们的产品,这样就能做到从系统层面解决问题,而不是停留在点对点的问题应急上。

在整个研发周期中,充分利用第一性原理分析每个环节,提炼出每个环节的首要问题,并针对问题提出解决方案,各个过程之间互相迭代反馈,形成增强回路,久而久之,我相信我们的研发效能定会有一个大的提升。

五、总结

本文通过一个真实的线上问题排查案例,展示了第一性原理在工作中的落地,通过分析第一性原理的应用关键点,提出了三种可行的应用第一性原理的方法。然而,由于作者才疏学浅,在行文过程中难免会存在一些考虑不周的地方,也欢迎提出您宝贵的建议一起学习进步。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
MySQL数据库InnoDB存储引擎Log漫游(1)
作者:宋利兵来源:MySQL代码研究(mysqlcode)0、导读本文介绍了InnoDB引擎如何利用UndoLog和RedoLog来保证事务的原子性、持久性原理,以及InnoDB引擎实现UndoLog和RedoLog的基本思路。00–UndoLogUndoLog是为了实现事务的原子性,
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
使用第一性原理思维思考如何打造提高生产力的平台 | 京东云技术团队
数字化转型会带来大量的研发需求,如何更好更快的交付这些需求成为一个突出问题,该怎么打造一个平台去解决该问题?能不能用第一性原理思维去推导出发展方向?
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这