如何轻松和安全地构建的满足合规要求的智能产品,实现业务需求?4月26日,告诉你答案! 了解详情
写点什么

Paul Oldfield: 如何正确理解敏捷?

  • 2007 年 4 月 11 日
  • 本文字数:3351 字

    阅读完需:约 11 分钟

作为一名植物学的毕业生,Paul 进入计算领域仅仅是希望它能够提供一份有收入的工作。在 18 年的 IT 生涯中,Paul 在不同的项目中担任过许多角色。他常以独立咨询师的身份与 IIB (Information International of Brussels) 组织一起工作。Paul 是使用 UML 进行领域建模的专家,他的贡献主要在于将业务需求转化为系统结构和系统设计方面。InfoQ 的编辑 Kurt Christensen 最近就敏捷开发的问题对 Paul 进行了访问。

InfoQ: 请向读者简单地介绍一下你自己和你在敏捷开发方面的经验。

Paul Oldfield (以下简写为 PO): 我在各种环境都工作过,从“完全敏捷”到“完全不敏捷”。其中包括了近似 FDD 的开发方式以及没有尝试过极限编程和敏捷实践的自组织团队。最近我在进行外包软件开发的咨询工作,这间英国公司对精益开发方法萌生了兴趣并有可能最终得出一些值得注意的成果。

InfoQ: 在你作为一名敏捷开发从业者和敏捷社区领导者的角色经历中,是否见过反对敏捷的情况,如果有,你是如何看待它的?

PO: 我见过许多人,他们一听见敏捷这个词汇就表现出轻蔑的情绪。另一方面,我也见过许多当即对敏捷表现出极大的热情的人。他们其中的大多数都没有真正深入地了解敏捷。这种情况在论坛、blog 中不断发生。

就我所知,大多数的观点,不论正面还是反面,都是道听途说,从我对敏捷的理解来看,只有少数人在进行真正的敏捷实践。很多人自认为他们进行的是敏捷实践。那些有机会与真正理解敏捷的人进行交流的幸运儿更有机会理解敏捷,进行正确的实践,在剩下的人中,可能有一部分能够通过阅读资料,观察,以及依照结果不断调整成为真正的敏捷开发者。

有一些很激烈的反对声音,通常来自于一些声称进行过敏捷实践的人,事实上他们从未实践过真正的敏捷。也有少数人由于观念上的差异反对敏捷。从某种意义上讲,大多数反敏捷的声音正是来自于这些观点。

InfoQ: 所有的这些反对意见在你看来,哪些是值得一提的?

PO: 所有这些反对意见都有一定价值,正因为如此,它们才能传播开来而不是早早被反对掉了,大多数反对的理由之所以自以为站得住脚,是因为他们认为所谓敏捷就是他们所见到和耳闻的那些事情。

InfoQ: 你说“大多数反对的理由之所以自以为站得住脚,是因为他们认为所谓敏捷就是他们所见到和耳闻的那些事情”,这不就成了敏捷方法论的缺陷,我们假设一个团队没有正确的实践敏捷方法,那么这个团队在什么情况下可以得知它们开始真正的“敏捷”?如果敏捷难于正确实践,那么是从业者还是实践本身出了问题?

PO: 依我看来,在软件开发界里没有所谓的“最佳实践”,这个词汇来自制造领域,我将对此进行阐述,可能有些跑题,请读者不要见怪。在制造领域里,我们早期所做的努力是尽可能去除环境中的不确定因素,通过标准化和自动化降低单位成本,从而获利。在开发领域,去除环境中不确定因素的机会是很有限的。尤其是当我们希望进行某些完全创新的工作的时候。

这样,有一种可能是有一个团队正确地使用了某些实践,但是依然没有得到理想的结果。这是由于实践无法普遍适用于所有的情景。再考虑到团队没有正确使用实践的可能性,我们可以预见到很多使敏捷开发偏离轨道的情况。

如果我们将敏捷开发与飞行器作比较,飞行器天生不稳定,但是有良好的反馈系统用于侦测它何时偏离航线,并作出适当的调整。这种在有限的支援中作出适当调整的能力,在我看来正是敏捷与否的评价标准。

回到你刚才的问题:敏捷实践的问题是它们并不普遍适用,虽然通常来讲,它们是非常好的切入点。实践者依然需要“检查并调整”的过程。不幸的是,团队对敏捷实践的调整常常使事情变得更糟;他们通常会选择回到陈旧的,不适合的但是比较熟悉的实践中去。

如果一个团队得到了期望的结果,那么,就那个阶段来讲,他们所作的便是正确的敏捷实践。如果他们能够理解别人的意图并在“检查并调整”之后继续得到期望的结果,,那么他们将处于非常有利的位置,如果他们在借鉴别人的敏捷实践时有困难,我建议他们坚持之前的实践而不要妄为。

InfoQ: 我们假设由于无法将敏捷方法执行下去,某团队敏捷开发的尝试失败了,作为一个团队,问题通常在哪儿?敏捷的哪些方面是团队难于做到的?

PO: 有一些典型的错误。如结对编程并非意味着一个人干活而另外一个人看着,这必须是一个交换思想的过程。这让我想起自己对结对编程第一次尝试。当时我道听途说了不少关于结对编程的东西。我知道在结对的过程中什么时候应该干什么,我掌握更多算法,而我的伙伴对语言层面有更多的了解,这样,我们发现结对编程比单独工作要快得多。我们很快发现每一个人可以作什么,他在哪些地方可能比较薄弱,与初学者结对通常不会有太多想法上的交流,这是我们需要了解的技巧。

很多年以前我就学习了如何进行重构,那时候编译器异常缓慢,我们不得不选择在别人休息的时候进行重新编译 (有时候是整夜) ,我所有的重构都非常大。既没有小步前进也没有重新测试,很多已有的功能在这个过程中被破坏了,但是,进行重编译和修复的代价使我们异常小心,在每次成功编译后都尽可能修复所有的问题。之后,软件开发的流程变为先进行正确的设计,重构应该被避免。在敏捷实践中,流程方面的责任重新回到开发者的身上。我所听到的最常见的错误是认为敏捷开发没有流程,不讲纪律。

对团队做出调整通常很难,进行调整所需的知识通常不很直观,在许多情况下,团队最好继续进行那些看起来不合适的实践,直到他们获得了足够多的知识并有了更深的理解。

InfoQ: 你之前提到人们对于敏捷的负面看法有时是因为观念上的差异。你能对此进行详细阐述吗? 将那些没有亲自尝试过敏捷开发的人的偏见放在一边,如果有的话,那些合理的观念上的差异是什么?

PO: 我不确定我曾经承认存在合理的观念上的差别,但是我愿意就此发表我的看法。

我常常遇到那些不将制造业和软件开发加以区分的人,他们看到了最佳实践以及高度自动化的生产流程,并希望将其应用在软件开发中。在这里我不会提及他们的名字,我遇到过按照时间和原材料支付工资,利润与人数多少相关的情况,在这里,所谓效率意味着利润的减少,而且客户直到接受不再需要这么多工人的事实才会承认效率的提升。

有时候我会想起刚刚接触到敏捷实践的时候,某些实践挑战着我的世界观,幸运的是,我的处世哲学让我乐意探索这些对我的世界观产生挑战的部分,万一在这些问题上我犯了错误呢,万一别人才是对的呢。每一处挑战开始的时候就像一个新的宗教,但是进行探索就会破除盲目崇信。就我所看到的,大多数的人选择符合其已有观念的意见。他们以近乎宗教的方式接受或者拒绝新的观点。他们或许会进行某些肤浅的推理,但他们认为进行详细论证是在浪费时间。这对敏捷的盲目接受者和诋毁者同样适用。

Emergent Architecture 是最初我认为不符合我世界观的部分。最终我发现其倡议者所建议的正是我在研究项目上 7 年间所做的。在这个项目中, Emergent Architecture 逐渐变为成型的解决方案。当然,与过去相比,敏捷的倡议者提出了更多的规程。应用规程势必会影响灵活性,这些规程之所以有效是因为在现代系统中创新的程度较过去大大降低了。敏捷的倡导者所创造的规程是从完全不同的,非制造业的角度展开的,这样它依然保持着灵活性。 我花了很长的时间才明白没有哪个敏捷实践是可以脱离其他实践单独运作的。在试图了解某一个实践如何指导开发工作之前,我需要对全局有一个清醒的认识。

当然,也有人尝试过敏捷(或者自以为尝试过)并且失败了。强迫这些人赞同他们不理解的东西非常困难,当然,问题总会出现,我从不期待会有一帆风顺的情况,事物总会向熵最大的方向发展。我想这适用于很多负面意见。这些人的意见对于从未尝试过敏捷的人也造成了一定程度的影响。


作者简介:Kurt Christensen 已经有超过 12 年的软件开发经验,他作为教练,教员以及程序员在不同的项目工作过,这些项目大小不等,所服务的公司也规模不一。Kurt 和妻子以及两个孩子现在生活在明尼苏达市保罗街。 译者简介:胡凯是 InfoQ 中文站的志愿者翻译。2006 年加入 ThoughtWorks ,通过在 ThoughtWorks 多个国家和多个项目的敏捷实践,坚定地站在了敏捷阵营中,目前在进行 CruiseControl 相关的敏捷开源项目。他和许多敏捷开发者一样活跃在敏捷中国 CruiseControl-China 社区中。加入 InfoQ 中文站志愿者翻译队伍,请邮件至 china-editorial@infoq.com

2007 年 4 月 11 日 05:12684

评论

发布
暂无评论
发现更多内容

疫情之下,被公司优化掉!同事大部分都去了创业型的公司,而我仅仅一年经验,却斩获多家大厂offer

Java~~~

Java 面试 架构师技能

得不到提升的开发老鸟,试试这3个方法,让你事半功倍!

Linux服务器开发

程序员 后端 互联网人 底层应用开发 Linux服务器开发

专访 CNCF 大使张磊:让云原生不再是大厂专属

阿里巴巴云原生

开源 开发者 云原生 OAM CloudNative

数据库面试要点:关于MySQL数据库千万级数据查询和存储

华为云开发者社区

数据库 sql 存储

案件数同比下降七成 北京引入“区块链”化解物业纠纷

CECBC

区块链 法律

老师讲的真棒!阿里P7级别面试经验总结,终获offer

欢喜学安卓

android 程序员 面试 移动开发

诚招译者 | Bruce Eckel On Java 8 中文版

图灵社区

Java

快速学会!啃完999页Android面试高频宝典,挥泪整理面经

欢喜学安卓

android 程序员 面试 移动开发

http client 中的 connectionRequestTimeout, connectTimeout, socketTimeout

不在调上

Gemini双子新约系统软件开发|Gemini双子新约APP开发

系统开发

深入Linux内核架构——进程虚拟内存

赖猫

c++ Linux

终于拿到蚂蚁金服Offer!!!分享一下全程面试题和面试经验!

小Q

Java 学习 编程 架构 面试

关于Redis分布式锁这一篇应该是讲的最好的了,赶紧收藏起来

比伯

Java 编程 架构 面试 技术宅

老师讲的真棒!总结2020年最全180道Android岗面试题,Android校招面试指南

欢喜学安卓

android 程序员 面试 移动开发

开发者,别让自己孤独

阿里巴巴云原生

开源 开发者 云原生 OAM CloudNative

电信新报告 | 数字化转型:搁置还是加速?

VoltDB

5G安全 通信 电子信息

Redis为什么这么快?

数据君

redis

了不起!靠技术脱贫,他们只用了短短两年!

华为云开发者社区

人工智能 华为 技术

深入浅出 WebRTC AEC(声学回声消除)

阿里云视频云

阿里云 音视频 WebRTC 音频技术 视频云

高并发下,如何让你的数据库再快一点?

数据君

数据库

一道腾讯面试题目:没有listen,能否建立TCP连接

linux大本营

c++ Linux TCP 后台开发 TCP/IP

JVM调优不知道怎么回答,阿里总结四大模块,学不会就背过来

小Q

Java 学习 架构 面试 JVM

企业面临大危机,CRM崩溃告急,程序员竟用特殊手段化解危机!

Learun

敏捷开发 CRM

DolphinDB与Pandas对于大文本文件处理的性能对比

DolphinDB

数据库 pandas tsdb 数据库选择 DolphinDB

IO问题成顽疾,鹅厂专家来教你

数据君

数据库

架构师训练营第 1 期 - 第 11周 - 学习总结

wgl

极客大学架构师训练营

加密货币可能是人类历史上最大的/富国银行报告:加密货币投资像19世纪50年代的早期淘金热财富转移

CECBC

数字货币

TensorFlow2 Fashion-MNIST图像分类(二)

书豪

只需三步!慢日志去无踪

数据君

数据库

观点|发展区块链金融,长三角如何建设“四梁八柱”

CECBC

区块链

Paul Oldfield: 如何正确理解敏捷?_敏捷_Kurt Christensen_InfoQ精选文章