Chapter 2: Metaphors for a Richer Understanding of Software Development

2.1 The Importance of Metaphors

通过形象的隐喻(比喻)描述软件领域中各种特定的想象和事物,使得我们能更深刻的理解软件开发的过程。通过将不太理解的东西和较为理解且十分相似的东西做比较的方法叫“建模”(modeling),通过类比建模,常常能产出重要的研发成果。

对隐喻的过度引申也会让人误入歧途。有的隐喻会比其他的隐喻更好,更能解释实验证据及其他已经观测到的现象。不同的隐喻彼此之间并不排斥,应当合理组合使用隐喻。

算法是一套定义明确的指令,使你能完成某个特定的任务。算法是可预测的、确定性的、不易变化的。

启发(试探)法仅仅告诉我们如何去找,不会告诉我们要找什么,是一种帮助寻找答案的技术,得出的答案具有偶然性。

2.2 How to Use Software Metaphors

隐喻不是算法,而是一种启示和试探法,隐喻并没有一张详细的路线路,它可能就是一盏探照灯。应该用隐喻来提高对编程问题和编程过程的洞察力,用它来帮助思考编程过程中的活动,想象出更好的做事情的方法。

善于使用隐喻的人,对编程的理解会更好,能够更快地写出更好的代码。

2.3 Common Software Metaphors

  • 软件中的书法:写作代码

    开发一个程序就像写一封有缘由的信一样,坐下来,从头写到尾就完成了。这样的隐喻适用于个人或者小型项目。

  • 软件的耕作法:培植系统

    创造软件类似于播种和耕种的情形,每次设计系统的一小部分、写出一段代码、做一点测试,将成果一点点的添加到系统中。这里的增量和生长的概念是有用的,但是很难将耕作恰当的引申到软件开发领域。

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

牡蛎的生长是增量的、迭代的、自适应的、演进的,已增量的方式进行设计、编译和测试,是目前已知的最强有力的软件开发概念,增量式的开发的优势在于未做过度的承诺。

  • 软件构建:建造软件

    建造软件这一说法,暗示了软件开发中存在诸多阶段,如计划、准备及执行等。根据建造软件的不同,这些阶段的种类和程度可能会发生变化。建造房子的过程,可以对应到软件开发中的问题定义、架构设计、详细设计、软件构建、软件优化、软件评审和详查。

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

    编程方面的知识学得越多,工程师脑海中的工具箱会有更多的分析工具,也会知道在何时使用这些工具,以及正确的使用这些工具。工具箱隐喻能帮助把所有的方法、技术和技巧留在脑海,合适的时候拿来即用。

Key Points

  • Metaphors are heuristics, not algorithms. As such, they tend to be a little sloppy.

  • Metaphors help you understand the software-development process by relating it to other activities you already know about.

  • Some metaphors are better than others.

  • Treating software construction as similar to building construction suggests that careful preparation is needed and illuminates the difference between large and small projects.

  • Thinking of software-development practices as tools in an intellectual toolbox suggests further that every programmer has many tools and that no single tool is right for every job. Choosing the right tool for each problem is one key to being an effective programmer.

  • Metaphors are not mutually exclusive. Use the combination of metaphors that works best for you.

results matching ""

    No results matching ""