原文对隐喻的关键点总结:
■ 隐喻是启示而不是算法。因此它们往往有一点随意(sloopy)。
■ 隐喻把软件开发过程与其他你熟系的活动联系在一起,帮助你更好地理解。
■ 有些隐喻比其他一些隐喻更贴切。
■ 通过把软件的构建过程比作是房屋的建设过程,我们可以发现,仔细的准备是必要的,而大型项目和小型项目之间也是有差异的。
■ 通过把软件开发中的实践比作是智慧工具箱中的工具,我们又发现,每位程序员都有许多工具,但并不存在任何一个能适用于所有工作的工具,因地制宜地选择正确工具是成为能有效编程的程序员的关键。
■ 不同的隐喻彼此并不排斥,应当使用对你最有益处的某种隐喻组合。
原文提到的主要隐喻:
■ Software Penmanship: Writing Code,编程如写作。(批注:缺点在于要舍得并有时间制作和扔掉大量的软件草稿)
■ Software Farming: Growing a System,编程如栽花。(批注:软件耕作这一隐喻的弱点在于它暗示了人们将无法对开发软件的过程和方式进行任何直接的控制。你在春天播下代码的种子,然后按照农历节气向土地佬儿许几个愿,你将会在秋天收获到丰盛的代码)
■ Software Oyster Farming: System Accretion,编程如成长过程。(批注:作为一个隐喻而言,增量式开发的优势在于未做过度的承诺。比起耕作那个隐喻来,对它作不恰当地引申要更困难一些。牡蛎孕育珍珠的图景也很好地刻画了增量式开发(或说生长)的情形)
■ Software Construction: Building Software,软件在于构造。(批注:按房屋建筑所作的这一隐喻,可以向许多其他方向引申——这也是隐喻这一方法如此强有力的一个原因。有很多常见的软件开发术语都是从建筑这一隐喻中衍生出来的:软件架构(建筑学,architecture)、支撑性测试代码(脚手架,scaffolding)、构建(建设,construction)、基础类(foundation classes)以及分离代码(tearing code apart)。你可能还听说过更多这一类的词语)
■ Combine ToolBox of everyone,每个程序员都有自己的开发工具箱。
原文提到的相关阅读:
■ Fred Brooks的《人月神话》(《The Mythical Man-Month》,Brooks 1995)
■ Brian Kernighan和P. J. Plauger的《编程风格的要素》(《The Elements of Programming Style》,1978)
■ Tom Gilb的《软件工程管理原理》(The Principles of Software Engineering Management,1988)
■ Kuhn, Thomas S. 《科学变革的结构》(第三版)(The Structure of Scientific Revolutions, 3d ed. Chicago, IL: The University of Chicago Press, 1996.)
■ Floyd, Robert W. “编程范型”(“The Paradigms of Programming.” 1978年图灵奖的颁奖演讲)。《Communications of the ACM》(《ACM通讯》)