软件开发是设计工程,而非生产工程。生产是由构建触发的,这种触发构建生产是自动的、按键式的、可伸缩性极强的,而且价格便宜到可以认为是免费的。
与所有实体生产过程不同,软件开发完全是一项发现、学习和设计的活动。我们的问题是探索,而不是生产工程技术。软件开发是一门设计工程的学科。
工程学是对经验主义的、科学方法的应用,目的是为实际问题找到高效的、经济的解决方案。工程学是应用科学,它是实用的。经验主义意味着学习,并为了解决问题而促进理解和改善解决方案。工程学创造的解决方案不是抽象的象牙塔,它们是实用的,适用于问题和环境。这些解决方案是高效的,它们是基于对经济形式的理解而产生的,并受经济形势的限制。
工程指的是制作软件所需的一切,过程、工具、文化都是整体的一部分。
手工艺和工程之间的差异突出了工程的两个方面,这两个方面在软件环境中非常重要,即精度和可伸缩性。通过应用工程技术,我们可以用比手工高得多的细节分辨率操纵事物。工程师可以创造机器,把东西造的更小更精确。
工程可以扩大规模,手工艺则不然。工程思维引导我们把问题分解开来。机器必须经过设计,使其重复制造出来的组件在一定的公差范围内彼此相同,实现标准化和可互换性。其设计必须是模块化的,以便组件能被组装起来。标准化和速度带来规模化。这与生产无关,而与设计有关。编程的艺术就是组织复杂性的艺术。
注重工程的团队将进行准确的测量,而不是等待糟糕的事物发生。测试软件的性能,在漏洞称为问题之前检测到它们。这不仅意味着生产中的灾难性故障在很大程度上是可以避免的,还意味着我们可以非常快地得到问题的指示,以及关于系统健康的有价值的反馈。
用工程方法解决问题,不会降低技能、创造力、创新的重要性,反而增强了对这些属性的要求。
工程是从行会、学徒、技工到大师工匠的下一步。继启蒙思想之后,随着科学理性主义的兴起,工程在精度和测量上提升了工艺。
工程是工艺的后代,它比工艺更具可伸缩性、更有效。工程思维在设计中的应用,是高科技文明和农业文明的真正区别。
工程是一门学科,使我们能处理及其复杂的问题,找到简明、高效的解决方案。将工程思维的原理用于软件开发时,在质量、生产力和解决方案的通用性方面都看到了可测量的显著提升。
工程决策是以理性的标准为依据,是实验性的、迭代的、经验主义的。
你根据你眼前的证据和你的理论做出决策,然后测试你的想法,看看他们是否可行。
当我们做对了,我们会看到团队的工作效率更高,压力更小,倦怠感更少,设计质量更高,我们创造的系统也更有弹性。
我们建立的系统更能取悦用户,我们发现生产环境中的八哥大大减少,随着学习的逐渐推进,对系统任何一个方面的改变都变得容易了,以这种方式实践的组织获得了更大的商业成功。这正是工程的标志。
工程增强了我们的创造力来制造有用的东西,并让我们带着信心和质量前进。它让我们能够探索各种想法,并最终增强我们的创造能力。因此我们能构建越来越大、越来越复杂的系统。
软件工程会帮助我们更快地构件更好的软件,而不是妨碍我们。