画蛇添足
If one separates responsibility for functional specification from responsibility for building a fast, cheap product, what discipline bounds the architect's inventive enthusiasm?
如果将制定功能规格说明的责任从开发快速、成本低廉的产品的责任中分离出来,那么有什么样的准则和机制来约束结构师的创造性热情呢?
Interactive Discipline for the Architect(建筑师的交互准则和机制)
The architect of a building works against a budget, using estimat- ing techniques that are later confirmed or corrected by the con- tractors' bids.
建筑行业的设计师使用估算技术来编制预算,该估算技术会有后续的承包商报价来验证和修正。
The architect then revises his estimating technique upward and his design downward for another iteration.
接下来,建筑师会重新改进他的预算或修订设计,调整到下一工期。
He may perhaps suggest to the contractors ways to implement his design more cheaply than they had devised.
他可能会向承包商建议,使用更加便宜的方法来实现设计。
He usually has the disadvantage of working with only one contractor, who can raise or lower his estimates to reflect his pleasure with the design.
只和一个供应商联系的缺点是,这个供应商能提高或降低成本,以至于他对他满意的设计进行修改。
In practice, early and continuous communication can give the archi- tect good cost readings and the builder confidence in the design without blurring the clear division of responsibilities.
实际情况中,尽早交流和持续沟通能使结构师有较好的成本意识,以及开发人员获得对设计的信心,并且不会混淆各自的分工。
The architect has two possible answers when confronted with an estimate that is too high: cut the design or challenge the esti- mate by suggesting cheaper implementations.
当估算成本较高时,建筑师有两种解决办法:剪掉设计或建议成本更低的实现方法;
remember that the builder has the inventive and creative re- sponsibility for the implementation; so the architect suggests, not dictates;
架构师需要记住:开发者对于实现来讲有创意和创造的责任;因此架构师需要建议,而不是命令;
always be prepared to suggest a way of implementing any- thing he specifies, and be prepared to accept any other way that meets the objectives as well;
时刻准备为所指定的说明建议一种实现的方法,同样准备接受其他任何能达到目标的方法;
deal quietly and privately in such suggestions;
对上述的建议保持低调和平静;
be ready to forego credit for suggested improvements.
准备放弃改进建议;
Self-Discipline—The Second-System Effect(自律 -- 开发第二个系统所带来的后果)
An architect's first work is apt to be spare and clean.
在开发第一个系统时,结构师倾向于精炼和简洁。
He knows he doesn't know what he's doing, so he does it carefully and with great restraint.
他知道自己对正在进行的任务不够了解,所以他会谨慎仔细的工作。
When he does his third and later ones, his prior experiences will confirm each other as to the general characteristics of such systems, and their differences will identify those parts of his experience that are particular and
not generalizable.
当他做第三个或者第四个系统的时候,他之前的经验将作为这类系统的一般特征得到互相确认,而且系统之间的差异会帮助他识别出经验中不够通用的部分。
I get the impression that Stretch is in some way the end of one line of development.
对于Stretch系统,我的印象是从某种角度而言,它是一个产品线的终结。
The second-system effect has another manifestation somewhat different from pure functional embellishment.
开发第二个系统所引起的后果与功能修饰修饰有一些区别。
That is a tendency to refine techniques whose very existence has been made obsolete by changes in basic system assumptions.
对某些系统进行细化、精炼的趋势。在基本系统设想发生了变化,这些技术已经显得落后。
Consider the linkage editor, designed to load separately-compiled programs and resolve their cross-references.
例如,链接编辑器的设计,它用来分别编译后的程序进行装载,解决它们之间的交叉引用。
Beyond this basic function it also handles program overlays.
除了这些基本功能,它还支持程序覆盖。
It allows overlay structuring to be done externally, at linkage time, without being designed into the source code.
它允许链接时在外部完成覆盖结构,而无需在源代码中进行设计。
In a sense it is the culmination of years of development of static overlay technique.
现在看来它是若干年静态覆盖技术开发的巅峰。
Yet it is also the last and finest of the dinosaurs, for it belongs to a system in which multiprogramming is the normal mode and dynamic core allocation the basic assumption.
然而,它同时也是最后和最优秀的恐龙,因为它属于一个基本运行方式为多道程序,以动态内核分配为基础的系统。
This is in direct conflict with the notion of using static overlays.
这直接与静态覆盖的内容概念相冲突。
How much better the system would work if the efforts devoted to overlay management had been spent on making the dynamic core allocation and the dynamic cross-referencing facilities really fast!
如果我们把投入在覆盖管理上的工作量,用在提高动态内核分配和动态交叉引用的性能上,那么系统将会运行的多么好啊!
Furthermore, the linkage editor requires so much space and itself contains many overlays that even when it is used just for linkage without overlay management, it is slower than most of the system compilers.
另外,链接编辑器需要如此大的空间,而且它本身包含很多链接库,以至于即使在不用覆盖管理功能,仅仅使用链接功能的时候,它也比绝大多数系统的编译程序还要慢。
The irony of this is that the purpose of the linker is to avoid recompilation.
具有讽刺意味的是,链接程序的目的是为了避免重新编译。
Like a skater whose stomach gets ahead of his feet, refinement proceeded until the system assumptions had been quite outrun.
这种情况就像一个挺着大肚子的节食者一样,直到系统的思想已经十分优越时,才开始对原有技术进行细化和精炼。
The TESTRAN debugging facility is another example of this tendency.
TESTRAN调试程序是这个趋势的另外一个例子。
It is the culmination of batch debugging facilities, furnishing truly elegant snapshot and core dump capabilities.
它在批调试程序中是出类拔萃的,配备了真正快捷优雅的快照和内存信息转储功能。
It uses the control section concept and an ingenious generator technique to allow selective tracing and snapshotting without interpretive overhead or recompilation.
它使用了控制段的概念和卓越的生成技术,从而不需要重新编译或解释,就能实现选择性跟踪和快照。
The imaginative concepts of the Share Operating System3 for the 709 have been brought to full bloom.
这种709共享操作系统中魔术般的概念得到了广泛的应用。
Meanwhile, the whole notion of batch debugging without reeompilation was becoming obsolete.
但同时,整个无需编译的批调试概念变得落伍了。
Interactive computing systems, using language interpreters or incremental compilers have provided the most fundamental challenge.
使用语言解释器和增量编译器的交互式计算系统,向它提出了最根本的挑战。
But even in batch systems, the appearance of fast-compile/slow-execute compilers has made source-level debugging and snapshotting the preferred technique.
即使是在批处理系统中,快速编译/慢速执行编译器的出现,也使源代码级别调试和快照技术成为优先选择的技术。
How much better the system would have been if the TESTRAN effort had been devoted instead to building the interactive and fast-compile facilities earlier and better!
如何在构建和优化交互式和快速编译程序之前,就已经着手TESTRAN的开发,那么系统将是多么优秀啊!
Yet another example is the scheduler, which provides truly excellent facilities for managing a fixed-batch job stream.
另外一个例子是调度程序。OS/360的调度程序是非常杰出的,它提供了管理固定批作用的杰出功能。
In a real sense, this scheduler is the refined, improved, and embellished second system succeeding the 1410-7010 Disk Operating System,a batch system unmultiprogranuned except for input-output and intended chiefly for business
applications.
从真正意义上来讲,该调度程序是作为1410-7010磁盘操作系统后续的二次系统,经过了精炼、改进和增强。它是除了输入-输出以外的非多道程序批处理系统,是一种主要用于商业应用的系统。
But it is almost totally uninfluenced by the OS/360 needs of remote job entry, multiprogramming, and permanently resident interactive subsystems.
但是它对OS/360的远程任务项、多道程序、永久驻留交互式子系统,几乎完全没有影响和帮助。
But he can be conscious of the peculiar hazards of that system, and exert extra self-discipline to avoid functional ornamentation and to avoid extrapolation of functions that are obviated by changes in assumptions and purposes.
但他可以有意识关注那些系统的特殊危险,运用特别的自我约束准则,来避免那些功能上的修饰;根据系统基本理念及目的变更,舍弃一些功能。
These values will guide initial decisions and serve during implementation as a guide and warning to all.
这些值会在一开始作为决策的向导,在物理实现期间充当指南和对所有人的警示。
By insisting on a senior architect who has at least two systems under his belt.
他必须坚持至少拥有两个系统以上开发经验结构师的决定;
Too, by staying aware of the special temptations, he can ask the right questions to ensure that the philosophical concepts and objectives are fully reflected in the detailed design.
同时,保持对特殊诱惑的警觉,他可以不断提出正确的问题,确保原则上的概念和目标在详细设计中得到完整的体现。
总结:
建筑师一般采用估算技术来编制预算,但是这个预算最后会有承包商报价来验证和修正;
尽早交流和持续沟通能够使结构师有较好的成本意识;
架构师需要做到谦虚,才能改变开发者做事的方式;
在开发第一个系统时,结构师倾向于精炼和简洁;
链接编辑器的设计是若干年静态覆盖技术开发的巅峰;
链接编辑器包含很多链接库,仅仅使用链接功能的时候,它也比绝大多数系统的编译程序还要慢。
项目经理如何避免画蛇添足需要做到两点:
他必须坚持至少拥有两个系统以上开发经验结构师的决定;
同时,保持对特殊诱惑的警觉,他可以不断提出正确的问题,确保原则上的概念和目标在详细设计中得到完整的体现。