我是如何做软件工程化的

开发 前端
很多人不理解什么是“软件工程化”。导致的结果就是,很少人知道我干的事的价值,也不知道该如何与我配合。所以,有必要正式给大家介绍一下我做的“软件工程化”指的是什么。

[[409514]]

最近有些忙,就是给团队里的同事写的代码进行工程化。 只是这些活对我而言有些过于体力活,我干起来提不起兴致。

这个过程中也发现很多人不理解什么是“软件工程化”。导致的结果就是,很少人知道我干的事的价值,也不知道该如何与我配合。所以,有必要正式给大家介绍一下我做的“软件工程化”指的是什么。

要介绍软件工程化,我们首先要从程序员写出来的代码开始说起。

首先,程序员写出来的代码,并不能直接运行。不同的编程语言,要运行起来,所经过的步骤不同,我们以Java来例。Java代码运行起来需要以下几个步骤:

1. 下载依赖 2. 编译 3. 打包 4. 安装运行环境,即JDK 5. 启动程序

1,2,3步骤,我们通常称为构建过程。Long long a ago,构建过程全在程序员自己的开发机上完成。后来,想偷懒的程序员发明了Ant这款工具,将构建过程自动化了。但是,Ant这款工具本质上只定义了一个基于任务的DSL(领域特定语言),不利于标准化。这时,Maven出现了。它将1,2,3步骤进行标准化。即,构建过程标准化。说多一句,在这方面,Gradle相对Maven其实是开了倒车。

构建过程,除了构建工具本身的标准化,我还会将构建环境标准化。这个过程就是根据不同的构建环境创建相应的标准化的Docker镜像。将来,同一个项目的每一次构建都使用相同的构建环境。

构建过程的标准化只是软件工程化的一个阶段。下一个阶段是构建过程自动化,即,将构建过程放到一个标准化的构建环境中自动化执行。换句话说,程序员依然在本地可以执行1,2,3步骤,只不过,团队不再使用程序员本地构建出来的结果,而是使用标准化的构建环境中构建出来的。

在我做构建自动化的工作的时候,常有程序员不屑地说:我在本地电脑就一条命令,就可以把包上传到制品仓库了。

这样的话,我听了很多了。我想说:是的,你的确可以一条命令解决问题。但是你只是解决了你个人的问题。你并不没有解决软件团队的问题。软件工程化要解决的是一个团队协作的问题,而是个人的问题。你的不屑就像当年在福特汽车厂里手工造车的工人,看不上流水线生产汽车。

在对构建过程工程化后,我们就开始对4,5步骤进行工程化了。4,5步骤叫做部署过程。部署过程的工程与构建过程的工程化类似,也是先标准化,然后自动化。

在没有Docker之前,运行环境的准备和启动程序的标准化是非常困难的,每个公司不一样,同一个公司下的不同团队也大概率不一样。

有Docker之后,一切都变了。一下子任何语言的程序的部署过程的标准化都变得非常容易了。

在将原来的应用改成使用Docker运行的过程,是运行环境标准化的过程,也被我们称之为容器化的过程。

它所带来的好处是部署过程不用关心你的运行环境。也就是部署过程与软件运行环境进行了解耦。

部署过程如何做到工程化,我之前的文章已经有说明,本文就不再细说。

这时,你发现,上面我们对1,2,3,4,5步骤做的,无非就是 把软件生产工程中,体力的部分进行标准化,然后自动化。这就是软件工程化 。关键是,你能否识别什么是体力部分,什么是脑力部分。

另,脑力部分,还是需要发挥每个人创造力。

最后,想想Kubernetes,其实它是软件工程化的集大成者。它标准且自动化了软件的构建、部署、可观察性、软件的运行方式。它真正做到了软件的工程化。

个人经验总结

  • 标准化与自动化的顺序并不是固定的。有时,你需要先自动化,再标准化。因为不自动化,没有人力做标准化。
  • 标准化涉及很多技术细节,在你还不了解何种标准更优时,千万要先松后紧,不要一开始就把标准就定得全面且死板。标准是演化出来的。
  • 部署过程的标准化,大多数人只记得对应用的部署,却忘记了对配置也进行同样的标准化部署。
  • 工程化需要一个人知识面非常的广,要懂多种语言、多种构建工具、多种部署工具、多种监控方式。

 

责任编辑:张燕妮 来源: 持续交付实践指南
相关推荐

2009-07-24 09:43:09

软件工程软件开发

2019-09-15 14:07:49

2021-05-13 08:00:00

软件测试程序IT

2012-03-12 16:42:54

测试

2022-08-20 18:28:49

汽车软件

2024-04-22 08:26:37

协同编辑FigmaOT 算法

2024-01-15 07:42:37

Figma协同编辑算法

2023-09-15 10:33:45

前端工程化commit

2019-07-24 08:55:09

APP重设计界面

2011-08-01 09:08:49

程序员

2013-11-29 10:15:48

国产虚拟化

2021-11-22 06:17:26

npm工程化工具

2023-08-07 08:01:15

2011-09-07 08:59:23

2022-01-16 07:12:30

软件工程师吵架开发

2011-05-16 10:05:33

软件工程师Java工程师

2009-02-11 13:15:54

软件工程师女工程师google

2021-12-27 08:27:18

RepoGo 代码

2022-12-01 07:46:01

工程化工具

2021-01-15 05:19:08

wireshark软件网络
点赞
收藏

51CTO技术栈公众号