李云:高质效软件开发的两大核心竞争力

在数字化和数智化的大背景下,软件在企业的产品和服务中所占的比重越来越大,无论是纯软件企业还是软硬件结合的企业(后面两者都简称为“软件企业”),软件开发的质量和效率可以说决定了软件企业在市场中的竞争力和生存质量。

无论一个软件企业掌握了多么核心的软件算法,但绝大多数都会在软件开发的质量和效率上碰到瓶颈,这不仅严重制约了软件企业有力应对市场竞争,还因为人力成本高企而给企业带来繁重的成本负担。

问题是:软件企业如何应对日益严峻的软件开发质量和开发效率的双重挑战呢?这背后当然涉及到人,特别是主导软件开发的程序员。为此,这个问题也可以转变为:个人应掌握怎样的软件开发核心竞争力?

对于企业来说,具备掌握软件开发核心竞争力的人,才能帮助企业构建软件开发的核心竞争力。那对于个人来说,掌握软件开发的核心竞争力又意味着什么呢?

不置可否,当下正是AI兴起的时代,AI的出现让不少软件开发的从业人员,感受到了强烈的职业安全危机。另一方面,一代代后浪的出现,也让前浪们感受到了危机,担心自己精力不如后浪而无法保持职场竞争力。

对于个人来说,掌握软件开发核心竞争力,意味着能更好地应对职业安全危机。

不过,就我20多年软件开发和技术管理的经历,发现“什么是软件开发的核心竞争力”是个很少有人和企业认真思考过的问题。这么一来,个人和企业的发展因为少了这个重要的牵引力,而很难走出软件开发低质效的焦油坑,明知解决这个困境之重要和紧迫,却感到无力,甚至是无望。

在2024年10月19日QCon上海站,在我的题为《AI时代团队管理的变与不变》的分享中,我带来了自己的思考。通过提出工程(师)文化太极图,表达了我对软件开发的两大核心竞争力的理解。

软件企业和软件开发从业人员,始终应聚焦修炼的是设计能力和工程能力。设计能力是指通过概念的塑造、拆分与组合,实现对软件复杂度的驾驭。设计能力是整个软件开发活动中的根本任务(而非编码),这一点Brooks在他的《人月神话》中表达了类似的观点。工程能力是指通过工具、流程和最佳实践,来确保被开发软件的质量和开发效率。

设计能力和工程能力之所以采用太极图来表达,是因为两者是你中有我、我中有你的关系。换句话说,运用设计能力时需要考虑到工程能力,反之亦然。

让我以房屋建造作比方来帮助你更好地理解这两大核心能力。

房屋建造需要先设计出建筑图纸,背后需要的是设计能力。当图纸有了以后,工程能力决定了能不能造出图纸所描绘的建筑。除了在设计的过程中要考虑能不能造出来外,建造的过程中还得做一些看似不那么重要的事(比如,搭建脚手架、制造称手的工具),可正是这些看似不重要的事恰恰是工程能力的重要组成部分。

之所以给这个图冠名“工程(师)文化”,是希望组织能将两大核心竞争力当作企业文化和个人能将之当作专业信仰来看待。

设计能力是一个比较虚的话题,能否从工作结果上体现它的实呢?为此,我对太极图做了进一步的展开。

简单说来,设计能力的实最终体现在代码和文档上。好的软件设计,意味着代码易读和易改,进一步意味着需要通过文档对设计进行一定的描述,以便抽象的软件设计能更好地被人理解和掌握。

虽说设计能力让人觉得有点虚,也正因它的虚而让人没法短期速成掌握,因为背后需要的是个体的抽象思维和概念能力(后者更高的境界是洞察力),而这些能力是需要长期反复实践才能掌握的。也正因设计能力的这一特点,才使得理解并掌握了设计能力的从业人员,能更好地应对后浪和AI等新技术所带来的职业安全危机。

类似地,为了让工程能力更容易让人理解,我对太极图做了更进一步的展开。

工程能力中的敏捷,包含敏捷开发和及时改善两块内容。敏捷开发是指,将整个软件分成多个迭代一步步开发出来,通过每次交付一小块功能,从而能更早地检验阶段性成果和收集用户反馈。这样做除了能减少因为需求理解出现偏差而带来的返工工作量之外,还能让软件开发团队能更快地收获阶段性成果而保持士气。及时改善是指,面对软件开发活动中所发现的问题,通过及时改善进行纠正,避免积少成多地变成故障或带来更大的浪费。

工程能力中的七化,指的是规范化、流程化、工具化、自动化、产品化、文档化和现代化。这七化中最需要解释的是产品化和现代化。

产品化的背后,强调的是保障软件开发质量和效率的工具软件的易用性。好些大厂设置有独立的研发效能团队,如果研发效能团队的价值感不足,大概率是因为软件开发平台的产品化不足,因为得不到用户的认可而使然。

现代化意味着,工程实践得跟上整个软件行业的发展趋势,通过借力行业的发展成果来提升软件开发的质量和开发效率。

最后来说一说工程能力中的敢改。房屋建造好后,顶多对不同的房间在不同的时期做改造或装修,复杂度是限制在一个房间里的。相比之下,软件会因为需求的不断变化而改变,且规模越大、越复杂的软件这样的情况就越多,所做的改变也大概率不只是局部性的,而是包含全局性的。

另外,我们并不担心软件的不完善,但担心软件改不动,因为只要软件改得动就能逐渐变得完善。软件改不动体现于,为了修复一个问题却带来了三个新问题,或为了修复一个小问题却导致了大故障,最终让人失去改的勇气和信心。

敢改是需要以工程实践做支撑的,比如,落实单元测试和部署CI/CD。让工程师在改的过程中,因为有工程实践做保障而对改动的质量葆有信心。

提出这两大核心竞争力的原因,是希望软件企业和软件开发从业人员,能分别更全面地看待软件开发这个行业和职业。千万不要只顾交付给客户或用户的软件的代码,还得顾及那些不交付给他们的、但对于交付出去的代码的开发质量和开发效率至关重要的代码。

设计能力决定了组织和个人能开发多复杂的软件,工程能力决定了组织和个人能开发出多高质量的软件和有多高的开发效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值