敏捷史话(十五):我发明了敏捷估算扑克牌 —— James Grenning

2021-11-23 09:00:00
敏捷开发社区
转贴:
敏捷开发
68
摘要:James Grenning 是敏捷估算扑克的发明者,也是测试驱动开发的先行者,他把面向对象、极限编程、测试驱动开发等概念带入嵌入式开发的世界。

雪鸟会议


雪鸟会议前夕,James Grenning 在 Object Mentor 与 Robert C. Martin 一同工作,彼时,组织雪鸟会议的 Bob 大叔向 James 发出了邀请。在得知会议地点后,James 毫不犹豫地接受了邀约,并在脑海中踊跃欢呼“我要去滑雪!”毕竟,“雪鸟是世界上最好的滑雪场之一”,没有人会拒绝雪鸟的诱惑。当然,除了滑雪,更吸引他的是,在雪鸟会议中,他能够与曾经共事、合作的 Kent Beck、Ron Jeffries、Martin Fowler、Ward Cunningham等人探讨对软件开发的看法。

不过,他并未觉得这次会议能对自己的工作产生任何有利影响,他也从未预料到这会对软件开发行业产生如此巨大而深远的影响。“我们很确定没有人会在乎这次会议,但至少我们做了一些事情: 找出我们有什么共同点,以及共同点在哪里。”

估算扑克


在一定程度上,《敏捷宣言》是在大家聚在一起找出分歧,再找到共同点的过程中产生的。James 认为,这与估算扑克很相似,二者的共同点是: 一个团队需要在某一部分达成共识

估算扑克的灵感来源于 一次失败的计划会议。当时的参会人员包括作为敏捷教练的 James,以及一个8个人的团队。会议由其中的两位高级工程师主持召开,但在会议进行中,两位工程师对如何构建用户故事展开了反复讨论。在一片混乱的情况下,James 用了半小时甚至一小时的时间才意识到,两人在会议开始时谈论的工时数与 在会议结束时谈论的工时数完全一致,他们只是在争论用什么方法去做。而此时其他参会的六个人由于没有参与讨论、估算,已经昏昏欲睡。正巧,当时 James 手上正好有索引卡片,于是在会议结束中场休息后,他 给每个人都发了卡片,并要求提出某项工作后,所有人只能出牌,不能讲话,以达成一致决定。



James 在 Object Mentor 网站上写下了这个故事,并提出估算扑克。随后,Mike Cohn 发现了这一方法,在未改变使用方式的前提下,介绍了斐波那契数列及其他方法,同时决定将估算扑克在大范围内推广使用。发布后,这副特殊的扑克在程序员中广受欢迎。



估算扑克能通过以牌面朝下的方式隐藏数字,让团队避免“锚定”的认知偏差,提高估算效率。这是一种既能起到群策群力效果又有效避免众口难调造成混乱的好方法, 当然,估算并不只依赖于这一副扑克牌,所以 James 的客户们对估算扑克进行应用推广,由此产生了 风险扑克价值扑克等类型。虽然这两种扑克并未推向市场,但团队想要借鉴的话,实现起来并不困难。

测试驱动开发


1999年,James 开始学习极限编程,从事嵌入式咨询工作。当时一直在为客户编写用例并搭建体系架构的 James 在 Object Mentor 进行了第一次极限编程沉浸式学习,也开始接触一些此前未了解过的事。当他看到当时名为“测试优先于开发”(现在的测试驱动开发)的演示时,他发出惊叹:“哇!我们可以打破对我们没有的东西的依赖。”因此,如果需要构建某个系统,并且处于无法与硬件交互的情况下,仍然可以创建软件,并 通过存根和模拟对象等来开发尚不存在的事物

激动兴奋之余,受到启发的他产生了为做嵌入式开发的程序员介绍测试驱动开发的念头,也开始做敏捷应用于嵌入式软件的演讲,希望 将敏捷介绍给嵌入式开发的 群体。除此之外,James 也出版了一本以测试驱动开发为主题的书籍:《测试驱动的嵌入式 C 语言开发》。
从这颗被点燃的火花开始,再到他把敏捷、测试驱动开发的火花带给更多的嵌入式开发工程师,他就已经意识到,语言是不同的,而且不仅是编程语言,人们相互交流的方式本质上也是不同的,因为他们谈论的是不同的东西。不同的整体拥有不同的世界,所以游走于不同的群体间就可以学到不同群体的知识,比如他通过与 Bob 的合作了解到了许多非嵌入式的知识。不论是面向对象、极限编程还是测试驱动开发,他希望把这些知识带给更多的程序员。

敏捷本身不是目标,而是寻找诚实而高效的方法来交付有价值的产品,这是 James 一直强调的观点。在2011年敏捷宣言十周年的访谈中,他认为自己与十年前的自己相比初心不变,一直拥有自我学习和进步的自主意识,不断地尝试、验证、完善一个又一个想法。所以,敏捷带给 James 的是一种前进的方式,而不是可以在此停滞的目的地。如今又是新的十年走过,通过他不断更新的网站和活跃的动态,我们相信他一直在前进,从未停滞。
联系我们
联系人: 柴老师
电话: +86 185 1045 6582
Email: clientservice@hardenx.cn
地址: 北京市海淀区善缘街1号立方庭1-105