Agile已死, Agility长存
注:本文系作者独立翻译,可以随意转载。如有雷同,纯属巧合。原文地址:http://pragdave.me/blog/2014/03/04/time-to-kill-agile/
P.s. 第一次自己翻译,欢迎批评指正。
Agile Is Dead (Long Live Agility) ( Agile已死,Agility长存)
13年前,我和17个中年白人在Snowbird(译者注:应该是一个开发者社区,此处应该亦是指其承办的一次开发者大会), Utah(美国犹他州)聚到了一起。我们之所以能走到一起,是因为我们对于软件开发有着共同的信仰,并试图找出一种方法来描绘我共同的信仰。
我们用了不到一天的时间搞出了一套核心价值清单,然后我们将这套体系连同一些实践这个体系的清单列表作为《Manifesto for Agile Softwar (敏捷开发宣言)》发布了出来。即:
Individuals and Interactions over Processes and Tools -> 人和交互 优先于过程和工具。
Working Software over Comprehensive Documentation -> 可以工作的软件 优先于求全责备的文档。
Customer Collaboration over Contract Negotiation, and -> 客户协作 优先于合同谈判。
Responding to Change over Following a Plan > 随时应对变化 优先于循规蹈矩。
我对我们所做的事情,不论是过程还是结果,都感到十分自豪。并且我认为这套敏捷开发清单帮助开发人员挣脱了八,九十年代那些浪费和十分枯燥的开发流程。
但是,自从Snowbird大会结束后,我再也没有参加任何和"Agile"相关的会议,没有作为会员加入任何敏捷开发协会,并且没有提供任何有关"Agile"的咨询服务。甚至没有参加10周年纪念庆典。
为什么?因为我认为这些不符合我们的敏捷价值观。举办关于敏捷的会议就像举办芭蕾舞会,而围绕着这四条核心价值组成的产业小组在我看来更像是组建了一个贸易联盟。
并且,不幸的是,我想,时间已经证明了我是对的。"Agile"这个词已经搅乱了人心,但实际上并没有产生多大的意义,而敏捷社区看起来更像是咨询师和小商贩们叫卖服务和产品的市场。
所以,我认为是时候让"Agile"这个词退休了。
我想不会有人反对禁用这个词当它已经被当成一个名词来使用。这是一个明显的错误。"Do Agile Right"和"Agile for Dummies"就是无数英文语法错误中的两个。它们毫无意义。"Agile"不是一个名词,这是一个形容词,它必须用来修饰某些东西。"Do Agile Right"就像是在说"Do Orange Right"。
但是,除了语法错误以外,还有一个严重的问题。自从敏捷宣言流行起来之后,所有人(例如为了支持某个论点,为了某个宣传,为了销售某些商品)都把"Agile"一词作为宣传点。它已经成为一个被用来促进销售的市场营销的专业术语,就像"eco"和"natural"一样。如此滥用这个单词已使它毫无意义,当它成为一个商标时,它的作用已经结束了。
这伤害了每一个人,但我更在意的是这伤害了开发人员。写代码并不容易,开发人员自然会寻找能帮助他们完成更有效交付的东西。我仍然坚信,坚持敏捷的核心价值并付诸实践将会对开发过程提供帮助。
但是自从敏捷一词已经失去意义,开发人员不能再将它作为指导准则来找出到底什么在开发过程中是有用的。我们或许简单地在世界范围内把敏捷一词替换成空格(译者注:这样其他人就无法使用”“空白字符串来交流,也就无法被滥用。我是这么理解的。:P)。
Moving to the Right 回到正轨
让我们再看一下这4条核心价值:
Individuals and Interactions over Processes and Tools
Working Software over Comprehensive Documentation
Customer Collaboration over Contract Negotiation, and
Responding to Change over Following a Plan
左边的短语代表了一个理念 -> 如果能够在左侧或右侧的开发流程中选择的话,想要敏捷开发软件的人员更倾向于左侧的方式。
现在,让我们看一下那些说自己能让你开始敏捷起来的咨询师和小商贩们。问问你自己,他们在 左-右 这条轴上到底处在什么位置。我猜你会发现他们会像你建议很多工具(提供更多文档式的建议以取悦项目经理)并且制定更多计划远远超出了敏捷所需的一个白板和一些粘到白板上的做记录用的磁贴,不论是过程还是工具都很繁重。
如果你也发现了这些,那么这更加证明了"agile"一词已经腐败堕落。
(当然,这些咨询师或许只凭一两天的培训课程就能赚很多钱。但我不行,所以他们是成功的,而我不是,某种角度来讲,我所言可能是错的。)
Back to the Basics 回归本质
下面讲述如何以敏捷方法来做一些事:
做什么:
- 搞清楚你在什么位置
- 向你的目标迈出一小步
- 在这个过程中,基于你所学到的东西重新整理你的认知
- 重复以上步骤
怎么做:
在同一个结果面前,当你面对两条或更多可以让你选择的路时,选择那条将来更容易改变的。(译者注:此处不是说你选择的路将来发生变化,而是万一出现问题,你更容易换条路走。)
这就是你所仅仅需要做的。上面这四条基本原则和一条实践路线已经包含了如何有效的进行软件开发所需要知道的一切。当然,这个过程蕴含了大量的思考,并需要将整个基本流程迭代无数次,很多时候,你所需要关注的甚至包括了从变量命名到持续交付过程中的所有事情。但是,记住,任何人提出更高级,复杂的东西,那他只是想向你推销,骗取你的钱财罢了。
这篇文章所提到的都是当务之急--它们用一些动词来告诉我们做什么和怎么做。
也正是这些促使我在此给出我的建议。
让我们放弃使用那些不做实事的人所使用的词"agile"。
相反,让我使用另外一个单词来描述我们所在做的事。
Let’s develop with agility (让我们"敏杰"开发)
你不是一个敏捷程序员--而是一个写程序很敏捷的程序员。
你不是在一个敏捷团队工作--而是你的团队表现的很敏捷。
你不是使用敏捷工具--而是你使用工具让你更加敏捷。
人们很容易把"agile"一词用到任何地方,但"agiility"不易被胡乱挪用。
这一点很重要--标签是可以进行买卖的。参加一个简短的培训,瞬间你就可以给你的职位贴上敏捷的标签。但是你不能买到经验--你只能学到经验。
And let’s protect our investment (让我们保护我们的付出)
归根结底,我们做什么,怎么做远比我们怎么称呼它更重要。但是一个好的词语帮助我们更有效的沟通。
我们已经失去了"agile"一词。让我们尝试使用"agility"。让我们保住它的真谛,别让那些别用用心的人窃取敏捷的灵魂思想,转手再把它卖给我们。
Agile已死, Agility长存的更多相关文章
- wp已死,metro是罪魁祸首!
1.这篇文章肯定会有类似这样的评论:“我就是喜欢wp,我就是喜欢metro,我就是软粉“等类似的信仰论者发表的评论. 2.2014年我写过一篇文章,windows phone如何才能在中国翻身? 我现 ...
- 泰泽新闻:英特尔三星双否认泰泽Tizen系统已死
7月8日 据媒体TizenExperts报道,关于“Tizen系统跳票”的传闻已经遭到了英特尔和三星否认. 此前传闻三星自行研制的智能手机Tizen操作系统流产,但如今已经遭到了官方的否认. 英特尔三 ...
- Android首席设计师宣称移动概念已死,开发人员应该面向屏幕编写应用而非移动
腾讯科技对Android首席设计师Duarte"移动已死"訪谈内容的翻译错得离谱,被到处转载,误人视听. 而要真正理解Duarte所想表达的含义,须要深入了解互联网前沿设计理念以及 ...
- MVC模式已死
MVC模式:Model模型 View试图 Control控制器,是目前主流模式,被当作服务器软件入门基本模式学习和掌握,主流框架Struts 1/2 JSF Wicket基本都顺理成章支持MVC模式. ...
- 王垠:Lisp 已死,Lisp 万岁!
王垠:Lisp 已死,Lisp 万岁!_IT新闻_博客园 王垠:Lisp 已死,Lisp 万岁!
- JVM学习记录-对象已死吗
前言 先来回顾一下,在jvm运行时数据区,分为两部分,一个部分是线程共享区,主要包括堆和方法区,另一部是线程私有区分包括本地方法栈,虚拟机栈和程序计数器.在线程私有部分的三个区域是随着线程生和灭的.栈 ...
- [转载]致创业者:APP已死 服务永生
前几日,有位创业者和我讲他在带领团队做一个将爱踢球的人集中在一起的App,我告诉他你的创业方向错了.原因在于你的目的是要为爱踢球的人提供服务,而你现在却在竭尽全力的做App,你应该做的是设计你为爱踢球 ...
- Jeff Atwood:软件工程已死?
原文作者:Jeff Atwood 2009年7月,Tom DeMarco在<IEEE Software>杂志上发表了一篇论文,题为"Software Engineering: A ...
- NLP领域的ImageNet时代到来:词嵌入「已死」,语言模型当立
http://3g.163.com/all/article/DM995J240511AQHO.html 选自the Gradient 作者:Sebastian Ruder 机器之心编译 计算机视觉领域 ...
随机推荐
- 自定义扩展Compare比较方法
public static int Compare<T, V>(this T x, T y, Func<T, V> func) { return Comparer<V&g ...
- jQuery-laye插件实现 弹框编辑,异步验证,form验证提交
代码中用到了 jQuery的ajax异步处理,each()循环,submit()页面验证提交form表单,prepend()追加标签,laye插件的弹框效果(如有其它弹框效果可参考官网:http:// ...
- 子查询,用户管理,pymysql使用
当我们的一条记录 分散不同的表中时,就需要进行多表查询例如 一对一 一对多 多对多 1.笛卡尔积查询 意思就是将两个表中的所有数据 全部关联在一起例如A表有两条 B表有三条 一共有6条会产生大量的错误 ...
- Docker使用入门
docker images 查看本地镜像 docker ps -a 查询容器 docker ps -l 查询最近使用容器 docker rm CONTAINER_ID 删除容器 docker rm ...
- linux c 调用子文件函数
今天在学习初级linux c的时候遇到了如下问题:通过主函数调用同路径下的子文件函数调用失败.博主是这样一一解决的: 首先:hello.c: hello.c: #include<bool.c&g ...
- issubclasss/type/isinstance/callable/super
issubclass() : 方法用于判断第一个参数是否是第二个参数的子子孙孙类. 语法:issubclass(sub, super) 检查sub类是否是 super 类的派生类 class A: p ...
- 统计大写字母个数&压缩和去重(过滤)
找出给定字符串中大写字符(即'A'-'Z')的个数 接口说明 原型:int CalcCapital(String str); 返回值:int 知识点 字符串 运行时间限制 10M 内存限制 128 输 ...
- laravel5.5事件广播系统
目录 1. 定义广播事件 1.1 广播名称 1.2 广播数据 1.3 广播队列 1.4 广播条件 2. 频道授权 2.1 定义授权路由 2.2 定义授权回调 3. 对事件进行广播 3.1 可以使用ev ...
- 使用Unity做项目的时候,一些好的建议
内容来自这个网站http://devmag.org.za/2012/07/12/50-tips-for-working-with-unity-best-practices/ ,我选取了目前我看得懂的一 ...
- 《Cracking the Coding Interview》——第12章:测试——题目4
2014-04-25 00:35 题目:没有专门的测试工具,你要如何对一个网页进行压力测试? 解法:拼手速,拼电脑数量呗.快捷键+复制粘贴网址,狂搞一番.话说回来,有脚本语言的情况下,直接写个脚本来模 ...