首先我说下现代软件工程与软件工程的区别
一般的,软件工程是上世纪50年代提出的,旨在解决日益增长的软件开发规模。从直接的二进制编码到汇编器的使用,再到C语言这种人类可以阅读的脚本语言的出现(我认为所有机器不能直接运行的代码都是脚本语言)就是最早的软件工程。编译型语言的出现使得开发大型软件,代码量超过100W的大规模软件成为现实。通过编译器与连接器的使用,诞生了Unix,Linux与Windows这些操作系统,以及Oracle等这些数据库管理软件。这些软件的内部逻辑非常复杂,如果使用汇编,工作量与维护量可想而知;因此,我把这次飞跃叫做软件工程。
那么什么叫做现代软件工程呢?
当软件工程的大门一打开,就像长期处于黑暗的人们见到光明一般,欣喜若狂;可以说是大大的推进了IT工业的发展,使得人们实实在在的享受到了IT带来的变革与便利。但是,任何一种技术,一种方法论,一旦成功就有被滥用或者过度使用的情况。这并不难发现,当人们发现脚本语言能够提高生产率的时候,很多人已经在考虑将其发挥到极致,让人们通过快捷的,短期的时间编写脚本;让软件工程的速度成倍成倍的加速,使软件市场繁荣并泛滥。在这段时间,涌现了很多更高层次的脚本语言,如:C++,Java,C#,Python,Ruby,PHP等等,等等。这些语言都基于一种新的哲学观点——面向对象。
对面向对象就是现代的软件工程方法!
你可以把面向对象看做是C++,Java等语言的精神导师,也可以吧面向对象想象成现代软件工程基石。通过对C语言(或者汇编)的高层次的二次封装,即对老一代的软件工程方法论的高层次封装,引入:继承(分类学原理),封装(结构建筑学原理)与多态(实际是一种奇技淫巧),使得面向对象大幅减少了更大规模软件开发的难度;使得Google,Baidu,Taobao,SAP,等等面向复杂业务或者复杂事物的超大规模软件开发与维护成为可能;这些系统或者软件的规模可以10倍甚至100倍与Unix,Linux等基础软件。把复杂的现实业务流程带入了计算机工业中,使得21世纪成为了互联网与IT的世纪。
为什么要说现代软件工程的宿命呢?宿命是什么呢?我认为现代软件工程的宿命可以用两个字来概括——复杂!
现代软件工程下的任何软件,他们的开发工程是极端复杂的,包括他们开发这些工程所使用的工具本生也是极端复杂的。这就像海森堡测不准原理或者分布式软件领域著名的CAP原理一样,或者更容易理解的俗话——鱼与熊掌不能得兼,便利与高效快速的开发必然导致程序运行的效率低下与复杂。举个例子来说,在小型的原始的系统中,人们采用的是静态链接编译一个程序;这时程序运行高效而容易理解;当程序越做越大,人们发现,静态链接的方式使得程序越来越不好修改,越来越与现实脱节,于是发明了动态链接,运行时加载等高科技方式,使得程序不断模块化,高可维护性;但是编译的汇编代码却变得臃肿,难以理解;动态的加载与链接也会消耗大量的性能优势。
常常,可以看到人们赞美Linux或者Unix设计的优雅,而诟病某某大型系统的臃肿与低下。其实,不是Unix的设计者高明,而是现实世界太过复杂,远远超过一个操作系统的复杂度导致,或者说这本生就是现代软件工程的一种宿命。
1259

被折叠的 条评论
为什么被折叠?



