[翻译]Bob大叔:反思极限编程
译者注: Bob大叔14年后再次谈论极限编程。极限编程经历了14年的风风雨雨后,Bob大叔将会给它怎么样的定义那?
在我手中拿着的一本白皮薄书,在14年前彻底的改变了软件世界。这本书的标题是解析极限编程,副标题是拥抱变化。作者是Kent Beck,出版时间为1999年。
这本书很薄,不到200页。排版很宽,间隔很远。写作风格即自由散漫又平易近人。章节不多,概念简单。
但是其影响却像地震一样,甚至至今震动仍未平息下来。
起始于第53页的章节10,列出了12项实践,引爆了行业内的大辩论。并催生了一场革命,改变了我们编写软件的所有方式。这些实践是:
计划游戏:当今被成为SCRUM。此观点认为软件应该按照任务列表中的优先级循序渐进的开发。
小版本:应当频繁和渐进式地部署软件。
隐喻:该概念最终在Eric Evans编写的《领域驱动设计》一书中明确化。系统结构应当建立在针对问题域的简单的智力模型之上。
简单设计:任何时候都要保证系统尽可能的简单,不用考虑对未来的担心。
测试:程序员和客户一起编写自动化测试来验证产品代码的行为与预期一致。当今我们称之为测试驱动开发(TDD)及验收测试驱动开发(ATDD)。
重构:软件内部结构能够并且应当被持续改进。
结对编程:如果团队成员各自单独工作,那么这称不上一个团队。真正的团队需要经常通过键盘进行合作。这样可以相互充分的分享知识, 正是团队成员的义务。
集体所有权:代码归属于整个团队,而不是某个个体。
每周工作40小时:经常加班的团队是失败的团队。
现场客户:在团队中加入一名真正的客户,用于对需求负责,开发团队能够始终轻易的接触到他。
编码标准:团队应当使用一致的编码风格保证代码整洁,易于沟通。
争议?
很奇怪是不是?是不是并不是所有实践都有争议?但是14年前引起了疯狂争议。确实,整本书出版时,人们争议书中的描述不可能应用于实践,争议所有拥护者是如何的必躬屈膝,不听劝解,甚至是一行代码没写过的傻子……
呃,我不应当让这些过去的感受压倒我。因为,毕竟它们早已消失不再,而我们依然存在。
看看这12项实践,你没有践行其中哪项?我温柔的读者中的大多数可能长期的践行大多数实践。如果说它们已经被普及肯定稍显夸张,但是更不夸张的说,它们现在已经成为主流。更重要的是,还未践行这些实践的团队至少在尝试它们。这些实践已经可以被完美的落地实施,而不再是一个被唾骂的异端。
崛起
过去的14年已经变得陌生。极限编程论战催生出来的敏捷运动,飞速成功,随后被项目经理接受,但是将程序员排斥在外。我们已经看到了确定性的、疯狂的成功,以及相应的(可预见的)无力的认证。我们看到了只采用了计划游戏(例如SCRUM)而忽略其他11个实践的策略失败了。这种策略被Martin Fowler称为无力的Scrum。我们已经经历了咨询师和作者分离的持续的推动,以及看板、精益及每一个新的项目管理方法的竞争。我们已经看到了软件工艺运动的发展,以及敏捷基因被慢慢的退化和稀释。
在所有的炒作和翻腾中,这12项实践依然留存,只是其中一些名字有稍微改变。一周工作40小时变成了可持续增长率。测试变成了TDD。隐喻变成了DDD。小版本变成了持续集成和持续部署。但是尽管名称改变,但是这些实践依然和14年前描述的差不多。
我们也看到极限编程这个名称几乎完全不用了。极少数人现在还使用这个词。一些人仍然使用XP这个缩写,但名称的大部分都已经消失。如果听到一个团队描述他们正在做的是极限编程,甚至正在践行所描述的这12项实践,我会觉得非常罕见。名称变了,但是实践未变。这些实践是持久的。
在翻腾,炒作,争议的咆哮和胡言乱语中,在人类争夺一个又一个位置的风雨中,在人类的贪婪,激情和骄傲的杂乱中,在所有的政治中,这些实践依然留存。
稳定的价值观
我相信这些实践这么持久是因为他们基于稳定的价值观这个坚实的基础。Kent Beck在他的书中第7章第29页描述了这样的价值观:
沟通
简单
反馈
勇气
我可以尝试论证为什么这些价值观是正确的,但是我他们自身已经论证了这些。软件工匠能够拒绝这些价值观中的任何一个吗?软件工匠能够不努力争取在工作中保证这些价值观的展现吗?这些价值观正是软件工艺的价值观。
我可以尝试辩论书中这12项实践拥抱和体现了这些价值观,但是这些实践的持久性足够证明,尽管围绕这些实践的名词和运动已经消散。
成功
极限编程已经成功了!它成功的超越了其支持者的最疯狂的梦想。它的成功是因为从诞生时的争议中幸存下来,在不可避免的倡导者的流失中幸存下来。它成功了是因为它活的比自己的名字更久!
极限编程的成功正像结构化编程的成功。甚至没人再会考虑结构化编程,因为他们一直在使用结构化编程。我们正在尝试达到没人再会考虑极限编程的目标。
这就是成功!一个想法从这场运动诞生一直存活到成为我们日常生活的一部分,这就是成功!
回顾
所以现在,2013年的最后几个星期,我花了些时间回顾1999年。那个时间Kent Beck写了一个突破性的书。这本书改变了一切。回顾并谨记:极限编程。简单的说,请承认它是:
优秀的软件实践的核心
原文出处: http://blog.8thlight.com/uncle-bob/2013/12/10/Thankyou-Kent.html, 作者Uncle Bob Martin。
[翻译]Bob大叔:反思极限编程的更多相关文章
- Bob大叔观OO原则
Bob大叔观OO原则 上篇总结了经典的23种 设计模式,详细的解读后期会陆续的详细揭开.使用设计模式的根本原因就是为了增强代码的复用性和可维护性.而面向对象是实现代码复用的有效途径,所以这里有必要了解 ...
- 跟Bob大叔观OO原则
上篇总结了经典的23种 设计模式,详细的解读后期会陆续的详细揭开.使用设计模式的根本原因就是为了增强代码的复用性和可维护性.而面向对象是实现代码复用的有效途径,所以这里有必要了解一下OO的基本思想和原 ...
- 翻译 | The Principles of OOD 面向对象设计原则
本文首发于vivo互联网技术微信公众号 https://mp.weixin.qq.com/s/Q_pziBUhKRywafKeY2T7YQ 作者:Robert C. Martin 翻译:张硕 本文由来 ...
- windows类书的学习心得(转载)
原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...
- windows类书的学习心得
原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...
- 成为编程大牛很简单,把这些书看个八成就OK
原文链接:http://lucida.me/blog/developer-reading-list/ 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍 ...
- Adaptive Code Via C#读书笔记
原书链接: http://www.amazon.com/Adaptive-Code-via-principles-Developer-ebook/dp/B00OCLLYTY/ref=dp_kinw_s ...
- .NET书籍推荐
任何语言的学习,要快速掌握,不在看书,而在实践.——题记 .NET技术从1.1发展到2.0,内核基本完善,从.NET 2.0开始学习是个明智的选择.而NET 3.5以及即将推出的.NET 4.0所新加 ...
- 《代码整洁之道》(Clean Code)- 读书笔记
一.关于Bob大叔的Clean Code <代码整洁之道>主要讲述了一系列行之有效的整洁代码操作实践.软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关.这一点,无论是敏捷开发流派 ...
随机推荐
- 关于 NPOI 报 Invalid column index (256). Allowable column range for BIFF8 is (0..255) or ('A'..'IV') 错误的解决办法
当看到这个错误的时候,网上搜索可以会有些说列数有限制之类的说法,这个说法是相对于 Office 2003 的,在 Office 2007 之前,最多只可以创建 列:在 Office 2007 之后, ...
- pickle
[pickle] Python提供了pickle模块来实现序列化. 首先,我们尝试把一个对象序列化并写入文件: pickle.dumps()方法把任意对象序列化成一个bytes,然后,就可以把这个by ...
- gdb调式
1.PCB版的相应目录下执行命令: gdbserver 10.18.13.84:5555 DvdPlayer 2.linux操作系统执行:(如果是android找到android项目路径下的gdb)m ...
- iOS button文字居中
新建一个UIButton的category .h @interface UIButton (QXTitleInCenter) -(instancetype)init; @end .m @impleme ...
- MVC学习地址
http://www.cnblogs.com/n-pei/tag/Asp.net%20MVC/
- ELK日志管理之——logstash部署
1.yum源配置 [root@localhost ~]# cat > /etc/yum.repos.d/logstash.repo <<EOF [logstash-1.5] name ...
- 树形菜单的json字符串的拼接
最近在学习权限管理, 要用到树形按钮, 但是字符串的拼接是一个难理解的问题, 然后从网上找了一个从前台用js来遍历组成这个json字符串, 很好! 但是没看懂... var data = [ {&qu ...
- ini_set 设置php配置项 在windows和linux下的不同
在win下,当你要include多个路径的话,你要用“:”隔开,但在linux下就使用":"隔开的.. if (substr(php_uname(), 0, 7) == " ...
- 第七章 springboot + retrofit
retrofit:一套RESTful架构的Android(Java)客户端实现. 好处: 基于注解 提供JSON to POJO,POJO to JSON,网络请求(POST,GET,PUT,DELE ...
- 使用事件等待句柄EventWaitHandler 实现生产者、消费者队列
using System; using System.Threading; using System.Collections.Generic; class ProducerConsumerQueue ...