软件研发体系变革
目录
如你所见,在过去的几年里,发生了大量的变化。好比如说:
- 编程门槛的降低。大量的低编程能力水平可以进入这个行业(如上一篇文章)
- 基础设施的完善。只需要执行 git push,便能完成 push to production(尽管四年前我们在项目上实践过)
- 云主机开发。远程开发机器,代码不在本地机器上。
- 多人实时开发编辑技术。诸如于 Visual Studio Live Share,可以多人实时协作编程。
- 5G。更快速的网络连接,更好的通信质量。
- ……
受益于对基础设施的提炼,如中台的建设、内部开源、开放 API 等的实践,软件的流水线生产迈向了更成熟的时代。从市场的情况来看,现在的建设趋势主要是在:
- 云开发。由云基础设施集成 + 云 IDE + 云端开发时,所构成的云端开发环境。
- 低代码开发。低代码是一种创建应用的方法,它能让开发人员使用最少的编码知识,来快速开发应用程序。
从底层来看,云开发和低代码的思路是相似的,通过集成现有的基础设施,构建更好的开发者体验。
强调一下,这里的无代码研发指:只需要编写需求,将会自动完成功能的开发、构建和上线。不需要任何的编码,也不需要任何的拖拉拽。它强依赖于对现有的领域知识的学习,以及基础设施的高度自动化。从实现上,无代码研发还依赖于我们有一套自动化的概念完整性分析工具,由于笔者精力有限,还没研究到这里。过个几年,我再重新分析一下。
低代码
无代码/低代码是一种创建应用的方法,它可以让开发人员使用最少的编码知识,来快速开发应用程序。它可以在图形界面中,使用可视化建模的方式,来组装和配置应用程序。开发人员可以直接跳过所有的基础架构,只关注于使用代码来实现业务逻辑。
宽泛的低代码定义里,包含了不同层级的低代码,如代码生成也是一种形式的低代码。
这里我们定义的低代码是狭义上的低代码,在实现模式之下,它将系统划分了三部分:UI 编程器、流编程器、领域特定语言(DSL)
UI 编程器。在线的拖拽式 UI 设计和页面构建工具:
- UI 编程器。用于拖拽式设计 UI。
- 空白脚手架。一个带有完整的应用生命周期的项目,但是它是一个空白的项目——用于我们在构建 UI 的过程中,随时随地的添加组件和代码。
- 设计系统。我们需要一个完整的组件库,大量的页面模板,以及一定数量的模板应用,减少相应的开发工具量。
- 代码片段集。它将设计系统中的组件库进一步实例化成代码段,在完成编辑后通过 CLI 来动态编辑代码。
流编程器。以流编程的方式来编写业务代码
- 流编程器。用于拖拽式、输入编写业务代码。
- 后端服务。如果不能提供现成的后端服务,则需要拥有一个标准的 API 规范,以及相应的 mock server。
- 模式库。包含相应的业务处理代码,如通用的登录、数据获取、UI 交互等。
DSL。中间表示,用于隔离框架与设计。
- 模型描述。描述领域模型
- 行为描述。描述领域行为
过程如下图所示:
低代码需要注意的一点是,平台或者框架本身处理了复杂性,所以平台会变得极为复杂。“复杂度同力一样不会消失,也不会凭空产生,它总是从一个物体转移到另一个物体或一种形式转为另一种形式。”
云上开发
对于大型企业来说,他们采取的另一个策略是:云上开发。即在云上提供云原生一体化开发环境、工具和平台。
云开发,是一种将开发过程完全迁移至云端的云原生开发模式,开发者可以在浏览器端、客户端完成一切的软件开发活动,如代码修改、调度、本地构建、代码提交、部署等等活动。其展示形式往往是通过在线 IDE 的形式完成。
它主要由三个要素所构建:
- 云基础设施集成。提供的云原生一体化开发环境和工具平台,为开发者提供高可用、自动弹性扩缩的后端云服务,包含计算、存储、托管等 Serverless 化能力,可用于云端一体化开发多种端应用,帮助开发者统一构建和管理后端服务和云资源。
- 云 IDE。云 IDE 是云开发环境服务,开发者通过浏览器访问即可极速获取云端开发环境,支持编码、调试、运行、预览,还可访问代码仓库和执行命令行,同时支持丰富的插件扩展。
- 云端开发时。云端开发时。 其愿景是在云时代,开发者使用远程云端原生开发环境来完成开发,而不是在本地计算机上配置开发、调试和测试环境。 用户可以使用诸如于 Nocalhost 执行以下操作: 将复杂的微服务应用程序部署到云环境。
这个也是各大云服务厂商在发力的一个方向。
无部署(Deployless)
无部署(Deployless)起源于 Darklang 语言的设计理念,它可以将输入的任何内容都会立即部署并立即用于生产。从 Darklang 的设计思想来看,它依赖于:
- 云端运行解释器。在函数或 HTTP/事件处理程序中编写新代码时,将抽象语法树的差异发送到服务器,然后我们将该代码请求进来。
- 智能编辑器。编写代码时,编辑器直接操作的是 AST,并确保不会不犯语法上的错误。
- 高度抽象的基础设施。
简单再介绍一下 darklang:
Darklang 语言是一种编程语言,承诺 “deployless”部署,从代码到生产的时间不超过 50 毫秒。Darklang 的目标是代替以往在本地写代码,编译、运行,git 提交,CI 测试,分支管理,更新部署,K8S 容器调度,nginx 负载均衡,AB 测试等流程。
取而代之的是: 直接在 IDE 里修改线上代码,修改完就肯定没有语法错误,顺带编译部署,还有还做了版本管理、AB 测试等。此处线上 dark 也自动都完成其他生成环境需要考虑的事情,诸如于负载均衡,容灾,扩缩容,服务发现等。
研发即代码:云研发
云研发则是对于现有软件研发体系的一次进化:
云研发,是一种生于云上的闭环 + 代码化的软件开发方式。它可以让业务人员、开发人员、运营人员等在同一个云端共同协作、透明化地完成整个软件的生命周期(需求、设计、编码、构建、部署、运营),而非相互隔离,又或者是借助于多个软件才能完成工作。
它由依赖于:
- 微架构:胶水。微架构,即以模块化的组合方式协同构建大型应用(前端、后端、APP等)的架构方式。每个微应用都可以独立开发、独立部署、独立运行,对应的替换的方式有模块化、子模块的方式,微服务、APP 插件化(独立构建、独立运行)、微前端等。
- 代码化:胶水标准化。代码化,即通过创建领域特定语言来描述某一特定的事物或流程,以用于描述它在数字世界的孪生。
- 协作设计:文化。从诸多组织实施 DevOps 的过程,我们就可以看到:要打破部门墙并不是一件容易的事。这事实上,这才是云研发的成功关键,要让打通生命周期,意味着要打通一个个的部门墙。让各方达到目的一致,怕是得由各种绩效来保证。
它是对于现有的低代码体系和云开发体系的一个优化。