软件工程搞了50年,作坊式软件开发的出路

用作坊式来比喻我们的软件开发,这与高新技术的软件开发工作似乎很不切合,但不幸的是,我们大多数定制化应用软件的开发过程很形象的展示了“作坊式开发”特点。我没写过代码,但从事过长期的IT管理工作,程序员朋友可以从本文感受一个管理者眼中的作坊式软件开发及其出路。

20世纪60年代,计算机的应用范围得到较大扩展,对软件系统的需求和软件自身的复杂度急剧上升,传统的开发方法无法适应用户在质量、效率等方面对软件的需求,这就是所谓的“软件危机”。为解决这个问题,年NATO会议上首次提出“软件工程”(SotfwraeEngineeirng)的概念,提出把软件开发从“艺术”和“个体行为”向“工程”和“群体协同工作”转化。其基本思想是应用计算机科学理论和技术以及工程管理原则和方法,按照预算和进度,实现满用户要求的软件产品的定义、开发、发布和维护的工程,从此也诞生了一门新的学科——软件工程。

50年过去了,我们今天环顾四周,作坊式的软件开发依然比比皆是。今天的定制软件开发普遍受制于老师傅的手艺,基本都是一个师傅带几个伙计的小作坊,可能大一点的企业为了统一各个小团队的工作,会有一些“规程、制度”,在管理上也要求一些“计划和方案”,不过只是一个个不同的很多小作坊罢了,因为其运作管理和今天其它行业的精细化管理比起来可以说是天壤之别,软件工程的管理体系和措施落地执行的普遍不好。

一、说你是作坊还别不服气,看看以下是不是招招致命

我摘录了网上一个程序员写的几条表现,主要包括无合理开发计划、需求不明确成为常态、无任何文档和评审一般都事后凑数、领导不了解技术和业务、版本管理混乱、鄙视管理科学推崇关系帮派,其实日常开发工作中可能普遍或多或少的存在这些问题,我认为作坊式开发的集中体现是有组织的管理难以落地,有以下几个主要问题:

(一)对“师傅”的依赖严重

师傅就是骨干工程师,很多东西都是装在开发人员的脑子里面的,往往会因为一两个开发骨干走了,就造成整个团队的瘫痪,如果研发骨干一个人另谋高就,公司投资就将全部付之流水。我们看到很多团队里的“技术权威”使得老板也不敢对其“指手画脚”,否则他会“撂挑子”,事情成败取决于师傅的能力,实际上说明工作缺乏组织的有效管理,在这样的情形下,生产过程基本上是无序的、无约束的,老板作为“管理者”角色的职能几乎谈不到,甚至受师傅的摆布,除非老板是一个非常高水平的技术大牛。

(二)老板对软件开发的过程无法介入,各层级之间也是以人为纽带的弱管理

老板大概知道要开发个什么东西,需要什么时候交付,但具体开发过程、产品工期、产品质量老板只能问技术总监,有趣的是技术总监也是个大概齐,更多的只能问项目的负责人,虽然越接近开发工程师,越了解实际情况,但项目负责人甚至都不知道手下的工程师今天倒底是写代码了还是打游戏了,这种粗放的管理水平在今天的其他行业是很难想像的。

(三)无文档式开发,设计都在师傅的大脑里,开发项目可持续的风险很大

作坊式开发过程中的技术负责人员一般是个“英雄”,应用系统的“设计”是在其脑子里完成的,在其意识里工作结果就只是一堆可执行的程序,既然能直接敲得出来,自然没必要再做写文档的“重复工作”,各种文档的不健全现象普遍,可以形象的比喻为“大楼有了,图纸滞后”,现实就这么可笑,更要命的是很多后补的开发规范的技术文档与软件产品本身并不能对应。

缺乏必要的设计和文档,导致由于设计思路和实现细节在项目组内的交流困难,大部分的系统开发过程由于大量尝试性、重复性工作而变得缓慢,后期调试会出现许多意想不到的大大小小的问题,狼烟四起之时大多数技术人员特别是技术负责人主要工作是“救火”。这样的项目,工程延期往往是普遍现象,“火势太大”情况下的人力再投入常常被“情非得己”地采用,工程越大越是如此。软件开发的特殊性决定了其工程效率与编程人员的数量并不成正比,没有过程文档支持下的项目到了后期,人员的投入反而有可能使工程进度减慢,甚至失控。

在作坊式的软件企业和开发团队里,会“救火”的技术人员就是掌握命运的英雄。可想而知,如果这样一个英雄半途离开,那没有文档支持的项目的中间结果对其他人来说基本上就是“一堆垃圾”而已,也就是说,前期投入的资金只是造了“一堆垃圾”。

二、作坊式软件开发的主要原因

(一)软件开发的特殊性

这要从FredBrooks在年所发表的《没有银弹》说起,“NoSilverBullet”写道:“没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简洁性获得数量级上的进步。”因为软件的根本困难(Essence,包括复杂度、一致性、可变性、不可见性)导致每一个软件开发过程都具有其与众不同的特殊之处,不同的软件要解决的实际问题通常都具有相当大程度的复杂性,既不需要厂房也不需要机器,是工程师大脑里的生产,优秀的工程师“作坊师傅”自然非常重要,软件开发从诞生起就很作坊,一些大牛程序员凭借一己之力创造了众多伟大的软件技术产品,所以软件开发天然有着作坊的基因。

关于“NoSilverBullet”多扯几句,其实也没有那么悲观。第一,所谓“没有银弹”,只是说不能将生产率提高一个数量级,但并不妨碍我们继续寻找“铜弹”、“铅弹”,即有效解决次要问题的办法;第二,“没有银弹”只是一个经验论断,并且是从软件工程的角度来作出的论断,在未来、在软件工程之外的领域,或者就可以找到解决根本问题的“银弹”。

实际上呢,Brooks更多地是站在当时的时点历史的看问题,年以后的十年,软件开发的确没有出现十倍效能的进步。但是进入21世纪后,当软件开发迎来了互联网的广泛应用之后,网络提供了更大范围的知识共享和技术学习,在部分行业和领域的软件开发效能取得了快速的进步,可以说互联网是软件开发的第一颗银弹恰如其份。我们看到的是互联网促进了工程师的学习和共享,但并没有改变软件开发的日常管理和组织形态,只能说变成了效率更高一些的作坊,作坊的效率有了十倍以上的提高。

(二)软件工程化开发的成本太高和“无知的用户”的广泛存在

定制软件开发几十年来面对的多是“无知的用户”。他们并不知道软件开发应该有计划、调研分析、方案、设计、质量监督、测试、培训、系统说明文档等等内容,他们对软件产品应该具有的性能、适应性、安全性几乎一无所知,他们甚至对一个自己所需要的应用系统的功能范围都不是能够很好地定义,这样的不成熟的用户是很少会对开发企业和开发团队提出实质性生产要求的。他们往往将期望寄托于他们选定的开发企业,认为一切难题都会由开发方很好地解决,他们不会想到软件开发的失败可能(失败了也是开发方的事),当然也就不会去了解会导致开发失败的风险因素,也就不会提倡以工程化的规范方法来约束过程了。

“无知的用户”广泛存在,是“作坊式开发”赖以生存的沃土,培育了“作坊”的勃勃生机。道理很简单,既然用户要的是包括其规划功能的、可以“跑得通”的应用程序,何必当什么工程来费时费力地劳作,直接敲出来不就得了!有那功夫还不如找些理由应对用户的“挑剔”。

(三)软件开发的运营管理缺乏有效的IT支撑,很奇葩的灯下黑

管理信息系统在各行各业的应用,极大的提升了管理效能,今天不少优秀企业的运营管理很牛叉,主要的功劳是信息系统对核心业务支撑的好,从人的角度看企业的管理力和领导力或者说管理团队的运营管理能力并不起主要作用,都是沾了信息系统应用的光。软件开发行业则是灯下黑,核心业务并没有得到信息系统的有力支撑,很奇葩的现实,变革已经进入进行时。

我们今天看到各行各业都在实施信息化的深度应用,不论制造业还是服务业,做的好的企业基本都实现了核心业务流程的信息化,通过海量数据和丰富的应用软件创新,为企业面向顾客的服务、内部管理和决策提供了全方位的支持,各种ERP、各种信息系统,搞的好点的企业都可以说处于高度可控的运营状态,人围着信息系统转,企业的大脑是信息系统。软件开发行业相比起来就是小农经济手工作坊的感觉,开发工作不能基于对其核心业务的产物(每一行代码)形成实时数据流的全程无缝管理,数据基本都是粗线条的、割裂分段分块的,信息系统的应用只能是分段分块的工具级应用,上升不到支撑业务全流程的精细管理,实践中更多需要依赖人对人的粗放管理来实现的,很多时候还需要靠吼,这种灯下黑是不是很不可思议、很超级奇葩呢?

只要是软件公司的老板都希望能实现其核心业务的信息化,让信息系统支撑程序员的工作,让程序员依靠信息系统工作,最终实现信息系统助力企业管理运营效能的提升,这才是商业企业的必由之路。今天来看,符合时代特征的软件开发管理的基础是基于每一行代码的信息化管理,需要让软件开发全程透明,让老板很容易知道谁干的好干的多,让项目工期控制和质量控制上有明显提升,让程序员能比较容易的进入和退出……

老板们都知道,想要做好软件开发的管理工作,软件开发核心业务的信息化支撑是核心,怎么把一行一行代码管起来是关键,但是有心无力做不到啊!

听起来也很不可思议,开发软件的人没有办法用软件把软件开发工作精细化的管理起来,现实就是这么搞笑,因为太难。

为什么太难?我们看到不论是制造业还是服务业,支撑其核心业务的信息系统的根子是实现了所有细节信息的全流程管理,但是请注意,所有的信息之间都是线性流程化的,逻辑和先后都是普通人脑可以形象思考的,所以开发个信息系统来支持对业务的运营管理可以越做越细,数据可以越分析越有用,这个只要花钱是不难的。

软件开发工作则不然,它的核心产品其实就是一行一行代码,核心业务信息系统要处理的也是一行一行代码,代码之间的流程顺序和逻辑关系是非常复杂的,不是线性流程的,用传统信息处理中的增删改查是没有办法来实现对代码(信息)的有效管理利用,所以到今天我们依然没有看到一款能支持软件开发企业精细化管理的信息系统。

我只能大概作个比喻,其他行业的信息系统处理的信息是“死”的,它本身只是数值,可以通过线性流程来处理,以支撑这些信息表达的核心业务运营管理;而软件的代码,它是“活”的,软件开发的核心业务要实现用信息系统有力支撑,一定要实现对这些活的信息(代码)进行有效处理,传统的信息处理技术估计就没有办法了。所以,软件开发行业这么多年除了互联网这颗银弹外,一直没有一颗在运营管理上有突破的银弹,因为开发不出来一套能支撑软件开发工作的核心业务的信息系统,没有办法对软件开发工作实现精细化的信息化管理。

三、目前几个方向的努力

(一)提升软件工程管理能力

这一点就不多说了,执行起来成本太大,大企业、大项目落地是可行的。

(二)行业、领域的低代码开发

低代码开发平台是目前看到的一种脱离作坊式的实践,由于软件开发工作是依托低代码开发平台来开发的,平台本身形成了完整的闭环管理,可以认为使用低代码开发平台的软件开发企业随着平台功能的完善,逐步能实现对软件开发工作的精细化管理。

既然是低代码开发平台,肯定就有封闭性,在新技术、新体验的应用方面可能会显现出支持能力不足不及时的缺陷,对程序员的个人自由发展也有一定限制,对企业的自由度也是非常大的约束和限制,总体来看,低代码开发平台可能会局限于一定的范围和场景内使用,很难从根本上改变软件开发行业的运营管理能力不足的问题。

(三)人工智能在软件开发中的应用

针对软件开发中代码信息的独特性质,传统的针对线性数值类“死”信息的处理看来走不通,只能从非传统的数据处理技术来寻找解决方案,估计只能是人工智能了。曾总的猿开开云开发平台开创性的提出了用人工智能的方式来解决对这些代码信息的有效管理,实现软件开发的每一行代码都能被信息系统有效管理起来,使得开发全过程的每一行代码都置于信息系统的有效管理之中,在软件开发中实现类似于我们今天在各行业看到的精细化管理,从而全面提升软件开发的效能。

我估计很多学软件编程的人没有考虑过软件开发核心业务的信息化支撑问题,怎么用信息系统把每一行代码精细化的管起来?当你深度了解猿开开的技术原理后,就能理解其精妙所在,为了能有效处理这些软件开发中最具体的代码数据,你首先要在“猿开开”系统里定制自己的各种开发规范,这就形成了像下围棋的规则体系,程序员开发的每一行代码可以比如为你下的棋子,除了互相之间发生关系影响外,还要与这个规则体系发生关系影响,通过系统自动的智能化的根据每一行代码的写入来做出各种处理,否则就只能像现在这样,主要依靠程序员本身的能力和分段式的粗放管理。

猿开开是不是能改变作坊式软件开发的银弹呢?

下面简单介绍一下猿开开,它是基于人工智能在软件开发领域的突破应用推出的,是一款革命性的云开发平台。猿开开实现了哪些业内首创?

猿开开的应用让软件开发企业一把手能够全面掌控软件开发工作,在不改变程序员原有工作方式、几乎没有学习成本的条件下,让开发工期、员工效能、代码质量全程被掌控,并且大幅提高开发效能。以下均是业界首创:

1.首次实现了开发规范的强制、无感、智能化的落地,通过桌面探针和云端处理的连接,让开发规范真正得到遵守并且发挥巨大作用。

2.首次实现了代码实时在线提交、智能集成,极大的提高了开发协同能力,强化了对开发全过程的监管。

3.首次实现了将软件开发的核心价值集中到详设阶段,通过细化到小时的任务拆分,其它的具体开发任务完全可以通过在线的虚拟团队实现云化的高可控开发,常备的技术员工队伍可以大幅度减少。

4.首次实现了开发项目大部分代码的规范化自动生成、自动更新,让自动生成代码变得有显著价值,大概主要包括框架、路由、协议和接口类的代码。

5.首次实现了开发人员所需要的各种文档百分之百自动生成,而且跟每次开发的变更都是实时同步的,代码和文档高度一致,对系统的持续性有极大的好处。

猿开开的核心技术创新是什么?

软件工程的根本困难在于:都是概念上的结构,而不是对概念进行表达和实现逼真程度进行验证,和建筑工程比起来,在复杂度上、一致性上、可变性上、不可见性上、可持续性上都要超出很多,让人脑在实际驾驭过程中很困难。

猿开开认为软件工程中所有问题的根本在于开发规范不能得到实时、自动、低成本的落地和维护,猿开开基于面向过程的模式驱动技术是开发规范高效落地的核心,该技术是人工智能归纳领域的一次突破性应用,通过寻找最大化共性,自动形成作用于系统的规律和规范,并且能不断的自动跟踪调整。

面向过程的模式驱动技术,通过自动化从多个事务中抽取、建立、配置、驱动、运行来建立共同的规范,这种人工智能的应用,使得规范建立和持续维护的成本非常低,是无感而强制的,从而巧妙的在根本上解决了规范落地的难题。

结尾:猿开开的技术大牛曾总提出的模式化理论,让人工智能在软件开发的运营管理过程中有了开创性应用,并第一次在实践中实现了软件开发工作全程在线、智能化自驱动,使得最基本的运营管理诉求在软件开发行业第一次被满足,让每一行代码被置于系统的管控之下,通过信息系统让软件开发企业和团队的管理工作得到落地加强,开发效能显著提升。

文章已于修改


转载请注明:http://www.zjiaren.com/fzgc/fzgc/11662.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了