用隐喻来更充分地理解软件开发

        这个标题是<代码大全2>中的一章,觉的写的非常好,自己总结下。隐喻,或者称为“类比”、“建模”。通过把你不太理解的东西和一些你较为理解的、且十分类似的东西做比较,你可以对那些不太理解的东西产生更深刻的理解,这种使用隐喻的方法叫做“建模”。这个概念很好理解,让我想起在学校时也曾经接受过记忆培训,联想记忆法之类就是通过对所要记忆的资料进行形象化,交叉类比,比较记忆等等。

       软件,或者程序,给人感觉好象应该是冷冰冰的,充满逻辑的严谨性和让人头痛的字母数字。可如果以一定的方式去隐喻软件的开发,似乎能给人更大的启示。算法和隐喻的区别就在此,算法是严谨的,直接给你解决问题的指导。而隐喻则是启发式的方法,告诉你该如何去发现这些指导信息,或者至少到哪里去寻找它们。

      书中介绍了常见的4种软件隐喻:写作代码,培植系统,系统生长以及建造软件。

  1. 写作代码:writing code和写作确实相似,都是需要创造性的劳动,同样,需要一张纸,一支笔就足够。可写作通常是个人性的行为,而一个软件项目多半会涉及承担许多不同职责的很多人。软件系统在其首次发布之后的工作量至少占到所有工作量的2/3。其次,对于写作而言,原创性是最重要的,世界名著不可能是抄出来的。艺术需要原创性,如GJM,花儿乐队之流就很无语了,呵呵。而对于软件构建而言,“努力创造真正的原创成果”的开发效率,往往低于专注于重用(reuse)以往项目的一些设计思想、代码以及测试用例的开发效率。这些都说明写作代码这不是一个恰当的隐喻,容易产生延伸和误导。隐喻不能说是错误的,只有贴切与不贴切之分。
  2. 培植系统:将软件创造想象成类似播种和耕种的情形,每次设计一点,写出一段代码,做一点测试,小步前进。这样的增量式技术很不错。可这个隐喻也同样存在弱点,它暗示人们将无法对开发软件的过程和方式进行任何的直接控制。我们在春天播下代码的种子,然后向老天爷和土地公公祈祷,期待着秋天收获丰盛的代码。
  3. 系统生长:以牡蛎孕育珍珠的历程来形容软件开发。先做出软件系统的一个尽可能简单的、但能运行的版本,构成一个足够强壮骨架,支撑起为来将要开发的真实系统,然后再慢慢增加真实的输入,把模拟的类替换为真实的类等等工作,从而形成一个完整的系统,这也就是增量式开发——敏捷编程的基础
  4. 建造软件:从建筑的角度去理解软件开发

                     决定建造什么类型的房子 --------------------------- 问题定义

                     与建筑师探讨总体设计      --------------------------- 软件架构设计

                      画出详细蓝图,雇佣承包人 ------------------------软件的详细设计

                      开工(诸如打地基,             -------------------------软件的构建

                       盖房子,通水点等工作)

      装修房子        --------------------------软件的优化

                     工程监督和质检                     --------------------------软件的审查、复查(单元测试,集成,集成测试等)

         建造软件和盖房子的相似点很多,两者最主要的开销都是人力成本,对于可以重用的东西,不是试图从头开始,而是购买或直接拿来用,你总不会去自己建造冰箱、彩电吧。当然,有钱人或者特殊需要,咱也可以 定制。软件的变动也如建筑一样,对于结构性的(支撑性)的变动,成本远远高于边边角角的修补。建筑这一隐喻让人们对于超大型的软件项目认识更加深刻,毕竟,超大型的结构一旦出现问题,后果将非常严重。

        隐喻是启发式的方法而非算法,对于形象性的东西总不容易说的清,可将抽象事物形象化又是一件锐利的武器,它能激发你的灵感,并有利于团队之间更好的沟通。毕竟,用身边的事物来描述抽象的概念,总是特别容易理解嘛。而我感觉,如果你在工作中有意地以这样方式去理解整个项目,总能容易地把握住整个项目的重点或者说关键所在。     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值