《构建之法》——软工学习进度(1)

我构建,故我在

  花了两小时的时间,认真阅读了《构建之法》的第一章内容。回想起来,印象最深刻的还是那句话——我构建,故我在。在这本书里,这句话是作为一个工程师的宗旨而说的。那么什么是工程?人们说:创造性地运用科学原理,设计和实现建筑、机器、装置或生产过程;或者是在实践中使用一个或多个上述实体;或者是实现这些实体的过程,即是工程。作者举了罗马水道,中国长城的例子,来拓展说明工程的定义。这些大工程一定牵涉到了大量的计划、计算、各类角色的协定,以及成百上千的人、动物、机械经年累月的劳作,所有这些因素的集合才出现后来人们所说的“工程”,如“土木工程”、“化学工程”。再去思考我所学的这门课程——软件工程,其含义也就不言而喻了。软件工程,就是将人们的需求从一个简单的程序,拓展到一个满足各种功能的应用软件,再拓展到一个能保证服务质量的软件服务。

  老实说,刚接触这门课时,我认为软工无非就是一群人分工合作,每个人敲一个软件的部分代码,再拼凑在一起,就组成了面向客户的产品。现在想来,当时的思维也并非全错,软工的确需要一群人分工合作,但是它所需要的人群基数远远大于我当时所认为的那样。既然是一项工程,那么就并不只是一群敲代码的人在实现这一目的,他们所完成的是最基本的程序模块,也就是源程序。源程序完成后,还要对数据进行操作,包括静态数据和动态数据。在这之后,工程师们还要将它们构建为机器能懂的可执行代码。当然,构建不仅仅是cc和link命令,一个复杂的软件不但要有合理的软件架构,还得有软件设计与实现以及各种文件和数据来描述各个程序之间的依赖关系、编译参数和链接参数等等。这一系列的过程都是软件构建必不可少的部分。由此可见,光是敲代码的那群人远远满足不了构建软件所需要的人群基数,更不用说每天的修改代码、配置管理、质量保障等等。  

  再说回最基本的,究竟什么是软件工程?第一章的第二节,作者用这么一句话来描述:软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。简单来说,软件工程是是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。所以,这门课的重心并不在如何敲代码、如何提高程序的计算效率,或者说,这门课的重心并不仅仅只是基本的源程序阶段,而是如何创造“足够好”的软件。要想实现这一目标,首先得克服软件开发过程中遇到的难题。学者们总结了五点难题:(1)复杂性。大型软件有超过百万行的代码,上万个不同的文件。并且这些数量在不断的增长,软件工程师们往往力不能及。(2)不可见性。软件工程师能直接看见源代码,但是源代码并不代表整个软件本身,工程师是“看不到”自己的代码如何在用户的机器上被执行的。也就是说,即使软件在客户的机器上发生了错误,工程师也仅仅只是看到程序在出错的一瞬间留下的一些痕迹,却几乎无法完整重现到底程序出现了什么问题。(3)易变性。随着人们的需求量增大,软件的功能也必须在时刻发生变化,所以正确的修改软件就变成了一件很困难的事情。(4)服从性。软件不能独立存在,必须运行在硬件上面,它要服从系统其他组成部分的要求,还要服从客户的要求,行业系统的要求。(5)非连续性。软件其实很“脆弱”,并不是人们常以为的增加输入,就能看到相应的增加输出。有时在输入上发生很小的变化,也会引起输出上极大的改变。这些软件的本质特性,让“做一个好软件”变得很难,同时也让软件工程有它独特的挑战和魅力。

  总结这一章的内容,软件工程是一门涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等各个方面的学科。要想学好软件工程这一门课,所需的并不只是数据结构、算法等基本知识,更重要的是深刻理解如何去构建,它是一项工程,而不是单纯的编程。

 

  

 

 

posted @ 2017-03-20 20:51  还有那半人心丶  阅读(132)  评论(0编辑  收藏  举报