http://www.programmer.com.cn/6116/

关注敏捷开发领域的程序员,对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:我不信任敏捷“教练”这一角色,我觉得这种类比是不对的。体育领域中的教练辅导运动员如何表现更出色,但是他们自己不需要身体力行。教练本身都是年纪比较大、反应比较迟钝的。

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

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

(本文选自《程序员》杂志11年05期,更多精彩内容敬请关注05期杂志)

《程序员》11年05期精彩内容:云计算应用之路!

《程序员》杂志订阅

转载于:https://www.cnblogs.com/luqingfei/archive/2012/03/20/2407343.html

[转]我倡导无政府主义编程—Fred George访谈录相关推荐

  1. 程序员2011精华本

    程序员2011精华本 编辑推荐 回顾和盘点了2011年度IT行业各个领域的发展和变化,紧密关注创业.开发平台.云计算应用等热门话题,进行了深入的解析和讨论. 基本信息 作者: <程序员>杂 ...

  2. 《程序员》5期全新改版,邀您踏上云计算应用之路!

    本期封面报道:云计算应用之路 云计算,作为近年来广受关注的话题,其本质是一种灵活.高效.低成本.节能的信息运作方式,借助基于互联网的一系列创新技术,存储.计算.软件.管理.网络.信息等各类资源,以服务 ...

  3. Java中的面向接口编程

    面向接口编程是很多软件架构设计理论都倡导的编程方式,学习Java自然少不了这一部分,下面是我在学习过程中整理出来的关于如何在Java中实现面向接口编程的知识.分享出来,有不对之处还请大家指正. 接口体 ...

  4. 阜阳睿趣机器人编程_编程教育中心怎么样睿趣疯狂机器人_睿诚教育蒸蒸日上...

    编程教育中心怎么样睿趣疯狂机器人,睿诚教育蒸蒸日上,2018年获得亚太机器人竞赛全球总决赛总冠军(双冠军). 编程教育中心怎么样睿趣疯狂机器人, 高学子叶珈宁其他成绩平平,但因为从小接触编程,非常擅长 ...

  5. Lab 1:结对编程

    1. 实验要求 练习结对编程,体验敏捷开发中的两人合作. 开发一个Java命令行程序,实现从文本文件中读取数据并根据要求生成图结构,输出该图结构,并在其上进行一系列计算操作,实时展示各操作的结果. 待 ...

  6. 深入dos编程_计算机编程能给孩子带来什么?

    小米上市的消息沸沸扬扬,小米的创始人雷军的个人身价也水涨船高,目前已达 177 亿美元,在福布斯实时富豪榜上排在第 66 位,已超过三星集团的李健熙. 回顾雷军的过往,可以说,正是当年的计算机学习经历 ...

  7. 敏捷画卷:中国软件史的精彩侧影

    1 如果把软件开发当成一个谜题,数代的软件人在过去的 50 年里前赴后继地尝试解决这个谜题,不过到今天为止,全世界不管是码农还是码神,我们仍在这个谜题当中痛苦挣扎. 1965 年 ~ 1985 年,软 ...

  8. Martin Fowler关于微服务的原文翻译

    原文如下:http://martinfowler.com/articles/microservices.html 微服务 有关这个新的技术架构术语的定义 "微服务架构"这个术语最近 ...

  9. 微服务概念 概念提出者Martin Fowler的译文

    微服务 有关这个新的技术架构术语的定义 "微服务架构"这个术语最近几年横空出世,来描述这样一种特定的软件设计方法,即以若干组可独立部署的服务的方式进行软件应用系统的设计.尽管这种架 ...

最新文章

  1. 2021年春季学期-信号与系统-第七次作业参考答案-第六小题
  2. PCB叠层及相关板材介绍
  3. net start mysql 服务名无效_记一次服务器被植入挖矿木马cpu飙升200%解决过程
  4. ClickHouse表引擎
  5. mysql异步查询 java_基于 mysql 异步驱动的非阻塞 Mybatis
  6. 计算机设计大赛国奖作品_1. 项目概要
  7. extjs 中登录保存用户名
  8. dll domodal运行时异常_解决装备疑难,计算机丢失***.dll文件方法「设计画圈」
  9. 5 张图带你搞懂容器网络的工作原理
  10. 《剑指offer》面试题19——二叉树的镜像(C++)
  11. UML画图工具PlantUML与Visual Paradigm详解
  12. Android 消息机制
  13. 运行maven项目报错 :The forked VM terminated without saying properly goodbye. VM crash or System.exit calle
  14. 5.1.6 假脱机技术(输入井、输出井、输入输出缓冲区、共享打印机原理分析)
  15. Log4j写日志文件使用详解
  16. mysql 表结构的复制
  17. 宏观经济学gdp计算方法_宏观经济学gdp计算方法
  18. 20条职场潜规则!小心那些城府很深的人(建议收藏)
  19. 开贝修图最新版 免狗全功能版
  20. 7 Win98 MS—DOS

热门文章

  1. python学多久可以做项目-怎么自学python,大概要多久?
  2. 电脑下载python多少位的在哪看-python64位
  3. python之禅中文-Python之禅与翻译之美
  4. 怎么自学python软件-你是如何自学 Python 的?
  5. python编程主要干嘛的-让孩子学了Python编程有什么用
  6. python入门新手项目-新手零基础入门Python项目实战
  7. python3入门书籍-零基础自学python3 好用的入门书籍推荐
  8. python可以从事什么工作-学Python可以找什么工作或者做什么兼职?
  9. python装饰器实例-Python装饰器原理与简单用法实例分析
  10. python打开一个文件-python文件的读写