我们已经看到,简单和优雅都不会作为评价软件部署成功的标准。就像哲学,理性主义过于学术化了,不能帮助我们去理解现实世界中的日常问题。而那种推土机式的务实工作方式,却让人感觉很有发展前途:把市场上可用的组件装配成应用程序,不管用了多少功能库,都把它们粘在一起,只要它能用,也不需要了解清楚个所以然出来。虽然很多人不认同这个观点,但它的确是当今大型软件项目不由自主采用的做事风格。然而,既然现在已经认识到了这个问题,我们能否使无绪的方法更好地工作呢?
推土机式的工作方法的优点在于,即使参与者(如程序员)不完全了解系统情况,也能得到不错的结果。第一次听到这种话你可能会吓一跳。但事实上,我们一直都是这么干的。你开汽车,但不需要去了解汽车的内部设计;你刷牙也不用先学习化学。对于开发人员也是如此,写一个简单的Win32应用程序,并不需要了解Windows源代码,只需要对Windows的API 有所了解,再找到一些适当的文档就可以了。大部分系统都是如此。像开发Linux代码,编写Java程序,做一个网页,你都只需要了解冰山一角,就可以完成这些工作了。之所以能这样完成工作,是由于用抽象包裹了每一个库和框架。这种抽象内容也就是API,它将系统的复杂性隐藏起来了。这也正是本书的主题所在。
在工作时,如果不需要深入了解很多内容时也能完成任务,那么在这种情况下做出来的系统就更可靠。本书会逐步探讨各种方式来帮助大家在不深入了解各种细节的前提下,也能够很好地使用库,并对后续的版本仍然可以这么做。
“无绪”一词的起源
2006年10月,我在俄勒冈州波特兰参加一个OOPSLA①会议。在其中一个主题讲座上,我第一次听到了“无绪”这个词。Martin Rinard②应邀在这次会议上发表演讲,他演讲的题目是“在开发和维护软件系统时,应该避免让开发人员深入了解系统”,这个主题非常有煽动力,同时也引发争议。
他通过了一些证据来说明,人类的大脑功能是有限的,只能处理有限数量的数据。如果要建立日益变大的应用程序,就必须做到这一点:每个人只了解应用程序的一部分,也能完成程序的开发。他的谈话包含了如下3个方向的探索。
验证程序正确性
系统工程
容错性
他在演讲时还探讨了在一个程序存在错误的时候,如何还能让程序正常运行。对于那些热爱真理、漂亮和优雅的人来说,这样一个观点太可怕了,但对于那些开发真实软件系统的人来说,却是可以接受的方案。
虽然我很喜欢Rinard先生的演讲,我也同意凡是软件都存在错误这一结论,但这本书下面将集中讨论系统工程,以及验证程序的正确性。不过,在开发高可靠性的软件系统时,还要尽可能地做到无绪,这是一个富有吸引力的目标,而且也是有望达到的目标。
“无绪”这个词并不是一个贬义词。我们只是用它区别两种层次的理解水平。有一种理解可以称为“浅层理解”,它是指对一种事物的了解程度只限于掌握使用方法即可;还有一种理解则可以称为“深层理解”,是指会对某种事物背后的原则、规律有所掌握③。在日常生活中,我们通常只需要“浅层理解”。我们可以看电视,而并不需要深入了解电视机的工作原理。如果我们需要找出当前自己所在的位置,也并不需要了解全球定位卫星是如何运作的。了解这些事物背后的规律已经不是我们所要关心的内容。对我们来说,能够认识GPS上的经度和纬度其实就已经足够了。当然,有些人需要了解更深入的内容。如GPS设备、汽车或电视机的维修人员,就需要深入了解相关内容。不过,即便如此,他们所需要的仍然可以算是“浅层理解”④,他们也并不需要了解事物背后的每个小细节。当然如果说确有其必要性的话,我们可以去学习电视机、汽车等领域的专业知识。然而,这种对事物进行深入学习的必要性通常不大,因此,大多数人在日常生活中只需要做到“浅层理解”就足够了。
其实在软件开发中所说的“无绪”,也表示在大部分情况下,我们只要做到“浅层理解”就可以了。“针对性无绪”这个词用在这里只是提醒大家,有些内容需要深入了解,而有些内容则无需如此。所以“针对性无绪”(在后面的内容基本上只使用“无绪”或者“透明”)是个彻底褒义的词。
① OOPSLA是一个年度会议,此年度会议为面向对象编程系统、语言以及应用程序举办,主办方是计算机协会(ACM)的SIGPLAN以及SIGSOFT团体。——译者注
② Martin Rinard是麻省的一位计算机教授,它在OOPSLA所做的讲座为“Minimizing Understanding in the Construction and Maintenance of Software Systems”,可以在OOPSLA的维基上得到讲演的PDF文稿,地址为http://www.oopsla.org/ oopsla2006/index.php?title=Martin_Rinard's_Talk。——译者注
③ 所谓的“浅层理解”也就是中文常说的了解,而“深层理解”则可以称为精通,但翻译时还是遵守了原文。
——译者注
④ 这一个“浅层理解”可以对应到中文常说的熟悉。——译者注