1、图灵程序设计丛书程序员修炼系列高效程序员的45个习惯敏捷开发修炼之道Practices of an Agile Developer美VenkatSubramaniamAndy Hunt著钱安川郑柯译人民邮电出版社北京图书在版编目(CIP)数据高效程序员的45个习惯:敏捷开发修炼之道/(美)苏帕拉马尼亚姆(Subramaniam,V.),(美)亨特(Hunt,A.)著;钱安川,郑柯译.北京:人民邮电出版社,2010.1(图灵程序设计丛书)书名原文:Practices of an Agile Developer:Working in the RealWorldISBN 978-7-115-2155
2、3-6.高.苏.程序设计.TP311.1中国版本图书馆CIP数据核字(2009)第178801号 内容提要本书总结并生动地阐述了成为高效的开发人员所需具备的45个习惯、思想观念和方法,涵盖了软件开发进程、编程和调试工作、开发者态度、项目和团队管理以及持续学习等几个方面。本书适合所有程序员阅读。图灵程序设计丛书高效程序员的45个习惯:敏捷开发修炼之道著美 Venkat SubramaniamAndy Hunt译钱安川郑柯责任编辑傅志红执行编辑陈兴璐人民邮电出版社出版发行北京市崇文区夕照寺街14号邮编100061电子函件网址http:/北京印刷开本:80010001/16印张:12.5字数:212
3、千字2010年1月第1版印数:13000册2010年1月北京第1次印刷著作权合同登记号图字:01-2008-3859号ISBN 978-7-115-21553-6定价:35.00元读者服务热线:(010)51095186印装质量热线:(010)67129223反盗版热线:(010)67171154版权声明Copyright 2006 Venkat Subramaniam and Andy Hunt.OriginalEnglish language edition,entitledPractices of an Agile Developer:Working in the Real World.
4、Simplified Chinese-language edition copyright 2010 by Posts Telecom Press.All rights reserved.本书中文简体字版由The Pragmatic Programmers,LLC授权人民邮电出版社独家出版。未经出版者书面许可,不得以任何方式复制或抄袭本书内容。版权所有,侵权必究。目录推荐序一推荐序二译者序对本书的赞誉第1章敏捷高效软件开发之道第2章态度决定一切1做事2欲速则不达3对事不对人4排除万难,奋勇前进第3章学无止境5跟踪变化6对团队投资7懂得丢弃8打破砂锅问到底9把握开发节奏第4章交付用户想要的软件1
5、0让客户做决定11让设计指导而不是操纵开发12合理地使用技术13保持可以发布14提早集成,频繁集成15提早实现自动化部署16使用演示获得频繁反馈17使用短迭代,增量发布18固定的价格就意味着背叛承诺第5章敏捷反馈19守护天使20先用它再实现它21不同环境,就有不同问题22自动验收测试23度量真实的进度24倾听用户的声音第6章敏捷编码25代码要清晰地表达意图26用代码沟通27动态评估取舍28增量式编程29保持简单30编写内聚的代码31告知,不要询问32根据契约进行替换第7章敏捷调试33记录问题解决日志34警告就是错误35对问题各个击破36报告所有的异常37提供有用的错误信息第8章敏捷协作38定期
6、安排会面时间39架构师必须写代码40实行代码集体所有制41成为指导者42允许大家自己想办法43准备好后再共享代码44做代码复查45及时通报进展与问题第9章尾声:走向敏捷9.1只要一个新的习惯9.2拯救濒临失败的项目9.3引入敏捷:管理者指南9.4引入敏捷:程序员指南9.5结束了吗附录A资源索引推荐序一仅仅还在几年前,XP还被认为是方法异教,FDD属于黑客程序方法。如今,敏捷俨然已经成为主流学说,敏捷方法成为人们学习和讨论的热点。敏捷方法的应用也更加广泛,以至于不少外包项目都要求采用某种敏捷方法。它不仅仅是小团队和小项目在使用,甚至连微软都开始使用Scrum。敏捷已经成为一种炙手可热的新时尚。因
7、为火热,各种不同的说法就多起来;因为时尚,原本有些不认同敏捷的人也开始追捧起来。人们反复地讨论敏捷方法,涉及从哲学思想到实现细节的各个层面。人们不断地推出各种不同版本的敏捷方法,甚至有些方法显得如此矛盾、如此不同。同时,一些误解也一直在坊间流行。一般误认为敏捷就是快,越快就是越敏捷字典上的名词解释是其依据。岂不知它本来要以“lightweight processes”(轻量级过程)命名,只不过有些参会者不喜欢被看做是在拳台上跳来跳去的轻量级拳手,所以才用了“敏捷”这个词。还有其他一些误解是,敏捷就是只写代码不写文档;敏捷需要重构而无需设计;敏捷迭代就是尽量做到最小,以至于一个小时就好几次;敏捷
8、需要天才的程序员才能应用,其他人都会水土不服;如此这般。可以看到,市面上以敏捷为题目的图书俯拾皆是,似乎软件开发的书不加上敏捷这个词就是落伍一样。敏捷体系下存在多种方法,介绍每种方法的图书就有一大堆。再加上每种方法采用不同的技术,每本书采用不同的组织形式,存在这么多书也不奇怪,就更不用提那些仅仅为了跟风而敏捷的作品了。面对如此百花齐放、百家争鸣的现象,你该从什么地方开始呢?有没有一本图书可以作为入门的第一读物呢?这本书就可以胜任这样的角色!这是一本很容易理解并掌握,不需要太多基础就可以阅读的书。不管你是开发人员,还是管理人员、财务等后勤人员、学生、编程爱好者,只要你对敏捷有兴趣,就可以读懂这本
9、书。你不会被众多的概念和曲折的逻辑所迷惑,不会被高难度技巧所困扰。这本书为你打开了了解和学习敏捷方法的一扇大门,并指出继续前进的道路。你会很悠闲自在地读完这本小书,然后说:“原来敏捷就是这么一回事啊!”自由软件顾问刘新生(ozzzzzz)推荐序二我很喜欢本书的中文书名高效程序员的45个习惯,比直译成“敏捷开发者实践”含蓄多了。敏捷不是目的,只是手段。只要某个手段适合某个场景,有助于提升质量,提高交付能力,提高开发者水平总而言之,有好处的事情,我们尽管做就是了,何必冠以敏捷之名?记得第一次读本书还是两年前。这时又细细读来,越来越觉得“习惯”一词比“实践”更有味道。所谓“流水不腐,户枢不蠹”,厨房
10、脏了就擦一下,总比满墙都是油烟以后再去清理的代价小得多。有价值的东西比如回顾、测试、重构,一切有利于团队建设、提高生产力的实践都应该频繁且持续做,然后日积月累就养成了习惯。有些习惯很容易养成,有些则很难。我们大都常常许愿,做计划,比如要做一个至少100人同时在线的成熟应用,参加义工活动,每周至少一篇博客然后在计划落空的时候,用各种理由来安慰自己。李笑来老师在把时间当作朋友一书中提到:“所有学习上的成功,都只靠两件事:策略和坚持,而坚持本身就应该是最重要的策略之一。”那么,为什么我们会在某些事情上坚持不下去?或者换个角度来看,哪些事情是容易坚持下去的?以前我是标准的宅男,CS、网络小说、魔兽世界
11、几乎是休闲的全部,等到后来得了腰肌劳损,又得了颈椎病,这才痛定思痛,开始游泳锻炼身体。每天游两千米,一个月以后,游泳就成了习惯。再举个例子,我老婆生完孩子以后体型变化很大,立志想要减肥。为了坚持下去,她把怀孕前的照片放在电脑桌面上,时时督促自己。后来,减肥也就变成了一种生活方式。从我的个人体验来看,难以坚持下去的事情,基本都是因为没有迫切的欲望和激情。单说锻炼身体,无论是为了减肥、祛病,还是塑形美体等,做这些事情至少都有明确的目的,这样才能驱使着人们一直坚持下去。没有动机,没有欲望,哪里来的毅力呢?那么,当我们决定做一件事情的时候,首先就要多问问自己:为什么要做这件事情?它所带来的好处是什么?
12、如果不做它又会有哪些坏处?有了清晰的目的和思路后再去做事,遇到变化时就知道孰轻孰重,该怎么调整计划,同时也不至于被重复和乏味消磨了一时的意气。翻开本书之后,你同样也该对自己提问:“为什么要有自动验收测试,有了足够的单元测试是不是就能保证质量了?”“写自动验收测试有哪些成本,会带来哪些收益?”只有明白了“为什么做”,才能够解决“如何做”的问题。本书的两名译者与我都是故交。钱安川是我的同事,是ThoughtWorks资深咨询师,有丰富的敏捷实施经验。郑柯与我同是InfoQ中文站敏捷社区的编辑,一起翻译过数十篇稿件。他翻译的项目管理修炼之道也即将由图灵公司出版。这次二人联手的作品,定会给读者以赏心悦
13、目的阅读体验。我有幸已经从样章中感受到了这一点。希望你能够带着问题,踏上愉快的阅读之旅。希望你能够养成好习惯。李剑ThoughtWorks咨询师2009.10.10译者序“武功者,包括内功、外功、武术技击术之总和。有形的动作,如支撑格拒,姿式回环,变化万千,外部可见,授受较易,晨操夕练,不难熟练。而无形的内功指内部之灵惠素质,即识、胆、气、劲、神是也,此乃与学练者整个内在世界的学识水平密切相关,是先天之慧根悟性与后天智能的总成,必需寻得秘籍方可炼成。”摘自武林秘籍大全公元21世纪,软件业江湖动荡,人才辈出,各大门派林立,白道黑帮,都欲靠各自门派的武功称霸武林。在那些外家功门派(传统的瀑布开发方
14、法、CMM、ISO和RUP等)和非正统教(中国式太极敏捷UDD等)当道之际,一股新势力正在崛起以敏捷方法为总称的一批内家功门派。下面的歌诀是对内家武功招数的概述:迭代开发,价值优先分解任务,真实进度站立会议,交流畅通用户参与,调整方向结对编程,代码质量测试驱动,安全可靠持续集成,尽早反馈自动部署,一键安装定期回顾,持续改进不断学习,提高能力上面的每种招式,都可寻得一本手册,介绍其动作要领和攻防章法。几乎每个内家功门派都有自己的拳法和套路。但,正所谓“练拳不练功,到老一场空”。学习招数和套路不难,难的是如何练就一身真功夫。内家功,以练内为主,内外结合,以动作引领内气,以内气催领动作,通过后天的修
15、炼来弥补先天的不足。本书是一本内功手册。它注重于培养软件开发者的态度、原则、操守、价值观,即识、胆、气、劲、神是也。敏捷的实践者Venkat Subramaniam和Andy Hunt携手著下此书。望有志之士有缘得到此书,依法修习,得其精要;由心知到身知,入筋、入骨、入髓,修炼得道。而后,匡扶正义,交付高质量的软件,为人类造福。安川2008年4月于北京学有所成,学有所用。提鲁库拉尔中1330条警句第391条提鲁瓦鲁瓦(Thiruvalluvar),印度诗人和哲学家,公元前31年几乎每句所谓至理名言都有句意思相反的话与之对应,而且后者也同样在理。乔治桑塔耶纳(美国哲学家、诗人)对本书的赞誉书中“
16、切身感受”的内容非常有价值通过它我们可以做到学有所思,思有所悟,悟有所行。Nathaniel T.Schutta,Ajax基础教程作者在我眼中,这就是一本名不虚传的Pragmatic书架系列里的图书:简短、易读、精炼、深入、深刻且实用。它对于那些想要采用敏捷方法的人很有价值。Forrest Chang,软件主管我从一开始看这本书时就一直在想:“哇噻!很多开发者都需要这本书。”我很快就认识到这正是我需要的书,故而向各个级别的开发者强烈推荐。Guerry A.Semones,Appistry公司资深软件工程师此书通过常理和经验,阐述了为什么你应该在项目中使用敏捷方法。最难得的是,这些行之有效的实战经验,竟然从一本书中得到了。Matthew Johnson,软件工程师我买过Pragmatic书架系列的其他书籍,从中看到过这本书提到的一些习惯。但是,本书把这些思想整合到一起,而且用了简明、易懂的方式组织起来。我在此向开发新手和想要变得“敏捷”的团队强烈推荐此书。Scott Splavec,资深软件工程师伴随着敏捷实践席卷了整个行业,有越来越多的人需要理解什么是真正的“敏捷”。这本简明、实用的书