读书笔记:《代码大全(第 2 版)》第 2 章

第二章主要讲的是对隐喻(Metaphor)的正确、深刻地理解对于软件开发的重要性。

简单来说,可以把隐喻理解为模型,本质是内在化和抽象化的过程,通过类比和抽象,提供正确的方向和灵感,避免在不正确层次上的误解(例如盲人摸象)。在多年的软件开发的发展过程中,引申出了多种模型,包括单纯地写代码(Writing Code)、无计划地增长式开发(Growing a System)、计划性地逐步开发(System Accretion)和基于明确需求的构建软件(Building Software)。

  • 单纯地写代码:写简单直白的代码,只适合目的非常直观的小项目。
  • 无计划地增长式开发:事先没有明确计划,根据后期需求逐步增加代码,这样的好处是可以每开发一点代码就能够进行测试。弊端是无法控制代码量,最终导致代码体积失控而异常庞大。
  • 计划性地逐步开发:虽无明确的需求,但有大致框架,按阶段完成开发目标,实现具体逻辑。同时还可以逐步测试新增的代码。
  • 基于明确需求的构建软件:有非常明确的需求,但不是过于具体。从整体要局部清晰可见,代码量与开发周期相对可控。但设计文档可能就有非常长的篇幅,使得开发人员很难从整体上纵观软件全局。仅适合非常庞大的项目。

这四种常见的模型从简单到复杂,从片面到完整。要注意的是,这四种模型并不存在哪个比较好,哪个比较差,而且也不是只有这四种模型的存在。

不存在所谓的“对的”隐喻和“错的”隐喻,只有针对实际情况而言“较差”的隐喻和“较好”的隐喻。在开发时使用不恰当的隐喻会使软件开发误入魔途,尤其对于大项目而言,人力的成本浪费会非常严重;相反地,使用合适的隐喻会让软件开发时如鱼得水,水到渠成。因此,对于一种某种情形下“较差”的隐喻,可能会在另外的情形下成为“较好”的隐喻,这全都取决于实际情况。

在软件开发过程中,隐喻的积累是随着开发者的实际开发经验而增长的,之后便会成为开发者思考和权衡不同方案的工具,在需要时选取多种适当的模型进行组合使用,不受拘泥。

隐喻是启发式的,掌握合适的隐喻,可以提高我们对编程过程的洞察力和理解力。它与算法的最大区别是它只能告诉开发者如何去寻找答案,而不是像算法那样具体到如何得到答案。因此隐喻是一个探照灯,而不是路线图。

其它读书笔记备忘

  • http://blog.codingnow.com/cloud/CodeComplete/
  • http://book.douban.com/review/3153664/
  • http://blog.csdn.net/courtneygeng/article/details/9761805
  • http://huidianlearning.ixiezi.com/2013/02/26/%E4%BB%A3%E7%A0%81%E5%A4%A7%E5%85%A8%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0%EF%BC%88%E7%AC%AC%E4%BA%8C%E7%AB%A0%E8%87%B3%E7%AC%AC%E5%9B%9B%E7%AB%A0%EF%BC%89/

你可能感兴趣的:(隐喻,代码大全)