On Building Systems That Will Fail 笔记
Fernando J. Corbató 领导并组织构建了 CTSS 和 Multics 系统。
因为在通用、大规模兼容分时和资源共享的计算机系统方面的卓越贡献,他获得了 1990 年的图灵奖,而《On Building Systems That Will Fail》就是他的获奖发言。
文章讲述了他在构建 CTSS 和 Multics 时的经历,关于如何构建系统、以及如何处理系统失效。
关于庞大的系统
那些庞大的系统通常具有以下属性:
- 规模庞大
- 太复杂,以至于导致人手不足
- 构建时间很长
- (因为太昂贵)而不可能被放弃
- 永远也完成不了!
- 很少能完全像预想中那样工作,有时会以一种剧烈的方式出错
以上是一些负面的属性,下面是庞大的系统的一些好的方面:
- 探索系统中的那些未知的部分令人振奋
- 开辟出一个新的服务,或者新的领域,成为人们的必需品
- 引发一系列后续创新
庞大的系统是如何出错的
构建庞大的系统非常困难,以下是一些可能造成失败的原因:
- 使用正确的技术构建了错误的产品
- 微妙的错误非常难以避免,甚至在某种程度上是不可避免的
- 误解了程序模型,或者使用了错误的模型
- 系统本身、或者系统依赖的底层系统改变得太快
- 对于构建一个需要处理大量新问题的系统来说,错误是不可避免的
- 在添加新特性时,忘记了旧有的假设,就会引发系统设计方面的 bug
- 即使是有经验的程序员也会出错
复杂性的来源
构建系统时的复杂性来源于以下方面:
- 人员的规模,以及由此产生出的信息传播失真,以及争论
- 编程仍然是一个探索中的领域
- 通常要基于假设对系统进行取舍
- 底层系统的不完美
- 要处理的条件太多
- 没有一种好的语言来描述系统状况,统计数据常常被误用或者被误解
- 变化太快
- 程序的使用者 —— 人 —— 以及由之而来的复杂性
结论
- 要向前迈进,构建庞大的系统是不可避免的
- 在庞大的系统中,错误是不可避免的
- 简洁和优雅非常重要:用最少的机制和最大的清晰度来完成给定的功能
- 使用隐喻:减少误解,加快理解,改善沟通,关注高层次而不是细节
- 使用受限的语言:让程序员和设计师在给定的范围内讨论,不会产生不着边际的想法
- 和人以及机器的错误作斗争,处理那些关键的失效错误部分
- 在设计系统时,应该假设它会被持续的更新和修复,通过高维度的功能和结构模块化,来产生一个易于修改的系统。
- 出错时,不要慌张,要找原因
- 从错误中学习,同时对新解决方案的可能性保持警觉
- 团队成员应该互相学习,互相教育