XP 2000 大会
把一群极客带到波埃塔美丽的海滩,他们会做什么?站在那里谈论软件!
6 月下旬,一百多人聚集在地中海的撒丁岛,参加了 XP2000 大会,讨论极限编程 (XP) 和其他灵活方法。
2000 年 7 月 7 日
撒丁岛并不是举办国际软件大会的显而易见的选择。它有点难到达,而且它的海滩的乐趣对那些整天呆在室内参加会议的人来说是浪费的。重要的是,主人热情,食物很棒,会议也相当不错。
会议规模适中。程序主席 Michele Marchesi 和他的团队预计会有大约 60 人参加,但最终来了 160 人。所以人数足够多,让整个活动充满活力,但也不至于多到让你无法轻松地与其他人交谈。预期的 XP 专家都参加了,包括 Ron Jeffries、Robert Martin、Don Wells,当然还有 Kent Beck。还有一些与 XP 关系不太直接的人,比如 Erich Gamma、Dave Thomas、Ralph Johnson 和 Alistair Cockburn。
会议第一天是教程,随后是两天论文、小组讨论和邀请演讲。
四个战争故事
会议的第一天正式开始,有四个邀请演讲,所有演讲都谈论了使用自适应流程的项目和团队,尽管其中只有一个项目完全使用 XP。当然,那个项目就是经常被提到的克莱斯勒薪资项目,被称为 C3。Ron Jeffries 上台谈论了这个项目,并详细描述了它的成功之处,以及导致它被取消的原因。总之,该项目在最初的一年左右表现出色,交付了一个系统,该系统至今仍在每月为克莱斯勒大约 10,000 名薪资人员发放工资。后来,问题逐渐出现。Ron 将这些问题归结为
- 薪资部门(使用该系统)和 IS 部门(支付费用)之间的目标不一致
- 团队与薪资部门和 IS 部门的管理层之间的沟通中断
Robert Martin 接着发言,他的主题是为一家教育测试公司开发的项目。该项目由 Robert、Jim Newkirk 和一些同事在几年时间里完成。需求非常模糊,而且容易发生变化,因此他们通过短迭代(一周)和与客户的频繁沟通来解决这个问题。虽然他们没有使用 XP 的全部实践,但他们发现关键要素使原本可能很棘手的情况取得了成功,而且这种紧密的迭代即使在 C++ 环境中也能奏效。这段经历是他们公司 Object Mentor 去年热烈拥抱 XP 的最佳例证。
Ralph Johnson 的示例开发是 Refactoring Browser,这个著名的 Smalltalk 工具是重构工具潜力的象征。它作为大学博士研究的一部分开发,同样使用了一些 XP 实践来开发该工具。同样,紧密的迭代和对设计的演进式方法至关重要,积极使用重构进行设计也是如此。
最后一个例子是 Dave Thomas,Object Technology International (OTI) 的创始人。OTI 以许多要求苛刻的早期面向对象项目而闻名,这些项目在嵌入式系统中使用 Smalltalk 和虚拟机技术。他强调了以人为本、自动化测试,以及再次强调紧密的迭代。与会议上的许多人相反,他强调,你可以在固定价格项目中使用这些技术。
这些演讲的累积效应是,有很多方法可以成功地使用轻量级方法。与其他方法一样,轻量级方法不是万能药,但它们提供了可以指导人们走向成功的原则。
XP 会统一吗?
一个反复出现的主题是 XP 与 Rational Unified Process 之间的关系。许多人认为这两个方法需要更加紧密地结合在一起,原因有很多。Dave Thomas 报告说,Ivar Jacobson 非常希望看到 RUP 拥抱 XP,实际上将 XP 作为 RUP 的一个实例。Robert Martin 采取了另一种策略:如何让 XP 看起来像 RUP,以满足那些坚持让你使用 RUP 的老板?Robert 在与 Grady Booch 和 Jim Newkirk 合作编写 Booch 经典的 OO 设计书籍的第三版时,已经很好地展示了如何做到这一点。他还宣布,他已受 Rational 委托,在官方的 Rational Unified Process 文档中加入一些内容,以确保 XP 可以成为 RUP 的一个实例。
这里我们看到了两个问题:XP 和 RUP 是否可以结合在一起,如果可以,是否可取?Robert 的方法,加上 Ivar 的愿望,似乎让这种结合只是时间问题。如果 RUP 存在,那么 XP 肯定也在菜单上。可取性是另一回事。似乎大多数 XP 支持者都欢迎这种方法,因为它可以让人们更容易地在行业中采用 XP。然而,人们担心使用 RUP-XP 会稀释 XP,导致人们错过重要的实践。
在我看来,这没什么区别。没有什么能阻止 RUP 包含 XP,而且部分使用 XP 的问题在 RUP 中和不在 RUP 中是一样的。最终,最大的问题围绕着人。自适应流程本质上是以人为本的,它们在将人视为抽象资源的环境中根本行不通。无论 XP 是在 RUP 的旗帜下被采用,都不会影响这个更重要的议题。
开放的心态
阅读互联网上关于 XP 的许多帖子,你经常会强烈地感受到一群狂热者,他们反对任何偏离唯一正确 XP 方式的行为。这次会议最棒的一点是,狂热情绪都被留在了家里。相反,我看到的是一个以 XP 主题为中心的会议,但没有试图过度推销特定的 XP 咒语。
主题更多的是,虽然 XP 为软件流程提供了良好的基础,但变体是允许的,也是可以接受的。会议上大多数人充其量只是 XP 的部分采用者,会议主题允许进行大量演讲,这些演讲只关注 XP 的特定方面:重构、测试、故事收集等等。
我和 Dave Thomas 一样,非常高兴看到这种开放性。XP 的态度帮助它吸引了人们的注意,但也引起了抵触。我发现它的实践非常有价值,但我不是那种将整个方法视为一组严格规则来遵循的人。应该选择方法并对其进行调整,以适应使用它们的人,而不是相反。
新的方向
会议的最后一个小组讨论并不令人意外:不可避免地要讨论如何将 XP 应用于软件行业。小组讨论的主题是,XP 就像任何其他试图在商业世界中发展的新技术一样。对许多人来说,问题是如何在他们自己的组织中使用 XP 或部分使用 XP。即使与会者想使用它,他们能说服他们的老板让他们使用吗?
我认为这有点偏离了重点。自适应方法的一个重要主题是,它们将技术责任赋予技术人员,技术人员应该做出技术决策。问题不在于公司是否允许使用 XP,而在于公司是否允许技术人员做出技术决策。如果没有这一点,XP 的问题就无关紧要了。如果你的公司不是这样,问题就变成了你是否能够改变你的公司。
如果这种改变不可能实现,那么你必须质疑你为什么要留在那里。用我在一个小组讨论中脱口而出的一句话来说:“如果你不能改变你的组织,那就改变你的组织!” 这不仅仅是为 Thoughtworks 招聘的宣传(虽然我们总是很高兴从糟糕的公司招募优秀的人才),它也是对软件专业人士的呼吁,让他们记住,最终,没有人比你自己更负责你的职业生涯,而且在这个市场上,没有时间对你的工作感到不满意。
杰克的观点
(由杰克·博尔斯提供)
XP2000 已经过去,它之所以非凡,不在于主题,而在于讨论和与会者的质量。正如我们的同事 Foemmel 可以告诉你(关于 XMLOne),一个主题的第一次会议可能会有很多营销和挥舞旗帜。考虑到这个主题的极端性质,我预计会有很多后者,但我很高兴地失望了。除了 Robert Martin 的“约柜”演讲,几乎没有营销;>
人群中挤满了当前和前任 Smalltalk 程序员,现在他们主要在 Java 中工作。还有一些电信人员,他们主要使用 C 语言工作。与这两组人交谈后,我明白了什么吸引他们使用 XP。后者习惯于协作环境。当工作环境也是系统时,你倾向于测试你的工作,与其他团队成员协作和沟通,使用相同的镜像。电信人员有非常紧张的日程安排,难以找到需要隔离的错误,而且低占用空间需要仔细的编码标准。
将这些群体联系在一起的是,在会议和其他对话中反复出现的是,在开发过程中的每个人之间进行良好沟通的绝对必要性。XP 的所有 12 个实践都明确地促进了沟通。有些是在开发人员之间,有些是在开发人员和客户之间,有些是在客户之间。根据那些已经拥抱 XP 的人来说,真正的收益是,当所有流程都运行起来时,沟通带来的改进将大于各部分的线性总和。
我想到的一件事是,XP 的 12 个实践可以分为两组。第一组包含个人实践,这些实践(很大程度上)不依赖于其他实践才能执行。这些包括测试、重构、简单设计,以及在较小程度上,结对编程、合理的作息时间和编码标准。第二组需要整个团队:小版本发布、持续集成、计划游戏、现场客户、集体所有权。开发人员没有理由不能个人使用这些个人实践。树立一个好榜样,无论是测试你的代码还是重构,都倾向于影响他人。轶事证据表明,XP 的无声渗透已经成功地被使用。
在试图改变团队实践时,这种方法的效果较差。尤其是那些涉及开发团队以外的团队的实践。为什么呢?个人实践,主要针对开发人员,是众所周知的最佳实践,我们本来就应该这样做。团队导向的实践要求客户和经理做一些他们感到不舒服的事情,这些事情没有得到验证,而且需要他们放弃对控制权的感知(即使他们从未真正拥有控制权。例如,项目进度)。
让每个人都参与到这个过程中是一个真正的挑战。关于如何说服人们尝试它,尤其是管理层和客户,有很多的担心。Martin Fowler 说了好几次双关语,如果你的组织没有按照你认为应该的方式运作,你应该“改变你的组织”。这到底是意味着改变你的组织运作方式,还是改变你工作的组织,留给读者自己去思考。
但这并不能掩盖 XP 文学和传说中一个明显的漏洞,那就是如何让客户和经理“拥抱变化”。希望在 XP2001 之前这种情况会改变。
重大修订
2000 年 7 月 7 日:首次发布