对于任何一个学计算机的人来说,软件都不陌生,甚至于一个普通的朝九晚五的上班族,他的每日生活工作也都与软件有着密不可分的关系。然而,程序又是如何从一行行指尖留下的代码,机器存储的数据变成快捷高效的软件的呢?这中间我们所经历的一系列过程的总和,我们称之为软件工程。

      从本科开始学习计算机,我们就不可避免的接触了形形色色的软件,了解大量的软件开发工具,我那个时候甚至没有软件工程这个概念,只认为,我们所用的软件就是开发工具编译、执行、包装、发布的产物。后来,开设了软件工程这门课程,才开始系统地接受软件工程方面的教育,然而,教科书太过死板,给我们的印象中大多留下的是一个个生涩的概念和工程的流程图。直到接触了构建之法,我才真正理解了什么是软件工程,软件经过了怎样的流程来到用户的手中并为其服务的。

      构建之法这本书写得生动且贴进实际,对相关的定义有其独特的阐释,让我们更为了解软件工程,就比方说,书中对软件这一名词的定义:软件 = 程序 + 软件工程,这很直观地表示了软件的两个方面:一个是软件的载体,是程序;另一个是软件形成手段工具,软件工程。倘若你到传统的教科书中去寻找,或是临时为了考试而抱佛脚而百度,可能得到的答案是这样,软件:与硬件相对,是一系列按照特定顺序组织的计算机数据和指令的集合(见百度百科)。这个定义好高大上,从硬件本质的基础上来解释什么叫软件,然而会令刚入门的一头雾水。笔者对软件开发的不同阶段的介绍也很风趣,使用飞机行业的发展来类比软件产业的前进,既简明贴切,又让人茅塞顿开。笔者在书中也多次提及曾经的工作经历用以佐证:比如笔者用他二十多年的从业经历中所见过的软件项目的特点和目的来证明计算机科学与软件工程是密切相关的两个部分。

      作者对于软件工程的定义是:把系统的、有序的、可量化的方法应用到软件的开发、运营、和维护上的过程。介绍了软件工程所包含的领域:软件需求分析、软件设计、软件构建、软件测试、软件维护,并从工程的角度去理解软件工程,即设计和建造的过程中涉及大量的计算、计划、各类角色的协作,以及成千上百的人、动物、机械经年累月的劳作。也用实例来描述软件工程的目标:用户满意度高、可靠性强、软件流程质量高、可维护性强。先是从个人角度来讲,通过个人的锻炼成为合格的软件工程师,其中介绍了程序的单元测试、效能分析和个人软件开发的整个流程。之后从个人升级为结对编程,开始学会协作开发。最终在合作的过程中学会如何进行团队合作,开始参与一个团队来开发软件,进入真正的软件工程。书末介绍了很多有利于更好地推动软件工程的策略方法:比如敏捷流程、Scrum会议。

      通过这本书,我对软件工程的理解由书本定义进入到实际应用,也因而对此有了更进一步的了解。