您的位置:首页 > 其它

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

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

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

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

写作代码:writing code和写作确实相似,都是需要创造性的劳动,同样,需要一张纸,一支笔就足够。可写作通常是个人性的行为,而一个软件项目多半会涉及承担许多不同职责的很多人。软件系统在其首次发布之后的工作量至少占到所有工作量的2/3。其次,对于写作而言,原创性是最重要的,世界名著不可能是抄出来的。艺术需要原创性,如GJM,花儿乐队之流就很无语了,呵呵。而对于软件构建而言,“努力创造真正的原创成果”的开发效率,往往低于专注于重用(reuse)以往项目的一些设计思想、代码以及测试用例的开发效率。这些都说明写作代码这不是一个恰当的隐喻,容易产生延伸和误导。隐喻不能说是错误的,只有贴切与不贴切之分。

培植系统:将软件创造想象成类似播种和耕种的情形,每次设计一点,写出一段代码,做一点测试,小步前进。这样的增量式技术很不错。可这个隐喻也同样存在弱点,它暗示人们将无法对开发软件的过程和方式进行任何的直接控制。我们在春天播下代码的种子,然后向老天爷和土地公公祈祷,期待着秋天收获丰盛的代码。

系统生长:以牡蛎孕育珍珠的历程来形容软件开发。先做出软件系统的一个尽可能简单的、但能运行的版本,构成一个足够强壮骨架,支撑起为来将要开发的真实系统,然后再慢慢增加真实的输入,把模拟的类替换为真实的类等等工作,从而形成一个完整的系统,这也就是增量式开发——敏捷编程的基础

建造软件:从建筑的角度去理解软件开发

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

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

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

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

盖房子,通水点等工作)

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

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

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

隐喻是启发式的方法而非算法,对于形象性的东西总不容易说的清,可将抽象事物形象化又是一件锐利的武器,它能激发你的灵感,并有利于团队之间更好的沟通。毕竟,用身边的事物来描述抽象的概念,总是特别容易理解嘛。而我感觉,如果你在工作中有意地以这样方式去理解整个项目,总能容易地把握住整个项目的重点或者说关键所在。     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: