软件工程是很早就提出来的一个概念,六七十年代左右吧,和程序设计大概同时起步,经过五六十年的发展,成了一个比较独立的学科:软件工程,不过还是没有什么叫得响的成果,比起信息论来差的远了,哪些基本原理和规则都是些似是而非,含含糊糊或者显而易见的东西,而且现在定义也没统一,具体可以参考:http://baike.baidu.com/view/1659.htm
继前段时间流行的CMMI之后,现在又有什么极限编程(XP)和敏捷迭代开发(Agile),Scrum模式之类的兴起,不过其实结果不难预料:红火一阵子必然归于沉寂。就像以前流行目的语言(现在都是过程,对象语言):程序员只需要告诉它做什么,而不需要告诉它怎么做。可是现实无情地打击我们,现在人工智能连个6,7岁的孩子都不如,这种语言必然因为太超越时代而归于失败,类似中世纪发明的飞行器一样!也许以后并行编程发展到多核甚至群核的时候,人工智能能发展到16,7岁少年的水平,目的语言才有市场吧。
软件工程之所以没什么大的起色我认为根本原因是出发点是错误的:最简单的软件都是一件设计工作,不能用传统的工程理论来分析解释,更不要说什么总结规律了。否则为什么一个简单的“hello world”程序要不同语言,不同平台都要讲讲?
设计的根本因素是人,不同的人想法不可能完全相同,所以软件实现必须考虑差异化,沟通交流成本等等,这些在传统管理和工业控制中不是很重要的。还有就是人的软件开发水平很难量化,不像熟练工和学徒,而且团队的话更是难以量化,不是所有团队成员都优秀就一定会比团队成员水平参差不齐的效率高,质量好,这涉及到系统论,不过在软件开发里边这方面的研究不是很成熟,还没有总结出什么规律。
既然“软件工程”说法不合适,那叫什么呢?其实名字是现成儿的:“软件科学”! 也许有人会说, 你小子也太高看软件了吧,没错,就像当初大家都把计算机归到电子或者通信类一样的道理,现在人家还不是一门新的学科,“计算机科学和计算机科学家“的称号没有几个人会反对吧,那在软件一天比一天重要的情况下,为什么就不能有”软件科学“,软件牛人为什么不能叫做”软件科学家“呢?
还有人会问:那么你认为软件科学到底是自然科学还是人文,或者社会科学?我也不是很好说,因为它有自然属性,毕竟工具是计算机,但是主体是人,暂且算作交叉学科吧,也许以后独立山头也说不定呢!