别再垒代码了
(图为中国工程院院士倪光南)
引言:
根据倪光南院士 11 月 17 日在“飞算全自动软件工程平台发布会”上的演讲中介绍,我国的软件和信息服务业总量世界第二,2019 年达到 7 万多亿元人民币。从规模上来看,我们的软件人才在世界上仅次于美国,2019 年我国软件从业人员为 673 万人,在世界上仅次于美国。每年中国毕业生的数量世界第一,其中大量都是软件人才,这些使得我国软件从业人员可以很快地达到世界第一。
倪院士同时指出,“尽管软件行业增速很快,但我们仍未很好解决某些方面受制于人的问题,特别是一些基础软件,还有短板。例如操作系统、工业软件等基础软件对外依存度大。”
具体到软件开发自身的问题,“迄今为止,软件行业作业方式落后,过度依赖人工,而这样的依赖,会造成四个很明显的痛点:项目成本高、开发周期长、代码质量低、团队管理难。”
针对上面这些痛点,飞算科技提出了很好的解决方案,正在研制的“全自动软件工程平台”为解决软件工程的这些痛点,提供了科学实践的基础,对复杂的软件工程开发提供了可靠和可行的工具,在各行各业进行产业互联网和数字化转型的时期,具有不可估量的意义。
本文回顾了从云计算产业在国内落地以来,所经历的企业上云的历程,以及技术推动下微服务和低代码运动的兴起,以及我国像飞算全自动软件工程平台这样的自主软件品牌,所做的创新和实践。
(图为国际欧亚科学院院士、国际欧亚科学院中国中心副主席张景安)
2008 年,王坚在阿里战略会议上算了一笔账。2007 年淘宝成交额是 600 亿,什么时候能做到 1 万亿,以及到 1 万亿时需要花多少钱?
大家估算是 2012 年破万亿,如果按照淘宝客单价 100 块,那么 1 万亿除以 100 块,每年就有 100 亿的交易量,每件商品需要 n 次搜索+浏览+图片,然后再折算成需要购买多少 EMC 的存储、多少 Oracle 的数据库,以及多少台 IBM 的机器。算下来,等到达到 1 万亿那一年,每一年都要付给这三家公司总共 200 亿元。
即使付了 200 亿,也不一定能支持,全世界还没有人做到过这个规模。
算完这个,马云当即就表示,即使当了裤子,也要把阿里云做出来。在场所有的人都支持。
2009 年王坚开始做阿里云。到 2014 年,已经做到了前 5 名。阿里云做起来之后,自己用当然不够划算,需要鼓动客户来用,这样就可以分摊掉成本。
先开始是亲戚用,比如支付宝用阿里云。然后一些建站的小客户用。2015 年,赶上了一些大客户,比如快的对滴滴的大战,然后是新浪微博,这些互联网客户体量非常大,互联网用云也是刚需,是上云的第一波。
但互联网公司本身技术能力强,忠诚度低,传统企业上云,成了兵家必争之地。
数字化转型
传统企业上云,首先得完成数字化转型。
所有的企业做数字化转型,除了要去把以前的数据做归拢以外,更多的是想什么?打开互联网,用互联网的流量进来,不管是零售业还是制造业,不管线上线下都想这么玩。通过数字化转型+云,永远在线,这样就能持续带来客户,降低获客成本。
但是阿里卖的是云。怎么数字化转型,涉及各行各业太复杂,如果一定要找阿里,阿里一般会把这种单子分包给它的集成商。这个集成商就是大大小小的软件开发企业。据艾瑞咨询《中国软件开发行业研究报告》,2019 年,中国这样的软件开发企业超过了 4 万家。
软件开发企业分为两类。一类是跟机器打交道的,比如做游戏、做驱动、做电路设计、做嵌入式;另外一类是跟业务打交道的,主要就是企业信息化和数字化相关的软件,企业内部最典型的就是 ERP ,企业外部最典型的就是电商网站或者客户服务系统。
涉及数字化转型的,主要是后一类跟业务打交道的。
业务的特点就是计划赶不上变化,需求迭代超过了传统软件开发自身的迭代速度。时间就是金钱,企业对软件开发的敏捷性需求是无止境的。
最后一公里
然而,这些软件开发企业其实自己就存在“数字化转型”的问题。因为写代码这个事情,看起来很高深,充满着创造性,其实是个手艺活。
就像写文章是一千个人就有一千种写法,写代码也是一样的。
编程语言是用来定义算法和数据结构的,主要的对象是计算机。然后由编译程序编译成计算机可理解的二进制码。所以定义一种编程语言,核心就是编译器。
随着系统越来越复杂,大部分的系统都很难一个人完成,需要团队一起完成,而且需要持续的迭代。写代码这门手艺,就变成了一项软件工程,如何协调多人也就变成了软件管理。
软件工程的一代宗师迈克尔·杰克逊(Michael A. Jackson,不是那位歌坛巨星),《程序设计原理》的作者,曾哀叹软件行业普遍缺乏专业性,充满了业余人员,“手中有个锤子,看到什么都是钉子”,谁都可以开发性命攸关的软件。
人们经常会比较软件开发生产率和硬件制造生产率。后者在 20 年内至少翻了 1000 倍,从劳动密集型的装配车间,到自动化的流水线工业。而前者仍然是手工作坊。
著名的《人月神话》一书中,阐释了软件系统的复杂性。在规模上,软件实体可能比任何由人类创造的其他实体更复杂,至少在语句的级别上,没有任何部分是相同的。如果有相同的情况,我们就会把它合并成供调用的子函数。在这个方面,软件系统与电脑、建筑或者汽车都大不相同,后者往往存在大量重复的部分。
目前大部分的系统都是多人开发,先拆成不同的模块分散开发,然后再合并代码,这时候也会导致非常多的问题。这么多人写出来的东西,质量到底怎么样,可以打个大大的问号。
除了复杂性,软件开发中最根本的任务是构建在规格说明、需求设计之上的复杂概念结构,次要任务才是使用编程语言来表达这个抽象实体。这和数学和物理学完全不同,数学家和物理学家可以为复杂的现象建立简化的模型,并通过试验来验证。因为这些模型中忽略的复杂度,不是被研究对象的根本属性。软件则恰恰相反,复杂度是本质特性,不能被忽略。
由于软件的复杂度,造成了很多软件开发的经典问题。团队之间的沟通非常困难,导致了产品瑕疵、进度延迟、成本超支;列举可能的状态变得十分困难,影响了软件产品的可靠性;由于函数的复杂性,造成了程序难以阅读和使用;由于结构的复杂,造成很多安全机制状态上的不可见性。
系统越来越复杂,代码越来越看不懂,还有很多管理上的噩梦。
比如,怎么适应客户需求的瞬息万变,如何管理不同层级的开发人员,离职了怎么交接,诸此种种难题,成了企业数字化转型的“最后一公里”。
低代码和微服务
为了解决软件开发的经典难题,计算机科学家在不懈努力。主要的理论就是用有力的工具来辅助人工劳动,提高劳动生产率,改善工作质量,由此产生了 CASE(Computer-Aided Software Engineering),即计算机辅助软件工程。
最简单的工具,比如产生图表的自动图形工具。在 Excel 里就提供这样的工具,不用编程,拖拽鼠标就能完成复杂的图表。
低代码(low-code)成为新的流行语,本质上就是希望结合可视化开发技术和代码生成来减少手动编码,以此来加快应用程序交付。事实上,软件工程的整个历史都是关于提高抽象层次的。
低代码可以追溯到模型驱动工程。1991 年,在著名的 CAiSE 会议的第 1 版中,可以找到这样的论文:“给定最终模型,可以自生成完整的计算机化信息系统”。
像 Google 的 AppMaker ,微软的 PowerApps ,都是新一代的低代码软件开发平台。
2020 年 10 月 19 日,在加拿大的蒙特利尔,举办了第一届低代码研讨会。会议是 ACM / IEEE 举办的 MODELS 2020 的一部分。
除了低代码,还有一个浪潮就是微服务(Microservices)。因为大部分的软件都已经在云上,2005 年,Peter Rodgers 博士首先提出了 Micro-Web-Service 的概念,核心想法是让服务由类似 Unix 管道的访问方式使用,复杂的服务背后是使用简单的 URI 来开放接口。
2014 年,微服务的概念形成。微服务就是单一应用程序构成的小服务,服务依照业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通信。服务也具备最小的规模集中管理能力(例如 Docker),服务可以用不同的编程语言与数据库等组件实现。
虽然听起来简单,但是实现微服务体系结构非常困难。目前最流行的有两个框架,一个是 Netflix 开放了一个 Java 平台的开源框架,叫 Spring;另外一个是 Google 设计并捐赠给 Linux 基金会的 K8s 。
Spring 下,又有一个有名的 Spring Boot ,可以轻松创建独立的、生产级别的,基于 Spring 的应用程序,并且运行它们。它和著名的虚拟化软件 VMware 背后是同一家公司。
从人治到法治
2016 年,陈定玮手下有 150 位工程师,给银行、金融这样的大客户做软件开发。当时,微服务正在兴起,陈定玮却经历着各种阵痛。
陈定玮的经历颇为传奇。他之前是台湾特种部队海豹队队员,那时候的台湾青年都有服兵役的义务。他因此经历过魔鬼式的一年训练和两年的军队紧急任务的考验。
大家都叫他 Peter ,陈定玮是 1978 年生人,在他后来读书的时候,电脑其实蛮贵的。所以开发软件的时候,会想尽办法去节省资源,比如把内存分区分片,让程序变得更优化,追求软件的最佳实践,要尽善尽美。
2016 年,各类业务需求不断,人员不断新增,项目经常赶工。
因为赶工,业务需求实现大多没有编写设计方案文档,只能靠人工点检代码;跟业务的沟通成本高,开发人员理解需求不到位就直接写代码,导致常常要返工。团队成员技术能力参差不齐,代码质量也就无法保证。
项目管理成本高,人员离职,新人接手维护时间成本高。总的来说,Peter 要在 4 个象限来回折腾。
一是技术,要负责顶层设计(选型、架构、性能),技术迭代、运维;二是人力,要做管理、沟通、招聘,还要考虑知识经验的累积;三是基础建设,包括软件,例如开发工具的选择,硬件的投入;四是质量与安全,软件既需要稳定,也需要安全,防止信息泄露、黑客攻击。
到了 2016 年底,Peter 开始反思软件工程体系管理问题,在长达一年的时间里,白天也不能影响工作,之前在深夜 12 点到凌晨 5、6 点,牺牲掉睡觉时间,他开启了飞算全自动软件工程平台研发的征程。
办公室里摆了一张小床,累了就在这里睡觉。在项目初期有一年多的时间里,80% 的时间都回不了家,导致妻子几次提出要离婚。
陈定玮和团队一做就是 4 年。目标非常宏大而直接,就是实现“全自动软件工程平台”,实现“你输入流程图,我实现自动开发、自动测试、自我运维”,告别代码,用标准化的流程操作,用托拉拽的方式实现开发。
让软件工程行业的作业方式从“人治”变成“法治”,并针对行业痛点逐一击破,实现“降低项目成本、提升开发效率、保证代码质量、简化团队管理”。
研发过程中,Peter 也一直在寻找是否有合适的对标产品,这样可以不用重复造轮子。但是他发现大部分的低代码工具都是更偏向于前端开发,而不是后端微服务的领域。
这样造成了这些工具一般只能完成固定类型的工作场景,比如做客户关系管理软件(CMS),或者项目管理系统,或者问卷调查,简易收集数据。
还有一类通过可视化工具为业务系统建模,产生业务描述文件,通过解析器直接解析业务描述文件运行。但做不到封装成组件,只能算作低代码,并不能完全实现零代码。
最开始的时候,团队对这个项目是非常明显的抵触的态度,因为这个项目的研发的结果就是“代码消失”,而“代码消失”,则等于取代了他们一部分的工作。
最开始的时候 Peter 只能单打独斗,大家都不理解,只能不断地做思想工作,告诉他们不要沉浸下反复的敲代码当中,做个低价值的“码农”,而是要干掉自己,从敲代码的工作中解脱出来,去思考更高层面的事情。
其实有的时候,说敲代码也谈不上,因为网上可以搜到各种各样的开源代码。遇到一些小功能模块,拷贝黏贴变成了常态。
用开源代码是把双刃剑。它节省了开发成本,却使得开发人员得以偷懒,知其然不知其所以然。
这样造成几个影响,一是连 CTO 也搞不清究竟有多少代码是自己团队开发人员写的,有多少又是开源来的,造成了软件的知识产权问题;二是开源代码一开始可以运行,但是遇到大并发这种情况,系统是否扛得住;三是代码的安全问题,比如是否有SQL注入等问题。
对于需要高并发、稳定、安全的企业应用,比如银行信息安全要求高的客户,系统崩溃将会是大的灾难。而软件开发企业,一旦因为代码质量管控能力不够,失去这样的客户,对公司将是声誉的大灾难。
想要解决这些问题,只能从根本出发,彻底消灭掉代码,不仅要做到前端,而且还要做到后端的微服务开发,个中的难度,只有一次次的实践,保持初心,坚持不懈。
(图为格力电器董事长兼总裁董明珠)
飞算全自动软件工程平台
2017 年 - 2020 年,飞算全自动软件工程平台在不断的迭代,确定解决方案。
其中有几个重要的里程碑,0.8 版本上线时,完成一个创新产品,并落地实施。0.9 版本上线时,功能更加完善,易用性大幅提升。1.0 版本上线时,全面提升了软件工程能力与实践,开始打造可信的高质量产品。
飞算全自动软件工程平台的核心技术之一就是把流程图编译成微服务。开发的过程变得超级简单,就是把业务画成流程图就行了。
谁对流程图最熟?业务人员。软件开发的生产力工具,回归到了真正的需求者。对于大部分的要求前端和后端的软件需求,代码消失了。除了游戏、驱动程序这样和底层机器打交道的,只要是 Java 能做的应用系统,都可以通过飞算全自动软件工程平台来实现。因为飞算全自动软件工程平台本身是用 Java 来开发。
其实 Python 也可以,飞算全自动软件工程平台有个组件的概念,编程语言被隐藏在组件下面。有多少组件,就能做多少应用。
用流程图设计之后,飞算全自动软件工程平台自动生成项目部署包+执行服务包,可执行文件是基于 Spring Boot 的可执行 JAR 包,客户下载项目部署包+执行服务包,放到服务端部署即可,与原来的方式一模一样。
流程图设计直接就在浏览器里面完成,不能搭建开发环境,连上网,打开浏览器,就可以开发软件。
软件开发过程,从人治变成法治。系统越复杂,软件开发的成本降低越明显。而且再也没有代码泄露的风险了。
四年铸一剑。2020 年 11 月 17 日,飞算全自动软件工程平台在北京国家会议中心正式发布。Peter 玩了一个更酷的挑战,就是在发布会现场做一个现场挑战赛,邀请一个 IT 团队用传统作业方式,来 PK 飞算全自动软件工程平台,从实战中体现及验证产品价值。而且这个挑战赛还要继续悬赏“百万奖金”,一直摆下擂台。
这种极限挑战,也许已经根植在这位前海豹队队员的骨髓中。
(图为陈定玮在飞算全自动软件工程平台发布会上)
对话飞算陈定玮
AI 科技评论:目前飞算全自动软件工程平台,在后端的微服务开发上,已经实现了 100% 的零代码?
陈定玮:是的。用户也不用关注微服务,平台自动提供内建的微服务能力。稳定性比用户自己使用微服务框架要高。不需要用户深入研究微服务框架的学习,以及出现各类问题难以定位及解决的窘境。
AI 科技评论:如果有更复杂的系统,飞算全自动软件工程平台也能实现全自动开发吗?
陈定玮:对于更复杂的需求,比如复杂的 SQL 查询,这些都可以做成组件。组件的丰富程度,决定对需求的包容和扩展性。但系统开发者也不可能考虑到所有的需求,所以有了组件的“众创平台”的设计。像知识图谱这样的AI技术,就可以做成组件。未来的设想是,组件可以交易,人人为我,我为人人。
AI 科技评论:目前已经有客户在使用飞算全自动软件工程平台了吗?
陈定玮:大概有十几家客户已经在试用,而且客户反馈降本增效非常明显。飞算的质量体系根据阿里公约,相当于用自动化开发实现阿里P6、P7的开发能力。同时也实现了等保和国密的要求。
AI 科技评论:飞算全自动软件工程平台,软件工程包含比较广,比如软件开发、软件测试、软件运维,目前飞算全自动软件工程平台实现到了什么程度?
陈定玮:飞算全自动软件工程平台并没有改变软件工程的体系,还是需求、开发、测试、上线、运维。
目前主要实现的还是软件开发的后端环节。目前自动化测试和自动化运维功能基本都已经实现了 50% ,接下来,会加入前端的自动化开发。
以前是开发需要 3 个月,测试就需要 3 个月,测试这部分的时间可以大大缩短,因为开发问题自动化了,bug 率就大大降低了。自动化运维则大大节省了人力,目前我们后台有 6000 台虚机,只需要 3 个人就可以轮班管理。
AI 科技评论:飞算全自动软件工程平台的目标客户是谁?
陈定玮:其实谁都可以用,像智能投顾这类公司,甚至没有工程师,也能玩转软件开发。有了想法,先做出来,不断验证,这就是互联网的思维。
但最迫切的还是中小型软件公司,我所谓的中小型软件公司指的是注册资金小于 1 亿的企业。
对于这样的公司,比如要养一个 25 人的互联网技术开发团队,每年都花 400 万到 500 万的人力成本。而且需要不断的和客户改需求,甚至驻场开发。通过飞算全自动软件工程平台,企业的降本增效是惊人的。
AI 科技评论:那飞算全自动软件工程平台本身怎么赢利呢?
陈定玮:目前设想的主要是按照工具的 SAAS 收费模式。客户自己配置好云服务器可访问的 IP 或域名即可。我们没有提供云服务器这部份的服务。
原创文章,未经授权禁止转载。详情见 转载须知 。