工程化的反思

工程

在 20 世纪 七八十年代 出现了一系列的 “软件危机”,

不少软件项目的结局都很悲惨,

要么远远超出了规划的时间表,要么软件的质量难以控制。


人们意识到软件领域中遇到的这些问题,其实可以用 工程方法 得以改善和解决。

工程师最关键和独特的特点是,发现、理解并结合实际的局限,来达到满意的结果。

后来又经过几代人的研究和实践,不断丰富形成了软件工程这一学科。


所以,软件工程师这个职业自诞生一来,

就是为了解决上述软件问题的,包括但并不限于软件功能的实现。


这是因为要实现一块功能往往是比较容易的,但对整个软件开发活动进行管控却很难。

我们需要关注项目、产品、质量、人员 等一系列因素,

才能结合实际情况达成满意的结果。


那么现在为什么会有专门的 “工程化” 这个说法出现呢?


这是因为软件工程师出现后,软件行业经历了飞跃发展,人才涌入促进了社会化分工。

大家会考虑如何进行资源重组,能够实现更高的产能。

此外软件领域内部的知识量也越来越大,分治才能解耦进一步提高生产力。


在这种趋势之下,软件工程师被划分成了很多不同的角色,

现在前端、后端、数据库、算法 不同角色的划分只是社会化分工阶段的一次快照,

以后这些角色还会不断的调整。

群体

以上是前些年的事情,最近市场环境又出现了新的变化,

软件工程师的人数进一步扩增,甚至已经变成了不小的一个社会性的群体。

这一群体的出现,会带来如下这些影响,

  • 软件工程师人数增多,逐渐会产生一些社会学效应。比如 996、内卷 很大程度都是被这一群体带动起来的

  • 这一群体具有一定的相似性,会有专门的为软件工程师提供服务的产品出现,不论是生活上还是工作上

  • 一个公司有成百上千名软件工程师的情况已不再罕见,如何解决大规模软件工程师团队的合作和效率问题,关注的人会越来越多


软件危机引发了软件工程,软件工程师的扩增又会引发了新一轮的软件革命。


很多软件工程师或组织,对软件项目的理解还很原始,

或者说 “工程化” 问题还远远没有被解决。

有多少人仍深陷于延期、需求变更的泥沼中,

还有多少组织深陷于技术债务、基建不稳的困境中。


这其实是因为大家一开始就没有用工程方法来执行,

组织内部又缺少对工程理解比较深入的人员。

工程化

有人可能想说,不是有《软件工程》这门课程么?

为什么说大家对工程的理解还不够深入呢?


这是因为课程 和 实际项目 相距甚远,

课程不会说 软件项目的开发过程是按交付日期倒排的,

也不会说 在截止日期之前变更需求应该如何拒绝,

更不会说 软件项目中遇到的大部分风险点其实出现在团队对外沟通的边界上。


这时候就会需要有一些人,既了解软件开发的整个过程,以便从中识别效率瓶颈;

又能洞悉人性,在各种利益纠纷中找到共赢点;

还要对产品定位、项目节奏有牢固的把控。


只有这样才能安全的摆脱 “软件危机”,实现整个组织的 “工程化”。

小结

“工程化” 其实并不仅限于技术这么简单,更多则是 “如何做好一个项目” 的推广和总结。

软件工程师利用各种手段解除 “软件危机”,过程中所形成的方法才是 “工程化” 方法。


做一个脚手架、搭建 CI/CD 系统、做组件库,我认为这些说法不够完整,

它们只是软件项目中的某一些关注点罢了,更核心的要解决的问题可能要复杂得多。


松下问童子,言师采药去。

只在此山中,云深不知处。