您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 开发技术 > 正文

直击灵魂:软件研发的第一性原理与10倍效能

发表于:2022-05-17 作者:朱少民 来源:软件质量报道

最近马斯克(Elon Musk)要收购twitter,闹得满城风雨。

国内某些亏损严重 (如今年亏损800多亿、去年是1166亿,甚至超过一年收入) 的大厂,更应该设法让马斯克收购。

为什么这么说呢?因为一旦大厂被 马斯克 收购,大厂的研发效能可以提升十倍、几十倍,员工可以裁掉50%甚至90%,这样很快就能转亏为盈。

这是因为马斯克 第一性原理用得非常好 ,10倍效能提升是大概率事件 。如果一般人的目标是在现在的基础上改进10%,马斯克的目标就是在现有基础上做到10倍。《连线》杂志的Jack Stewart 发现:如果一件事 ,在马斯克的世界里用1年完成,到了别人的世界就要7~8年。 例如,马斯克创立的 SpaceX公司猎鹰9号火箭,不仅能回收,而且复用周转时间降到了21天,一次能发射53颗“星链”卫星,SpaceX 火箭发射的成本只是 60 年代俄罗斯联盟号的成本的3%(即1/30)。还有,2017年马斯克创立了boring公司,两年不到的时间,就在旧金山建成了总长1.83公里的隧道。如果按照传统的地铁方式挖掘预估成本是11亿美金,而boring公司的施工成本仅为1000万美金,仅为百分之一。

言归正传,开始讨论下面4个问题:

  • 第一性原理其实是一种思维方式
  • 软件研发的第一性原理是什么?
  • 在软件研发中,如何用好第一性原理?
  • 用好第一性原理带来的收益?

1. 第一性原理 其实是一种思维方式

最早提出第一性原理思维的人是古希腊伟大的哲学家亚里士多德,把它定义为“ 认知事物的第一基础 ”,而著名的法国哲学家、数学家笛卡尔将其描述为 “系统性地怀疑一切值得怀疑的事物,直到你获得无可置疑的真相 ” (类似批判性思维) 、 维基百科的定义为: 从基本的定律出发,不外加假设与经验拟合的推导与计算 。第一性原理常被延伸为 “回溯事物本质,敢于怀疑过去的设定、打破过去的认知 ,通过演绎法推导,最终得出新的结论 ”,所以可以说,是认知事物的哲学思想,也就是分享与解决问题的思维方式 。

不管哪个领域,其事物都存在其本质的东西,正如老子说 "人法地、地法天、天法道、道法自然"。所以,我们要回到事物的本质上,就是要回到自然法则上,回到物理规律上,从而 抓住事物最本质的特征,依据事物固有特性去推导、分析、演绎事物的变化规律,进而洞悉事物在不同场景下的表现形式,而不是随大流 、人云亦云,不会只看到事物的表面现象,不会生搬硬套别人的制度、流程和经验,不会在复杂环境中、不确定因素影响下迷失了自己前进的方向。

例如,电池作为新能源汽车的核心部件,成本占整车的比重很高。为了降低特斯拉的电池成本, 马斯克的逻辑是,“我不管现在的电池有多贵,我就回到本质问自己一个问题:电池的硬性成本构成是怎样的?无论如何也减不下去的成本是什么?无非就是铁、镍、铝这些金属,除了购买这些金属的成本是绝对降不下去的,剩下来的成本都是人类协作过程中产生的,那就有优化的空间 。”

第一性原理思维直击 事物本质,产生的效果就大不一样。正如 Google X实验室主管泰勒就说:“ 尝试做一样新东西,不外乎那么两种风格 ,一种是小幅变动,比如工艺改进、造型优化等,这时往往得到只有10%的改进;但如果要获得真正的巨大革新(10倍的改进 ),一般来说你就得重新开始,尝试完全不一样的方式,必须打破一些基本的假设。”   甚至硅谷流行这样一种观念: 把一件事情做到10倍好,比做到10%要容易得多 

循序渐进式的进步依靠的是苦干、更多的资源,而10倍的进步则建立在勇气和创造力之上,靠的是第一性原理的思维方式,是 巧干。

2. 软件研发的第一性原理是什么?

“ 第一性原理 ” 自 2017 年马斯克在采访中被提及后,最近几年在互联网和投资圈流行,但在软件研发中思考得不够。

软件研发的第一性原理是什么?

一般来说,先要思考和软件研发相关的一些基本问题,例如:什么是软件? 为什么要开发软件?软件是如何开发出来的?软件从哪里来、到哪里去?

例如: 软件 = 程序 + 文档 = 数据结构 + 算法 + 文档 ,让抽象的软件变得更加具体了,软件的开发转化为数据结构和算法的设计与实现、文档的编写。一个软件的交付, 数据结构和算法 是不能省的,但 文档 是可以省的,尽可能简洁。当软件设计简单、UI界面非常友好,就不需要什么用户手册,今天绝大多数App没有在线帮助(文档)。

软件是如何开发出来的?简单地说,通过需求定义、设计和编程、测试、集成构建起来的,哪个环节可以省去?哪个环节有最大的优化空间?按某些管理者的习惯性思考,任何环节都不可去掉,甚至有的 管理者 还说,每个环节都没什么优化空间了,我们已经优化得很好了。真的是这样吗?

软件其实就是团队之间、团队内部研发人员之间协作 开发过程 中产生的,正如马斯克所说,“ 剩下来的成本都是人类协作过程中产生的,那就有优化的空间”, 而且 比尔盖茨还说过  “一个杰出的程序员的价值是普通程序员的一万倍” 。 所以软件研发的各个环节就有优化空间,这也是为什么Amazon团队要招最好的人,并追求2-piece pizza这样的小团队。人力成本在软件研发成本中占的比重很大,“ 人员优化”是最值得去做的 。

软件研发的第一性原理 : 软件研发是人的智力活动,人是决定的因素,所以在 软件研发中需要优化与人相关的一切活动 ,包括个人能力和团队协作。

3. 在软件研发中,如何用好第一性原理?

从第一性原理出发,要优化人员,首先就要优化待开发的软件本身 。正如,我在给学生讲解敏捷开发模式时,强调 “研发组织分解”或 “建立小团队”的前提是:待开发的系统能够分解。系统分解得越干净,小团队才能更独立地工作,工作效率才越有保证。这也是为什么今天 微服务、serverless 很流行。系统的复杂性取决于业务的复杂性,如果业务很复杂,软件系统用什么架构(微服务、serverless等)都没用,这时就必须进行业务重组、业务变革或业务架构的优化。虽然业务驱动研发,但业务不是一成不变的,一定是可以改变的,我们要勇于打破业务惯例,大胆革新。

从第一性原理出发,在业务和软件本身优化之后,我们可以开始优化软件研发的各种活动,砍掉一些不必要的环节,把一些环节交给工具或机器人去做,进而可以优化组织和团队。 例如:

  • 需求可以自动采集吗?如构建用户反馈系统,自动收集用户需求;
  • 借助知识图谱、机器学习等进行需求分析和提炼;
  • 构建需求模型,自动生成代码;
  • 编程辅助机器人自动补充代码、实时代码检查分析等;
  • 封装成标准组件、原子服务等;
  • 利用JVM、容器技术,减少对环境的依赖;
  • 集成了自动化测试、自动化部署的交付流水线
  • ......

人多了,其实往往是坏事 ,正如樊登在其《低风险创业》一书中说,如果创业时钱多不是好事,因为钱多就猛招人、大做广告、买流量等,表面上看,不好的产品销售不错,会给自己错觉,觉得开发出来的产品是好产品,但最后钱烧光了,产品卖不出去了,还要裁人。创业时钱少,就不会花精力在营销上,而是 能省则省,踏踏实实做产品,靠产品功能和质量赢市场。

道理相通 ,软件研发中,一旦人不够,如果我们就喊缺人、招人,我们就不会去努力思考如何优化工作、如何减少不必要的浪费等。如果不招人,我们就会朝思暮想去优化工作,反而带来很高的效能。

当然,我们并不反对人多力量大,但如何有效分配人力,精准使用人力,也是研发效能更高的目标 ,如我军著名的三三制战术 (非人海战术,它也被美国西点军校奉为经典战术之一) ,起源于 抗日战争,成熟于解放战争,大量运用于 抗美援朝中,发挥我军人数上的优势,降低敌军武器上的优势。

概括起来,软件研发有许多地方可以进行创新, 从第一性原理出发, 软件研发降本增效的基本要点是 :

  • 优化与人相关的一切活动 (包括人与组织 )
  • 把 招对人 、培养人的能力放在第一位,尽量 少招人
  • 做正确的事 ,以终为始,从客户真实需求出发构建软件
  • 从业务架构、系统架构开始,内建质量, 追求极致的简约
  • 如果能让工具做的事情,尽可能让工具做
  • 尽可能标准化、组件化、原子化、服务化。

更多内容,也可以参考: 软件研发效能的底层逻辑 。

4. 用好第一性原理带来的收益?

用好了第一性原理出发,就能达到“10倍效能”, 其实不一定能达到10倍效能,“10倍效能”只是一个代名词(思维方式),是指高效能,可能是2倍、3倍,也有可能是20倍、30倍。即使是2倍效能,也很好了。想想像腾讯、阿里这样的大厂,效能能翻一倍,那将是奇迹。

我们期待奇迹发生,相信奇迹能够发生。