File tree Expand file tree Collapse file tree 1 file changed +33
-0
lines changed Expand file tree Collapse file tree 1 file changed +33
-0
lines changed Original file line number Diff line number Diff line change 140
140
4 . 现实中,流程图被鼓吹的程度远大于它们的实际作用。我从来没有看到过一个有经验 的编程人员,在开始编写程序之前,会例行公事地绘制详尽的流程图。在一些要求流程图的 组织中,流程图总是事后才补上。一些公司则很自豪地使用工具软件,从代码中生成这个“不 可缺少的设计工具”。我认为这种普遍经验并不是令人尴尬和惋惜的对良好实践的偏离(似 乎大家只能对它露出窘迫的微笑),相反,它是对技术的良好评判,向我们传授了一些流程 图用途方面的知识。
141
141
142
142
# 第16章 没有银弹
143
+
144
+ ** 没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简洁性获得数量 级上的进步。**
145
+
146
+ 1 . 如果这是事实,那么软件开发总是非常困难的。天生就没有银弹。让我们来考虑现代软件系统中这些无法规避的内在特性:
147
+ 1 . 复杂度、一致性、可变性和 不可见性。复杂度。规模上,软件实体可能比任何由人类创造的其他实体要复杂,因为没有任何 两个软件部分是相同的(至少是在语句的级别)。
148
+ 2 . 某些情况下,因为是开发最新的软件,所以它必须遵循各种接口。另一些情况下,软 件的开发目标就是兼容性。在上述的所有情况中,很多复杂性来自保持与其他接口的一致, 对软件的任何再设计,都无法简化这些复杂特性
149
+ 3 . 可变性。软件实体经常会遭受到持续的变更压力。
150
+ 4 . 不可见性。软件是不可见的和无法可视化的。例如,几何抽象是强大的工具。
151
+ 2 . 以往解决次要困难的一些突破
152
+ 1 . 高级语言。
153
+ 2 . 分时。
154
+ 3 . 统一编程环境。
155
+
143
156
## 银弹的希望
157
+
158
+ 1 . 面向对象编程。---软件的内在问题是设计的复 杂度,上述方法并没有对它有任何的促进。除非我们现在的编程语言中,不必要的低层次类 型说明占据了软件产品设计 90%,面向对象编程才能带来数量级上的提高。对面向对象编 程这颗“银弹”,我深表怀疑。
159
+ 2 . 人工智能。---专家系统最强有力的贡献是给缺乏经验的开发人员提供服务,用最优秀开发者的经验 和知识积累为他们提供了指导。这是非常大的贡献。最优秀和一般的软件工程实践之间的差 距是非常大的,可能比其他工程领域中的差距都要大,一种传播优秀实践的工具特别重要。
160
+ 3 . “自动”编程。
161
+ 4 . 图形化编程。
162
+ 5 . 程序验证。---现代编程的许多工作是测试和修复 bug。是否有可能出现银弹,能够在系统 设计级别、源代码级别消除 bug 呢?是否可以在大量工作被投入到实现和测试之前,通过采用证实设计正确性的“深奥”策略,彻底提高软件的生产率和产品的可靠性?更严肃地说,完美的程序验证只能建立满足技术说明的程序。这时,软件工作中最困 难的部分已经接近完成,形成了完整和一致的说明。开发程序的一些必要工作实际上已经变 成对技术规格说明进行测试。
163
+ 6 . 环境和工具。向更好的编程开发环境开发中投入,我们可以期待得到多少回报呢?人 们的本能反应是首先着手解决高回报的问题:层次化文件系统,统一文件格式以获得一致的 编程接口和通用工具等。特定语言的智能化编辑器在现实中还没有得到广泛应用,不过它们 最有希望实现的是消除语法错误和简单的语义错误。
164
+ 7 . 工作站。随着工作站的处理能力和内存容量的稳固和快速提高,我们能期望在软件领 域取得多大的收获呢?现在的运算速度已经可以完全满足程序编制和文档书写的需要。编译 还需要一些提高,不过一旦机器运算速度提高十倍,那么程序开发人员的思考活动将成为日 常工作的主要活动。实际上,这已经是现在的情况。
165
+
144
166
## 针对概念上根本问题的颇具前途的方法
167
+
168
+ 1 . 购买和自行开发。构建软件最可能的彻底解决方案是不开发任何软件。
169
+ 2 . 重大的变化在于计算机硬件/软件成本比率。
170
+ 3 . 需求精炼和快速原型。
171
+ 4 . 增量开发——增长,而非搭建系统。
172
+ 5 . 卓越的设计人员。
173
+ 1 . 尽可能早地、有系统地识别顶级的设计人员。最好的通常不是那些最有经验的人员。
174
+ 2 . 为设计人员指派一位职业导师,负责他们技术方面的成长,仔细地为他们规划职业生涯。
175
+ 3 . 为每个方面制订和维护一份职业计划,包括与设计大师的、经过仔细挑选的学习过 程、正式的高级教育和以及短期的课程——所有这些都穿插在设计和技术领导能力的培养安 排中。
176
+ 4 . 为成长中的设计人员提供相互交流和学习的机会。
177
+
145
178
# 第17章 再论“没有银弹”
146
179
## 人狼和其他恐怖传说
147
180
## 存在着银弹—— 就在这里
You can’t perform that action at this time.
0 commit comments