阅读完了《构建之法》第一章后,觉得我们平时使用的软件并不是自己想象中的那样简单,用的时候是觉得很方便,但从来没有考虑过一个软件的背后需要一个团队多少的付出才能换来一个获得用户频频好评的软件。突然之间很佩服所有软件的开发者,因为在读了概述之后,我就能体会到他们背后付出的努力、时间和精力。

      软件=程序+软件工程。要有一个软件,首先需要一个程序,而算法、数据结构是程序的基本功。其次软件工程的核心部分是:构建管理、源代码管理、软件设计、软件测试、项目管理等相关内容,软件工程直接决定了软件的质量。在现在的学习中,我觉得我还停留在建立基本功的部分,掌握住足够多的算法和数据结构,才能写出程序,然后才能从工程管理的角度去构建这个软件。

      书上用航空业的发展对比着来看软件的发展过程,形象地给我们描述了软件是如何一步一步走到今天这个地步的。在最初的时代,人们尝试用新的语言来写“hello world”,成功了以后便吸引了一些人的兴趣,从而由开发出了用JavaScript、asp.net、ruby等写网站。当程序能够跑起来的时候,便开始钻研新技术,应用新技术在软件行业创新,使得软件日益壮大,到了如今的银行软件系统,互联网搜索行业,电子商务系统、Windows操作系统。软件的发布会影响一个公司、一个行业,这些以前无法想象的系统,如今都变成了现实,也造就了一批程序员。由于软件本身具有几大特殊性,所以在软件开发过程中会碰到一些难题。例如:一、软件的复杂性:一些大型软件有超过百万行的源代码,上万个不同的文件,软件的各个模块之间有各种显性或隐性的依赖关系,会随着系统的成长和模块的增多以几何级数的速度增长。二、不可见性:软件工程师可以直接看见源代码,但是源代码不是软件本身,软件已机器码的形式高速运行,还可能在几个CPU核上同时运行。所以工程师是看不到自己的源代码是如何被具体执行的,如果出错了以后,查错和纠错就会相当的困难。三、易变性:软件很容易修改,软件工程师经常需要修改软件来实现新的功能或适应新的环境,所以如何正确的修改软件也是一大难题。

      一个好的软件必定会有一个好的软件工程。软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。它包括软件需求分析、软件设计、软件测试和软件维护。目的是为了提高软件开发、运营、维护的效率,并提高软件的质量、用户满意度、可靠性和软件的可维护性。

      以前一直觉得做一个软件,只要写程序就好了,完全没有考虑过它是一个过程,需要一个完整的软件开发流程,首先需要做软件需求分析,弄清楚用户的需求,确定这个软件“做什么”,其次才开始设计软件,确定软件如何来实现用户的需求,在完成一个模块或一个单元后就要进行测试,测试是很关键的一步,只有保证中间过程没有出错,才能在最后获得一个成功的软件。在可以基本开发出一个软件的基础上想办法提高软件的效率、可维护性和用户满意度。而这些,是我在这本书里需要学习,在实践中需要实践的内容。