软件开发是工程吗?[1]

有人说编程序是一门艺术,也有人说做软件项目是一个工程,那么软件到底是属于艺术还是工程呢?其实更专业点的说法应该是问,软件产业到底属于技术密集型还是劳动密集型?我认为,有的软件项目具有劳动密集型的特点,但更多的项目是属于技术密集型。

  先来看工程,工程的第一个特点是可预见性。也就是说,在工程还没有开始以前,已经在人们心目中有了一个具体的形象和标准,工程的目标则是去实现这个已经被设计好的东西。我们知道建筑施是工队典型的劳动密集型产业,施工队按照设计好的图纸施工(用户是房产商),按照制订好的标准验收,这个标准可以定得非常细致,每堵墙,每道梁,每扇窗都可以细微到毫米。而技术密集型的特点则是不可预见性,比如达芬奇在画蒙娜丽莎以前,绝对没有人告诉他眼睛应该画多大,头发应该画多长。

  软件粗看起来很类似做房子,前期用户提需求,建立软件规格标准,然后可以根据软件规格来做。但很少有软件项目最后做出来的样子是完全和当初写的规格说明书上一模一样的。大多数用户在开发过程中或使用过程中会新提出很多更改的要求,甚至把软件改得面目全非。这是软件工程学很不愿意面对的一种事实,因为工程学的理论基础是目标的可清晰预见性,而在工程中发生不可预见的变化成本非常巨大。因此传统的软件工程倡导前期做大量细致的需求和分析工作,企图减少中途发生变化的可能。

  而敏捷开发则是承认软件的不可预见性,倡导努力提高应对变化的能力来降低甚至消除变化所带来的成本。不过这是另外一个话题,以后可以专门介绍。

  工程的第二个特点是可控性高。几十年前做一栋房子的成本和现在比起来,除掉货币的升贬值并没有太大的变化。而较好施工队和较差的施工队比起来,成产率也不会相差很多。因此做栋房子的成本一般可以估算得很精确。但是软件不一样,现在一个人化一个月时间就可以用ASP.NET写一个电子商务网站,如果用十几年前的技术,比如汇编语言,投入几百个人都写不出来。所以软件的成本估算很难精确估算,如果几天前还计划要花好几个人几个月的时间来实现个比较复杂的功能,可能几天后就突然在某个网站上下载到了已经完美实现这个功能的源代码。而因为一个关键性的技术无法实现,导致整个项目全部被否决的情况也非常常见。

  工程的第三个特点是强调过程管理,忽略个人因素。施工队上的某个工人辞职了对整个工程的进展几乎没有什么影响,没有哪个人是关键人物,随便换谁都无所谓,哪怕全部人都走掉,完全重新换一批也没什么影响。但是软件不一样,如果核心的开发人员离职,对项目有非常严重的影响。如果整个开发团队走掉,对项目来说绝对是致命的。

  软件工程学一直把软件开发划分为两个过程,设计过程和实施过程。这是从传统工程行业照搬过来的,撰写软件规格文档看作是设计过程,由专门的系统分析人员来完成,类似建筑设计师,只需要写设计文档。而把编码看做是实施过程,由专门编码人员来完成,类似工程施工队。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639375/viewspace-151186/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12639375/viewspace-151186/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值