极限编程,一次反思!
本文的作者Robert C. Martin,也就是大名大名鼎鼎的“uncle bob”
在我手里的是一本很薄的白皮书,14年前,它颠覆了整个软件世界。这本薄书就是:《Extreme Programming Explained》,副标题是:拥抱变化。作者是Kent Beck,出版于1999年。
这本书不到200页,很小。字体印刷的很大,而且留白很多。撰写风格很随意,通俗易懂。章节很短。里面提出的概念很简单。
这本书的思想犹如一次地震,而且震撼至今仍无减弱迹象。
第十章,位于53页,陈列了12条软件开发实践指导,它让软件业陷入了大论战;并催生了一次革命,由此改变了我们软件开发过程的各个方面。这些实践方法是:
- 计划游戏:如今的SCRUM敏捷方法论的原型。核心概念是拆分软件开发任务,排优先级,迭代式增量开发。
- 小规模发布:主要思想是软件发布/部署应该提高频度,增量发布/部署。
- 简单设计:是指让系统保持越简单越好——无论将来的变化会让我们如何担忧。
- 测试:是指程序员,甚至客户,应该编写自动化测试程序,来验证产品代码是否是按设计的方式运行。如今我们把它称作测试驱动开发(TDD)和确认测试驱动开发(ATDD)。
- 重构:是指软件的内部结构可以、并且应该做持续的改进。
- 结队编程:是说团队成员如果各自独立工作就不能称之为团队。团队成员必须有规律的合作——在键盘上。这样,他们能充分分享团队其他成员应该知道的知识。
- 集体所有制:是指代码归团队共有,不属于个人。
- 每周工作40小时:是说经常加班的团队是失败的团队。
- 现场客户:是指来自业务方、负责需求的人,必须有准备的全程和开发团队保持畅通交流。
- 编码标准:是指开发团队要采用一种固定的代码风格,用来提高代码整洁和方便交流。
引起争议?
很奇怪,不是吗?这些看起来似乎没有任何争议呀。但在14年前,这些思想普遍受人质疑。事实上,它们是如此的受人反对,以至于有人专门出版书籍来反驳这些实践方法如何不可行,并斥责这些倡导者为乌托邦、骗钱者、从未写过一行代码的蠢货…..
哦,抱歉,我不应该让这些过去的事情控制我的情绪….毕竟,他们都消失了,而我仍在这里。
看一下这12条实践指导,哪一个你没用过?你们大部分人,我亲爱的读者,很可能每天都在实践着大部分这些原则。夸张的说,它们已经无处不在,保守的说,它们现在已经是主流。越来越多的没有采用这些实践方法的团队正在试图拥抱它们。这些实践方法成为了一种目标,一种愿望,而不是当初被人谩骂的异教。
风云变幻
这14年来事情发展的有些意外。敏捷开发运动——在极限编程大讨论中诞生的运动——迅速爆红,随后被一些什么身份都有、唯独不是程序员的项目经理们视为圣经。我们看到了这场运动的诞生,广泛接受,以及可以预见到的理想与现实的落差。我们看到了人们采纳“计划游戏(planning game)”方法(例如SCRUM),但却忽略了其它11个实践方法;于是我们看到了实施中的失败——这被Martin Fowler称之为气虚的Scrum。由于理论和实践的分裂,我们爆发了各种的口水仗,导致Kanban,Lean,以及其它新名词相互竞争。我们看到了软件工艺运动的成长,也看到了敏捷思想的淡化和蜕变腐蚀。
但是,尽管有人在炒作,有人失望的离去,这12条软件开发实践指导却从未离去。有些名称上有了小改动。每周工作40小时变成了可持续性比率(Sustainable Rate)。测试变成了测试驱动开发(TDD)。比喻(Metaphor)变成了DDD。小规模发布编程了持续集成和持续部署。尽管有这些变化,这些实践方法仍然基本保留着它们14年前第一次被写出来时的主旨。
我们也看见了极限编程这个词慢慢完全淡出了人们的视野,不再被人使用。现在只有为数不多的人知道这个术语。有一些人还在用它的简称XP;但对大多数人来说,这个词已经蒸发殆尽了。我已经听不到有团队把他们的编程方法描述为极限编程——即使他们是完整按照这12种指导实践的。名称变了,实践方法没变。这些实践方法论永存。
争议,炒作,恐吓,大话,唱衰。这种乱象一遍又一遍重演。混杂着人们的贪婪,热情和骄傲。不管怎样,这些实践方法论永存。
坚实的价值基础
我是这些实践方法论的信徒,因为我知道它们有着坚实的价值基础做支撑。Kent Beck在他的书里的29页第七章里把这些价值描述为:
- 交流
- 简化
- 反馈
- 鼓励
我想去解释为什么我们的软件开发需要这些;但我想它们已经不言自明了。没有哪个软件行业的人会拒绝其中的任何一条。没人哪个软件人不在努力将这些价值体现在他们的工作中。它们是软件开发艺术的核心价值。
成功
极限编程是成功的!它比那些最具幻想精神的拥护者的想象里的还要成功。因为它经受住了考验。因为它甚至比它自己的名字活的更长久。
极限编程的成功类似于结构化编程的成功。没有人还会去想结构化编程——他们从来都是使用这种编程方式。没有人再去想极限编程,我们一直都在这样实践着。
这才叫成功!真正的成功是一种身形不在,但它的精神已经融入到我们每个人的日常生活中的成功。
回顾
今天,让我们抽出一点时间回顾一下1999年。那一年,Kent Beck写出了一本旷世之作。一本改变一切的著作。请记住:极限编程,并且要知道,它正是我们如今的人平常认为的“优秀软件开发实践方法”的核心。