人月神话03
今天这篇阅读笔记主要记录一下《人月神话》中关于“银弹”问题的讨论。
首先让我们来明确一下什么是“银弹”?银弹在西方是用来猎杀人狼的最有效的工具,那么将银弹引申一下,将软件开发过程中遇到的最困难的问题,最难以解决的根本问题比作人狼,那么银弹就是解决这些问题的最有效的方法。
所有软件活动包括根本任务——打造由抽象软件实体构成的复杂概念结构,次要任务——使用编程语言表达这些抽象实体, 在空间和时间限制内将它们映射成机器语言。其中次要问题相对来说是比较容易解决的问题,但是在总问题中,次要问题随着不断被优化解决,它所占的比例会越来越小,而根本问题所占的比重会越来越大,所以根本问题的矛盾越来越突出,越来越迫切的需要被解决,人们也提出了很多解决根本问题的方法,但是至今为止,仍没有很好的方法能够解决这些问题。但是相信随着技术的不断进步,知识的不断积累,根本问题终将被解决。
我们相信,无论是多么复杂和巨大的问题,我们都能够将其分解成为比较小的和简单的问题,通过我们对这些小问题的研究解决,大问题终将被我们所克服。
我们首先回忆一下以往解决次要问题的一些突破。软件领域中取得的最富有成效的三次进步,每一次都是解决了软件构建上的巨大困难。这三次进步分别是:高级语言、分时、统一编程环境。高级语言解决了一些次要的软件复杂度,是程序开发方法越来越接近用户的复杂度。分时保证了及时性,缩短了系统的响应时间,从而使我们能维持对复杂度的一个总体的把握。统一编程环境,它们主要通过提供集成库、统一文件格式、管道和过滤器,解决了共同使用程序的次要困难。
通过次要问题的解决,我们对解决根本问题的信心大大增强,同时,我们已能够看到银弹出现的希望。
(1)高级语言的发展在语言概念上取得了突破性的进展。鼓励现代设计和模块化概念运用的重要特性
(2)面向对象编程。向对象编程是当今若干新潮技术中最富有希望的
(3)专家系统。人工智能领域最先进的、 被最大范围使用的部分, 是开发专家系统的技术。专家系统是包含归纳推论引擎和规则基础的程序,对于解决相同的问题,这种系统明显比传统的程序算法要先进很多。
(4)环境和工具。开发环境上,现在已经实现的最大成果可能是集成数据库的使用,用来跟踪大量的开发细节,供每个程序员精确地查阅信息,以及在整个团队协作开发中保持最新的状态。显然,这样的工作是非常有价值的,它能带来软件生产率和可靠性上的一些提高。 但是,由于它自身的特性,目前它的回报很有限。
其实还有一些针对概念上根本问题的颇具前途的方法。我们必须考虑那些解决软件上必要困难的活动——即,准确地表达复杂概念结构。我们可以通过以下方式来进行进一步的研究:购买和自行开发、需求精炼和快速原型、增量开发-增长,而非搭建系统、卓越的设计人员。