本文是《敏捷宣言》10 周年系列纪念文章之一,该系列文章将陆续在InfoQ 上发表。
敏捷——十年发展史,这在二十世纪六十年代早期的黑客时代会是个不错的标题,那时涌现了大量的过程管理方法,但从九十年代早期开始,这些方法就为敏捷所不齿。然而返朴归真的做法在二十世纪八十年代中期就已经开始了,那时Smalltalk、Objective-C 和C++ 已经为面向对象编程做好了准备。拟人化编程、面向对象的图形用户界面、终端用户思维模型和易于变更就是口号。在敏捷发展地够好之前,那些就是敏捷。
从二十世纪六十年代的黑客文化到八十年代的面向对象整整有二十年。快速发展二十多年后,我们有了敏捷宣言。二十年对于人类而言是一代人,而相对于互联网的发展速度而言,二十年则是无比漫长的。这对一个技术更新周期为3 至7 年的行业来说有点古怪。 我们稍后再考虑这一时间常数。今天,我们在又一个20 年周期中,已经走过了10 年——位于令人不安的20 年周期的中途。这时进行回顾有点不靠谱但却很有意思。
与多数标志性出版物一样,敏捷宣言是对所在时代的通行做法的认可,而不是对未来的设想。几乎历史上的每份重要文件都是对现状的认可,而不是孕育革命。例如,英国的大宪章仅仅是记录了十二世纪浮现出的公共社会实践。仅仅是让约翰国王正式认可了新的现实。书面文化往往滞后于口头文化(正如我们从敏捷需求中所了解的)。至于敏捷宣言,它记录了八至十年间Scrum 的实践、 Borland 公司QPW 十年的实践和世界范围内许多领先的软件项目中长期实践的方法。事实上,这十七人的“男童唱诗班”为社区提供了良好服务。而他们甚至还未获得任何许可。那样的发展情形并不是他们的错。
也许敏捷宣言的关键价值不在于它的洞察力、独创性,当然也不是它的预见性,而是它与编程平民主义间的联系。敏捷成了应用广泛的主要工具和主流变化。它用库恩式的范式转变击溃了不时出现的缺乏想象力的、不合理的抵制。从这个意义上说,它确实是个宣言。它是一个危险的文件。敏捷宣言的每一条都是一分为二的,提炼一下那四条宣言,它们只涉及两个原则:自组织及支持自组织的反馈。自组织确实与二十世纪六十年代流行的商业文化产生了摩擦。
敏捷是项平民运动的一个标志是没有出现多少公众的阻力。敏捷宣言很少被用于针对任何方法或是语言进行攻击。极限编程是敏捷。Scrum 是敏捷。RUP 是敏捷。Google 在“做敏捷”,微软和IBM 也在“做敏捷”。
敏捷宣言不仅是变革方向的反映,也是变革自身的需要。这使得敏捷宣言对于潜在的浮夸的诋毁者来说难以下手。而最大的顺风之助是二十世纪六十年代的进取精神。没人敢站在变革的对立面。敏捷的自组织和反馈的隐藏趋势可回溯至反体制的二十世纪六十年代——维持着黑客道与敏捷道之间对象运动反体制思考的价值观。
然而,与多数可作为标志的标签、宣言和其他记录下来的理想一样,其所鼓吹的实践通常与事实擦肩而过。“敏捷”成为了众多毫无关联的实践的标签,成了一个使人能为他们钟爱的实践辩护的收容所。结对编程——自从Lister 在二十世纪六十年代谈到它后——现在成了社交礼节。1986 年出现的Boehm 的螺旋模型变为了sprint 和episode。我们重塑了团队。把所有观点放到台面上讨论的旧的JAD 观点作为共同所有权重新浮出水面。
在一些地方,敏捷原则被一群口头拥护者善意的挟持,并套上奥威尔式的枷锁。我们有测试脚本和jUnit,这胜过了个体和交互。他们所撰写的敏捷篇章,更多的关注于编写全面测试的必要性,而不是如何编写良好的可工作的代码;只有Bob 大叔和后来的一些朋友赶来援救。(而在堆积如山的探讨测试的文献中,只有极少的部分与良好测试的构成有关。)至于拥抱变化,难道你还敢质疑极限编程实践,还敢在Scrum 框架中找个地方提出改进建议。自由即奴役。(而另一方面,在新的CMMI 实践中加入了一个过程。)
除此之外,敏捷成了思考的替代品。敏捷宣言说什么就做什么。我永远不会忘记OOPSLA 周年祭上的黑纱。(如今,它们似乎变成了更单纯更漂亮的编织手环。)敏捷与其说是一个回答不如说是一个反应—— 一个对在二十世纪六十年代至七十年代间出现的过度的管理实践的反应,并再次回到八十年代的CASE 工具和方法集之中。这是个暴力行为。正如Mary Poppendieck 所预想的,我们的学科的运动就像是钟摆,很少会处于中间位置。因此更激进(创造个新词)的程序员尽可能地把钟摆冲击向某一端。在二十世纪八十年代的方法论全神贯注于规划,推理出思想并隐藏在其后进行规划,敏捷世界会对除实践以外的任何事表示不满。敏捷宣言中的每个条目都与实践相关。这些条目从根本上都与我们在精益中发现的思想无关。仅仅是迈出了规划- 执行- 核查- 行动的业务循环(译注:即戴明环)的第一步。无知即力量。谚语中的婴儿和洗澡水在脑中浮现出来。(译注:谚语——别把婴儿连洗澡水一起倒掉。)
为什么我们要在20 年的周期内寻找这一自由?早在2004 年我的学生Julie Beata 研究了几代人流行趋势中的模式。她的结论是,流行遵循20 年的世代周期,因为有足够多的孩子与父母一起购物,受到怀旧影响而购物。敏捷有没有让你老板回想起二十世纪八十年代面向对象早期的崇高理想?正如上一代软件开发的岁月里面向对象的早期拥护者对软件开发准方法论的渴求。
周期的长度也值得注意。多数计算潮流跟随着技术周期:例如,从Ada 到C++ 再到Java,或是Oracle、Sybase、DB2 和MySQL。 这些周期很少与基础产业的价值或发展模式在同一层面。或许值得注意的是,敏捷预示着一个价值体系。价值体系变化缓慢:以世代更替的速度变化。
未来会怎样?很可能会有更多基于对社会历程的良好研究和推论的对话,而且还会有装模作样的争论。这就是我所担忧的命运,学科不是学科,科学不是科学,艺术不是艺术。小组辩论是有价值的,下一个宣言或许会如期出现,发动一场针对愚钝的战争:下一次钟摆猛然摆动。哦,好吧。战争即和平。
关于作者
Jim (“Cope”) Coplien 是组织模式之父,软件模式学科的创立者之一,二十世纪九十年代早期的面向对象设计实践的先驱,软件设计和组织改进领域广受欢迎的权威、作家和培训师。作为敏捷软件开发的创立者和倡议者,Cope 的关注点之一是广泛地根除机能障碍,而不是单纯地实施那些看似有益实则有害的诸如TDD 和现场客户等软件实践。他也积极地领导着敏捷架构与Scrum 社区的结合。
查看英文原文: Agile 10 Years On
感谢崔康对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。
评论