Fred George访谈录:关于敏捷开发的精彩见解

  关注敏捷开发领域的程序员,对Fred George并不陌生,他是有近40年经验的国际敏捷领域大师级专家、咨询师、架构师。2011年3月中旬,他再次来华访问。值此良机,记者采访了Fred George,让我们一起分享他关于敏捷开发的精彩见解。

  记者:很多人为了编写易变更的代码,在采用敏捷时,抛弃许多习惯用法,由你的经验出发,这样做是否属于重造轮子?

  Fred George:这一行为实际是从传统编程转向面向对象编程。我目前的编程方式也有所不同,并且这个新方式与敏捷方式是兼容的。比如我曾经写过大的Java应用程序,那里面平均一个方法只有不到3行的实际代码,平均一个类使用不到25行的实际代码。我也曾经用有1400个类的新系统来替换只有72个Java类的系统。这只是不同风格的编程方式罢了。

  因此,如果你打算写大的类和大的方法时,你会发现它们将很难被改变,这也往往会阻碍敏捷程序的进展,让程序员感到沮丧,导致项目失败。如果你写小的类,每个类只做一件事情,并且不允许其他的类插手这一事情,那么程序修改起来就会变得更加容易。任何变动都不会触及其他类,它们将在修改中完好如初。

  记者:敏捷开发者可能这样想,工具不能让你变得敏捷(尽管有所帮助),管理体系也不能让你变得敏捷(也会有所帮助)。敏捷的成功,植根于士气高涨、充分授权的工作者身上,是否体现了敏捷的实质?

  Fred George:对,完全正确。敏捷并不是关于工具或者管理的,而是关于程序员在做他们认为正确的事情。我最近开始探讨一些敏捷中必要的信任转移的话题。传统的思路是,客户提出他们想要的,一大群BA抓住这些要求进行细化,随后PM将其分成小任务,分配给各小组,小组长再进行进一步划分。在此过程中,客户和程序员之间经历了多重分离。客户的零散需求可以被程序员一一满足,但是客户本人却始终不能与程序员沟通!

  敏捷尝试着在客户与程序员之间建立持续的对话。在双方精彩观点双向流动的过程中,信任关系也确立起来了。然后,正如您所说的士气高涨、充分授权的程序员就开始理解问题的实质,并为客户提供快速、持续的解决方案。

  记者:如能得到准确的数据支持,敏捷实施能够更好地开展下去,请问如何量化敏捷方法的实施?另外,敏捷实践下的程序员工作指标又将如何衡量?

  Fred George:我过去常探讨关于如何衡量一名程序员的问题。很多衡量技巧并不是与客户价值相关联的,因而相当复杂。敏捷技巧中的结对编程,使这个问题变得更加复杂。再加上敏捷管理方法,往往会将最困难的问题分配给最好的程序员,将最简单的问题交给新手。这样看来,什么衡量法才能奏效呢?

  如果你确实想要知道一名程序员的价值,去问问跟他合作的其他人的意见吧。观察伙伴对待他的态度。最好的程序员就是那种人人都抢着跟他搭配的程序员,反之,人人避而远之的那位就是你应该抛弃的对象了。谁承担了难度最大的卡片并且准时交付任务?谁是其他程序员寻求帮助的对象?通过细致的观察,对一个最好的程序员的判断结果就是显而易见了。尽管去问你的团队吧!

  记者:TDD被很多敏捷开发者奉为圭璧,但也有很多开发者避之唯恐不及,请问您如何看待之中的差别?此外,测试真的能保证敏捷的实施成功吗?

  Fred George:TDD是敏捷的奠基石,尤其对新的敏捷团队来说,更是如此。如果有团队避开了它,那可能是没能真正理解它的价值。

  写测试代码首先达到了以下几个目标。第一,它保证了你已做好写代码的准备了。如果你心中没有计划的话,很难写出测试代码来。反之,如果你写不出测试代码来,可能是你做的计划还不够。第二,最好的代码应该是那种设计出来为其他代码所用的。

  而测试代码则成为此代码的第一使用者,并且通常能带来清晰的界面。第三,测试能告诉你什么时候该停止写代码。程序有时候很容易被写过了头,也就是说,为了解决可能的未知情景,很可能写出来的代码超出实际需求。这不仅会耗费过多时间,还会产生过多冗余代码,也可能会带来更多漏洞,这都是我们不希望看到的。最后,一大堆自动形成的测试能告知你何时破坏了哪些原有代码。

  TDD有如此多的优点,为何仍有些团队不愿意采用呢?通常来说,这种团队可能是没有足够的时间。殊不知,这种团队会写过多的代码,产生更多难于发现的漏洞,生成繁复的界面。这种额外的代价是看不见的,相比之下,TDD显然更经济。

  对于新团队来说,他们通常对TDD持怀疑态度。但是当他们亲眼看见我使用它在同等时间内写出了比他们多三倍的代码时,他们开始考虑,然后尝试使用,最后,基本再没有抛弃过它。

  TDD不能保证成功,但是缺少它却往往能导致失败。

  记者:对于未来几年敏捷开发的发展,您希望看到哪些新方向?有何建议?

  Fred George:我提倡无政府主义编程方式。它支持敏捷方法的所有原则,但是提倡抛弃许多常见的操作实践。我认为它是自然而然的、敏捷和精益方法的进化,虽然有些同事喜欢称它为后敏捷方式。它也是Facebook所采用的模式,并取得了成功。

  简单说来,这个方式就是要求企业为它们的系统设置一些目标,然后在无人监控的情况下,由程序员实施完成所有细节。错误当然不可避免,但是程序进展的奇妙节奏与当今网络社会的需求相当吻合。他们要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,快速的失败远胜过预防错误。这当然对客户与程序员之间的信任关系提出了更高的要求。

  记者:对于精益等敏捷方法的流行,你持如何的看法呢?这是否是一种新的吸引眼球的管理风尚呢?

  Fred George:我认为精益只不过是敏捷的另一个时髦术语。20世纪80年代,我读硕士时就学习了精益(当然那时候它的名字还不是这个,而是Just In Time,简称JIT)。到了1990年代,我将它应用于敏捷项目的编程中。现在新专家们将这种方式称为精益,但它其实还是我一直惯用的敏捷方式。

  但是为老的思想贴上新的标签还是很有价值的,它会因此获得更多受众,导致更多的人采用更好的方式。所以看到TDD被重新命名为DDD(领域驱动设计)或者BDD(商业驱动设计),是件很有意思的事情,但无论如何,给新的转变赋予新的名字还是有价值的。

  记者:目前中国也出现了很多敏捷教练的角色,您对这一趋势如何看待?

  Fred George:我不信任敏捷教练这一角色,我觉得这种类比是不对的。体育领域中的教练辅导运动员如何表现更出色,但是他们自己不需要身体力行。教练本身都是年纪比较大、反应比较迟钝的。

  事实上,程序员们在目睹敏捷做法的过程中获益。顾问需要和他们一起写代码、写测试、部署系统。而许多敏捷教练仅仅告诉你做什么内容,然后坐在一边看着,保证你确实在按照他的要求做。程序员们对此会持怀疑态度,一旦教练离开,他们就马上放弃了这种实施。

  敏捷顾问不同于体育中的教练,敏捷的推崇者应当坐下来与团队一起工作,并且身体力行引导团队。程序员不会太老或者太迟钝;但对敏捷教练,会有太懒,不愿动手的说法。

时间: 2024-10-01 01:47:09

Fred George访谈录:关于敏捷开发的精彩见解的相关文章

文档驱动式超敏捷开发

    敏捷开发大家都不陌生,他对文档的态度是偏向于反对,但是也不是说一点文档都没有.他的说法是 代替文档.   那么敏捷开发为什么会这么认为呢?其实大家在做项目开发的时候都会有这样的体会:   时间紧任务重,哪有时间写文档呀?代码都写不过来. 辛辛苦苦把文档写好了,但是但是项目才进行一小半好不好,需求怎么就变了呀!需求变了,代码都改不过来,那还有时间去修改文档呀?于是乎一开始写好的文档就变成了一个个的坑.默默的坑着后来的人.   于是就有了这样的现象: 当接手一个遗留项目的时候最希望的就是有文

敏捷开发学习分享

程序员都很懒,你懂的! 敏捷不是快,而是拥抱变化(不断反馈的一个过程).                                                        简单的说,敏捷开发是一种以人为核心.迭代.循序渐进的开发方法.在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征.换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态. 敏捷原则:主张简单,拥抱变化,可持续性,

需求采集为小公司敏捷开发中的用户服务

网页制作Webjx文章简介:最近也许是因为大家面试很多,讨论用户需求采集的话题越来越多,好像突然大家一下子都在关注产品的这一流程.当然需求采集的方法很多,众多前辈们也都总结了许多,完全可以参考甚至搬到自己的项目中来实现.这些方法用到大公司大项目上,只要把握的好,数据分析工作做 最近也许是因为大家面试很多,讨论用户需求采集的话题越来越多,好像突然大家一下子都在关注产品的这一流程.当然需求采集的方法很多,众多前辈们也都总结了许多,完全可以参考甚至搬到自己的项目中来实现.这些方法用到大公司大项目上,只

敏捷开发与项目管理实战之敏捷需求分析

问题背景 敏捷开发中许多活动都是全员参与而非专人参与.需求分析同样也可以是全员参与 的一个活动.这反映了敏捷开发的"个人与交互胜过过程与工具"的价值观.需求分析是在需 求理解的基础上进行的.因此,全员参与需求分析有助于及时发现团队成员对同一个需求理解不一致的 问题,这很大程度上避免了缺陷的引入.另外,也有助于规避人力风险.比如,一个需求的开发者突然 需要请假,其他开发者可以马上顶替他,因为其他人也参与了其负责开发的需求的分析.此外,全员参 与需求分析也有助于全体成员的能力的提升.但问题

创建标准化代码在VS中实现敏捷开发

标准化程序开发是敏捷开发中的核心内容之一.标准化代码不仅有利于团队之间的合作,也有利于模块之间的集成,节省时间与成本.在VS中也为创建标准化代码做出了很多努力.笔者在这篇文章中就跟大家分享一下,在VS平台中创建标准化代码的注意事项.具体的说,就是五大禁令和四大推荐. 禁令一:不要随意检查代码. 这可能跟用户正常的认识有所差异.有些开发人员可能认为在开发过程中,检查代码是必须的.不过在敏捷开发的模型中,这恰恰是禁止的.因为如果在代码的编写中,不时的检查代码,会浪费开发人员大量的时间与精力.当然,这

利用Rational Team Concert在敏捷开发中进行持续集成

本文将介绍如何利用 Rational Team Concert(RTC)在敏捷开发过程中进行持续集成.详细说明了如 何在 RTC 中通过采取一系列的步骤和脚本开发,来保证持续集成过程的连续性和提高整个项目的效率. 同时还阐述了每一步可以利用的工具和最佳实践,从而使开发过程更加规范化,高效化. 概述 Rational Team Concert(RTC)是 Jazz 产品中最重要的一个,是一个可以任务分解集成,源代码版 本控制,进行自动构建和报告的工具.Jazz 做为 IBM 下一代的软件交付平台,

敏捷开发中高质量Java代码开发实践

概述 Java 项目开发过程中,由于开发人员的经验.代码风格各不相同,以及缺乏 统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维护,需要较 大的测试投入和周期等问题.这些问题在一个项目组初建.需求和设计均具有不 完全可预期性和完备性的全新项目中将尤为突出.本文将结合敏捷开发周期短, 变化快等特点,介绍如何通过在开发过程中采取一系列步骤来保证和提高整个开 发团队的代码质量,并阐述了每一步可以利用的工具和最佳实践,从而使开发过 程更加规范化,成就高质量的代码,减少测试的投入,并促进整个团

windows下JAVA敏捷开发环境搭建步骤教程

  编程开发环境搭建还是挺重要的,第一步是先要搭建环境,有了环境才能开展工作.本文我们来看看windows下JAVA敏捷开发环境搭建步骤. 整个软件项目分为四个环境 开发本地环境.开发环境.测试环境.IDC环境.和传统C++开发不一样的模式是多了第一个开发本地环境.这是为什么呢,因为目前大部分开发人员还是比较熟悉windows下开发.对于mac和linux下直接使用软件并且开发的中国开发者还是少之又少,这套架构就这个现状做出来的.如下是环境搭建架构图: 从环境来说: 一.开发本地环境.开发集成服

使用.NET进行高效率互联网敏捷开发的思考和探索

不知从什么时候开始,创业变得很廉价,谈什么都是互联网,动辄融资千万.这阵风好像也刮向了程序员中,有那么一大批开发者,数据结构不好好学习.数据库原理不扎实掌握,在github上发布几个项目,用nodejs创建一些服务,再用H5写出APP,就自以为迈入了高级程序员的队伍,能够运筹帷幄互联网项目,难道学习新技术.新理念就是快速成长吗,显然不完全是,在这浮躁的氛围中,各种粗制滥造的互联网网站.APP接踵而至,很多看似漂亮的APP,连简单的http接口安全都没有措施应对,很多美丽的响应式网站,目录结构随意