再论软件工程没有银弹

2019-04-16 14:11:32 浏览数 (3)


为什么说软件工程没有银弹?

上篇文章论述了软件工程之所以不存在银弹是因为,软件工程本身存在复杂性,一致性,不可预见性,不可视化性。有些专家就这个问题持有相反的观点,大致可以分为以下几种

  • 时间倒退 在20世纪50年代,开发程序还是使用纸带打孔,我们在那个时候根本没有考虑到计算机硬件会发展的如此之快,更不会想到会有今天的智能编辑器和统一的开发环境,在今天看起来是次要困难的事情,可能在那个时候就是主要困难。也就是说现在看起来的主要困难在未来几十年后,很可能被解决。就像未来简史所说的,在21世纪人类战胜了饥荒,瘟疫和战争,但是这些事情,在上个世纪看来是完全不可能的事情,但是这个世纪我们做到了。著名的尤瓦尔赫拉利教授说这个世纪我们要重新找点事情做做,那就是我们这个世纪要解决的问题就是获得永生,永远快乐,直接成神。他并不是说,这些梦想一定可以实现,从某种意义上来说,我们可能朝着这个方向发展。

但是我们反过来看,饥荒瘟疫和战争都是属于某个领域特定的问题,但是软件工程却不是,它本身就存在复杂性。即使在20世纪50年代,那个时候的程序在军用上也有指令集非常复杂的程序,就那个时候来看,硬件限制的问题依然是次要问题。

  • 开发人员没有深入理解面向对象的思想 可重用和可交互构件的开发是解决软件工程的问题之一,是的,我非常赞同这个观点,但是可重用和可交互的软件也需要良好的设计和建模,以适应各种复杂的应用场景,这种情况下,我们只是通过复杂的建模和设计来掩盖软件工程本身的复杂性。

面向对象的开发-这颗铜质子弹可以吗?

面向对象的编程语言使我们使用更大的零部件去构建软件开发工作。但是还是需要构建…,所以说,要想避免掉软件开发的复杂性就是不开发软件(购买软件),或者最大程度的使用软件包,即最大程度上进行软件重用,比如说,alibaba提供的fastjson,dubbo rpc服务或者数据库服务等等,我们发现这些都是针对特定领域问题的解决,如果真实集成到我们的业务中去,还需要一定的困难,即这些服务必须有良好的设计,完善的文档。我们可以想象,抽象出来这些工具类的使用,说起来容易,做起来是一件非常困难的事情。

银弹的本质-形势没有发生根本的改变

虽然说,就目前来看,我们没有办法从根本上解决软件开发的复杂性,但是我们可以通过一些技术选型或者建模等方法的使用,降低软件开发的复杂性。

1 人点赞