啥叫工程?啥叫工程师?
咱们经常讲软件工程师、软件工程。但我老想:我们大量的人是否配称得上软件工程师这个称号。
(1)组织
工程是一大堆人作业,需要:
岗位-级别-梯队
组织-分工
建制组队
这在中国软件业也是一个非常突出的问题。因为太注重软件的最终产出成果-代码,所以岗位-组织往往缺失,导致不是建制团队,而是一群产出代码的程序员。很多不产出代码的岗位被忽视-边缘-缺位。
(2)项目
工程需要良好的项目管理:
计划、任务、进度
质量
预算-成本
这在中国软件业也是非常大的问题,尤其对预算-成本-ROI没有节制,把软件当做自己的孩子一样无限宠爱无限投入,也因此导致目标丧失-范围失控-进度失控。虽然很多公司都想采取西方的IPD方法,但是西方是基于资本主义-投资ROI的逻辑来发展IPD的,所以是自研还是并购这在西方没有什么心理障碍,在我国由于不是资本家投资企业,所以把企业当自己孩子无限呵护、把软件产品当自己孩子无限呵护,所以这也是导致我国软件企业实施IPD大多无效。当然,还是由于我国不是资本主义,所以每个企业只能自己养自己孩子,逐渐养成了宁为鸡头不为凤尾、宁为玉碎不为瓦全的文化,这也导致了如果发动并购,最后也是专业人才、产品、客户三者都最后一场空,所以这更导致了中国软件企业自研而不并购。
(3)设计
大家都知道要做一个工程之前得做设计。大家如果见过建筑工程、机械工程的蓝色绘图纸,看到他们一遍遍地测量角度、进行数学计算验证,就知道工程的严谨性。
我是很少见软件行当在设计期做大量的数学计算验证。我想如果大家去研发难以修改的硬件产品,或者去研发人命关天(医疗设备软件、高铁飞机调度指挥软件)、财产关天(银行软件、电信计费软件、电商交易软件)、安全关天(安全软件、网络防火墙),可能就不会这么任性了。
(4)试验
做工程,大家都知道图纸设计好了也不能下一步就开干,而是做试验验证。这和软件业曾经提倡的测试驱动代码开发很像。但是很多软件团队既不搞正规试验工程,也不搞敏捷-测试驱动开发。
做什么试验、试验环境的投入建设、试验的过程设计、试验的结果数据记录、试验的结果报告、试验的专家评审验收,这都是在其他工程类常见的试验事项。我是很少见到软件业的工程是这么做的。
(5)基线
工程需要标准、Baseline基准。
这在软件业是非常大的问题,没有建立基线。当然,要建立基线,需要投入建立环境,要投入资源建立基线,这些不能直接产出最终产品成果的工作的资本投入,这是很难以接受和容忍的。
(6)工具
工程需要大量半自动化工程工具。
对于软件工程来说:
需求管理工具、项目管理工具
分析工具、设计工具
编码工具、
代码审核工具代码托管存储工具、代码版本管理工具
持续集成工具、自动化测试工具
持续发布工具、持续部署交付工具
DevOps工具、可观测性-可度量性工具
这些工具Pipeline肯定得有专门团队去建设、专门团队去持续改进-维护它。
大量中国软件企业本质上还是一伙人手工作业,相当于手艺人行当,这就不能称得上软件工程。
(7)技能认证
在其他工程类,都有岗位技能培训、岗位技能考试认证。
我说的岗位技能,指的是一个岗位需要具备的技能,这里说的技能是他能合格完成他所处级别岗位要求工作的所有技能。
所以我们会看到其他工程类,是一项项技能进行培训与考试合格,最终才发岗位合格证书。
而且是持证上岗。没有证,不能上岗。