其实这篇是我昨天写好的,和我昨天写的那篇《啥叫工程?啥叫工程师?》是一体的,但是内容又庞杂,所以就分成了两篇文章。
(1)前导故事1
我曾经开发过一个核心模块,受好多人关联依赖调用和状态更新,于是我用状态机重写了一遍代码,一劳永逸了。
但是后来的人却接不起来我的代码。业务专家和产品经理给他讲的是现实业务场景,他返回头打开代码一看,无法产生直接映射关系。
咱们大多数中国程序员是:现实业务什么逻辑、到了电子计算机里就什么逻辑、到了代码里就是什么逻辑。
(2)前导故事2
我曾经手下有个开发Leader,能力在众多开发Leader之中还算水平可以的。他也很喜欢设计模式之类的东西。但是他又没学到那么精通吃透的地步。
于是他就产生了东施效颦的问题:他没有抽象能力但是他还努力去做抽象-共用,最后反而弄巧成拙,大家都关联依赖他,他还做不到接口设计稳定,他也做不到这块代码的内部简约性-架构性。于是,大家有什么需求,他都得改他这块代码。他有时候要满足大家各个口的需求所以不得不又把接口改掉,于是,大家又得连带着被迫改一遍大家自己来适配他。这就形成了共振。
其他程序员和开发Leader的水平还不如他呢。所以面对这样的情况,我后来下了一个原则:尽量不要抽象-共用-关联依赖。要复制-独立隔离
为了达到这个原则,我纠集了一批核心产品经理和一批核心开发Leader:
产品经理梳理各自负责的产品系统,从中识别出经常出现的典型功能和典型UI
开发Leader把这些典型功能和典型UI代码打开,从中抽取出通用的代码,形成代码模板。
后来形成了13套常用功能和典型UI的模板,每批新人来了,都用这套来培训,这样也形成了产品详细设计文档相对标准化、代码开发相对标准化,也降低了一般产品经理和一般程序员的工作技能要求。
(3)
不同的功能是有不同的业务要求-设计要求-代码要求-数据库要求的。
比如高频窗口处理类功能,业务处理需要非常高效快捷,所以UI一定要简约,还得高性能、防着并发-锁控制,还得高稳定-高可用。
比如计费-核算类功能,要求的就是精确,不仅计费-核算逻辑要精确,而且在代码层-数据库层进行数据类型处理和数据位数处理都得要求精度。这类功能除了高性能、并发-锁控制、高稳定-高可用,还得额外注重事务处理-数据高一致性。
比如逆向操作类功能。很多程序员写主干流程-正常正向处理流程,都还能保证功能符合度并且不会出现什么疏忽逻辑bug。但是一涉及到异常业务处理流程尤其是常见的逆向操作类功能,很多逻辑就开始想不清楚了。其实这个问题在现实业务中也同样存在,正向出库仓储物流很简单,但是一旦涉及到退货退库这种逆物流,很多业务流程就开始乱套了。
比如审批类功能,好几个功能靠一条审批链条串联在一起,不同的审批环节需要做额外的不同操作才能走通整个审批流程。很多人不会写这类功能。
比如需要数据可追溯、数据版本化的功能。很多中国企业软件做不到数据版本化,比如你现在查询上个月的数据,和你下个月查询上上个月的数据,很多时候出来的数据就不是一个数据了,因为数据没有版本化,数据状态被更改了。还有数据可追溯,关联性不足,既不能做横向关联追溯,也不能做纵向追溯。很多程序员笨拙地用常规做法做,却很少把Cube的上钻下钻切片旋转的范式迁移过来。
比如决策层需要的功能,需要可视化多,需要操作简便,需要看汇总统计数据多,所以这也相应给UI设计、代码实现设计、数据库设计,需要做特殊的设计,不能再像过去写业务处理功能那样思维了。
(4)
综上所述,不同类型的功能,需要有针对性的功能设计-UI设计-代码实现设计-数据库设计。
这些功能,也应该分开发Leader、高级程序员、中级程序员、初级程序员不同级别的程序员来担当。一般跨好几个模块要串联的功能,由开发Leader来亲自开发(如审批类功能)。一般非常核心的功能(如高频窗口处理、计费-核算、逆操作)的就需要高级程序员来开发。对于主干流程上的功能就需要中级程序员开发,而初级程序员只能担当开发旁支流程功能。
(5)
至于高弹性IT资源需求的功能、局限IT资源需求的功能、高安全要求的功能、高集成要求的功能,则需要平台下大力气,然后应用开发高级程序员和平台开发程序员一起协作。
(6)
最近ChatGPT+Github写代码能力被IT业界人们讨论得沸沸扬扬的。我想对于代替CRUD增删改查功能问题不大、对于代替只会使用开源框架只会调用API的码农也是问题不大。但是要代替我上述说的,那我是想象不出来的。
毕竟,在建筑工程行业有工程师也有农民工,在软件工程行业也有软件工程师也有码农。
过去几年一堆人搞所谓的低代码工具,我想了想,这和OA表单无代码本质是一样的,这也和各个企业软件中的Script代码也是一样的(甚至达不到人家PeopleSoft PScript的能力,更达不到PowerBuilder Script的能力,因为这事要求编程语言技术和编译器解释器技术的,中国尚未有能力做)。至于ChatGPT+GitHub,大家想起90年代初的大连雅奇MIS没,也是代码生成模板框架的工具。