热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

传统开发与敏捷好比大象与猴子

很久以前,在一片充满隐喻的土地上,住着一头大象(喻传统开发方法)。很多年来,这头忠实的大象一直都是他所居住村庄主要的食物采集者,并且非常清楚这个村庄需要什么(喻工程前的事先计划性)。他在丛林中修建了一条路(喻最佳实践),这条路总是能指引他找到最好的根茎、蔬菜、坚果和水果等食物(喻项目的功能)。

很久以来我都对传统的软件工程方法和盛行的敏捷方法的联系与区别郁闷不已,因为每一个领域都是那么庞大,作为一个非专业人士,要能清楚地把握其中的关系,确实不是件容易的事情,直到我看到下面的这个故事(摘自《平衡敏捷与规范》Balancing Agility and Discipline: A Guide for the Perplexed,邓辉 孙鸣译 清华大学出版社)。在敲字的过程中我自己对一些名词对照着两个软件开发方法中的常用概念进行了注解,不当之处,还请大家指正。

很久以前,在一片充满隐喻的土地上,住着一头大象(喻传统开发方法)。很多年来,这头忠实的大象一直都是他所居住村庄主要的食物采集者,并且非常清楚这个村庄需要什么(喻工程前的事先计划性)。他在丛林中修建了一条路(喻最佳实践),这条路总是能指引他找到最好的根茎、蔬菜、坚果和水果等食物(喻项目的功能)。他知道哪种水果用鼻子可以够得着,也知道哪种水果需要鼻子去晃动才能摘取。他很强壮,能够一次带回足够好几天吃的食物,所以他总是预先估计这个村庄的需要(喻典型的项目需求),并提供恰当的供给。他恪尽职守,整个村庄的人都很感激他,并认为他的工作很有价值。

唉!就像生活和寓言中常常发生的那样,情况发生了变化(喻需求变更)。村庄里的厨师(喻项目干系人)想要一些奇特、罕见的原料来烹饪(喻个性化需求)。这些原料大象曾经听说过,但是不在他每天要走的路上(喻传统工程方法不适合涉及的领域)。他还在为存储那些无从需要的食物(喻开始的需求已经过时)疲于奔命,却没有时间去修建新的道路以满足新的需求。村庄里的人渐渐地对这头无法满足他们需求(可以理解为RUP等传统方法不适合网站开发)、越来越气馁的大象失去了耐心。

与此同时,附近村庄有一只猴子(喻敏捷方法)做着和这头大象类似的工作。但是,和这头大象不同,这只敏捷的小猴在这片丛林中快速地穿梭(喻XP等编程方法),采摘它所看到的果实。他只去寻找那些挂得很低的果实(喻无法满足企业级应用)并迅速把它们送回到厨师那里。这只猴子不像大象那样依赖于一条久经考验的道路,他依赖于自己的记忆和本能去找到食物,并且只带回当天所需要的食物(喻迭代编程、每日构建等)。有时,他会跑出去寻找那些日益珍奇的食物(喻新奇的功能,如AJAX功能),偶尔还会迷路(喻新的方法太多)。但事实证明,他的速度和敏捷完全能胜任村庄分派给他的任务。和那头大象一样,他也颇受爱戴(喻在自己的领域内,如Web开发)。

很不幸,这只猴子的生活也发生了变化。他所生活的村庄一天天地扩大起来(喻企业级Web应用)。这只小猴需要满足太多的需求,以至于他总是疲于奔命,努力记住在每个地方的所有需要。他不得不来来回回地跑很多次,因为他没有足够的力量一次运回人们需要的所有东西(喻功能太多)。同样地,这个村庄渐渐对这只猴子失去了耐心,而这只猴子也开始怀疑自己是否能够胜任这项工作。

碰巧有一天,这只疲倦的猴子遇到了那头气馁的大象。这只试图在背负重物的情况下快速奔跑的猴子发现大象背上的筐可以装得下那么多的食物。而大象也被猴子的速度震撼了(喻双方开始正视对方的优点),他能跑得那么远,他能那么轻而易举地拿到大象竭尽全力也无法获得的食物。这两只动物,虽然都以自己的技能而自豪(喻从前的论战),但还是承认了对方在某些方面技高一筹。

大象和猴子认识到一起工作的好处(喻一个控制大的流程,一个处理软件开发细节),于是决定联合起来。猴子利用他的敏捷去满足对于远距离水果的新需求,并让大象带回到他的村庄。大象则把充足的食物运到猴子的村庄去满足那里逐渐增多的需要。虽然他们花了一些时间去找出协作的方法(喻两个不同方法之间的磨合),但是很快他们就能够很好地满足两个村庄的需要了,从此,他们过着快乐的生活,彼此互相信任,从此丰衣足食的村民们又开始看重他们了(喻实用才是第一:))!

本文地址:http://www.nowamagic.net/librarys/veda/detail/538,欢迎访问原出处。


推荐阅读
  • 本文详细介绍了浏览器的同源策略及其重要性,并探讨了多种实现跨域访问的方法。同源策略是浏览器的一项核心安全机制,确保不同源的客户端脚本无法在未经授权的情况下读取或修改其他来源的资源。例如,a.com下的JavaScript代码通过AJAX请求获取b.com的数据将被阻止。 ... [详细]
  • 本文详细介绍了如何使用 HTML 和 CSS 对文件上传按钮进行样式美化,使用户界面更加友好和美观。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 本文探讨了如何通过WebBrowser控件在用户点击输入框时自动显示图片验证码。该过程可能涉及JavaScript事件的触发与响应。 ... [详细]
  • 本文探讨了浏览器的同源策略限制及其对 AJAX 请求的影响,并详细介绍了如何在 Spring Boot 应用中优雅地处理跨域请求,特别是当请求包含自定义 Headers 时的解决方案。 ... [详细]
  • 深入解析ES6至ES8的新特性与应用
    本文详细介绍了自2015年发布的ECMAScript 6.0(简称ES6)以来,JavaScript语言的多项重要更新,旨在帮助开发者更好地理解和利用这些新特性进行复杂应用的开发。 ... [详细]
  • 本文将介绍如何利用Python爬虫技术抓取国内主流在线学习平台的数据,并以51CTO学院为例,进行详细的技术解析和实践操作。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
  • Microsoft即将发布WPF/E的CTP(Community Technology Preview)和SDK,标志着RIA(Rich Internet Application)技术的新里程碑。更多详情及下载链接请参见MSDN官方页面。 ... [详细]
  • ServletContext接口在Java Web开发中扮演着重要角色,它提供了一种方式来获取关于整个Web应用程序的信息。通过ServletContext,开发者可以访问初始化参数、共享数据以及应用资源。 ... [详细]
  • 本文深入探讨网页游戏的开发流程,涵盖从程序框架设计到具体实现的技术细节,旨在为开发者提供全面的指导。 ... [详细]
  • 本文探讨了如何在JavaScript中动态地引用由PHP生成的变量,特别是在循环中变量名随迭代变化的情况。通过示例代码展示了实现这一功能的具体步骤。 ... [详细]
  • AJAX技术允许网页在不重新加载整个页面的情况下进行异步更新,通过向服务器发送请求并接收JSON格式的数据,实现局部内容的动态刷新。 ... [详细]
  • 本文详细探讨了JavaScript中的闭包与柯里化技术,这两者是函数式编程的重要组成部分,对提升代码的灵活性和可维护性具有重要作用。 ... [详细]
  • 探讨在 Vue 框架中遇到的数据更新延迟或失败的问题,并提供解决方案。 ... [详细]
author-avatar
端庄的一白_167
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有