《代码大全》阅读笔记 第二章,用隐喻更充分的理解软件开发

第二章 用隐喻更充分的理解软件开发

什么是隐喻? 通过生活中或者工作中一些现有的事物作为模型,来描述那写未知的,或者不正确的事物,以期望在钻研的路上,得到指引,得到方向,得到目标。

1. 隐喻的重要性

   在人类发展史上,很多的成就是在隐喻的帮助下出现的,比如气体的分子运动来至一个叫“撞球”的运动,光的波动理论来至声音的波动传播,等等。

   隐喻并不是总是带来好处的,有的时候,也会将我们带入歧途。那么如何找到一个恰当的隐喻帮助我们实现目标,就是最重要的地方了。我想,这应该也是本章的重点。

   从一系列“不太合适”的隐喻找到“更好”的隐喻......

2. 如何使用软件隐喻

  作者将隐喻起到的作用比作是一个启示的,启发的过程。

然后花了 很大篇幅来描述启发和算法的异同点。算法是明确的一套机制,使用的时候直接套用就OK了,但是启发不同,启发只是告诉你该如何去找,而不知道具体能不能找到什么,甚至是否能够找到结果都不知道。启发的过程是一个试探的过程,尝试着摸索着前进。所以一个好的启发影响是巨大的。

如何使用软件中的隐喻?

  • 用它来提高你对编程问题和编程过程的洞察力。

  • 用来帮助你思考编程过程中的活动,想出更好的解决办法。

3. 常见的软件隐喻

  1. 软件中的书法:写作代码

将软件的开发隐喻成写一份信,在遵循基本的书信格式之后,想到什么写什么,跟创作相似。

  • 它没有完整,充分地刻画软件开发工作。

  • 写信通常是个人性质的活动,而软件项目通常是很多人,一组人的活动

  • 写信会创造出一些原创性的东西,但是在效率上面远远低于专注于重用以往项目的一些设计思想和设计代码。

  • 写信的时候,发现不合适或者错误的时候,直接扔掉信纸。但是,软件开发却不能那么果断,因为那可能是你们一组人几个月里面的成果,伤不起。

总之,用写信来隐喻软件的构建,太过简单,太过呆板。

  1. 软件的耕耘法:培植系统

   软件开发过程中,一小部分的设计,编写,测试,并将成果逐步的添加到项目中,将这样的软件开发的方法隐喻成农作物的种植。一点一点的添加,一点一点的长大。

   作者肯定了这样的“增量做法”是有价值的,减少了很多麻烦。

   但是作者在这类隐喻的不好之处在于农作物生长过程中,占据主动权或者说影响农作物的是天气,农民只能根据天气来做出相应的措施。这种情况也就暗示开发者无法对开发软件的过程和方式有更好的掌握。

   我想,或许可以用大棚种植来隐喻软件的构建。认为上述的增量做法的前提必须是软件的整个框架搭建好的基础上,才能实施,不然是不可以,不科学的,会出问题。而隐喻中的大棚可以想象成整个软件的框架。大棚的温度,水份等都可以控制的,主动权掌握在农民手中,也就暗示了开发者可以完全的把握整个开发流程。

   重要的是,大棚一定要搭建好。

  1. 软件的牡蛎养殖观点:系统生长

   这一小节讲的还是增量式开发,这里将其隐喻成牡蛎孕育珍珠。

   增量式开发的优势在于未做过度的承诺,真好印证了牡蛎孕育珍珠。牡蛎孕育珍珠有很多的不确定性,可能会成功,更有可能会失败,不能给出明确的结果。

  1. 软件构建:建造软件

   用土木工程里的建造房屋来隐喻软件的开发。

   建一个小狗窝,对应于小型项目的开发。无需详细的设计,出错的时候影响也不大。

   建一高楼,对应于大型项目的开发。需要详细的设计,如何建,怎么建,建成什么样子的等等。

   作者对“房屋建造”这个隐喻做了高度的评价,觉得软件开发上出现的大部分问题,在建筑上都能找到启发的东西。

   房屋建造这个隐喻,对开发大型项目的作用是非常之大。

  1. 应用软件技术:智慧工具箱

   软件开发的过程中,我们会通过自身掌握的知识或者技巧去分析并完成。为了更好的完成,为了使用更好的办法,为了更快捷,更有效,我们就需要掌握的知识或者技巧要越多越好。

   本小节通过工具箱来隐喻我们掌握的技巧,只有在工具箱里面的工具更多的情况下,我们才能更好更有效的完成任务。

  1. 组合各个隐喻

   隐喻只是一种启发式的方法,并不是一特定的算法。在试图认识软件,了解软件的时候,我们可以选择很多的隐喻,知道找到最合适的那一个。

   但是,并不是说,在软件构建的过程中,能让我们得到启发的只能是一个隐喻,我们可以通过很多个隐喻来作为启发的工具。

   总结:隐喻只是一种思考问题的手段,没有什么特别的规矩,只要能够帮助我们更好的理解软件本身就OK了。

posted @ 2012-08-30 13:15  zhouzidan  阅读(329)  评论(0编辑  收藏  举报