熊节 中国敏捷浪潮的亲历者与引领者。他曾在ThoughtWorks任总监咨询师,翻译了《重构》等著作,创立了敏捷中国社区、极限编程合作社等敏捷技术社群。
“敏捷”一词在中国IT行业中有着多面性。一方面,我们会在各种行业媒体上看到众多企业标榜自己的“敏捷性”,各家世界知名的咨询公司也极力宣传敏捷对于当今企业的不可或缺性;另一方面,深入在行业一线的观察者又会发现,以漠不关心甚或稍待怨气的态度谈及敏捷,这样的从业者不在少数。如果再深入探究,好奇的观察者可能还会发现,对于“敏捷”二字,来自不同企业、担任不同职责的从业者,描绘的图景很可能大相径庭。如此简单且常见的两个字,竟也能呈现出“横看成岭侧成峰”的丰富景象。而这种丰富性,正是行业的一个缩影。
千禧年后高速发展的中国IT业充分发挥了其后发优势,整个年轻的行业在短短十余年中一边学习发达国家(尤其是美国)的经验,一边结合本土国情摸索创新,迅速将行业推至前所未有的高度。在过于快速的成长过程中,大量源于国外的先进思想和方法被迅速引进,经过快速的学习、实践、沿革,它们在少数领导企业中产生效果,再被同行模仿借鉴,逐步扩展下渗,最终成为行业公认的主流。而在扩展下渗的过程中,这些先进的思想和方法也逐步被本土企业消化吸收,转变为不同于当初的样貌,呈现出许多的面向,甚至让身在其中的从业者也常有“不识庐山真面目”之感。在敏捷之前,ISO 9000、CMM等体系都曾经历过类似的历程。
在这个“引入-传播-流变”的3段历程中,首先值得一提的是早期的引入者。在很短的一个时期里,一批年轻的IT从业者不约而同地以近乎公益的方式将敏捷思想导入中国,这一现象背后折射出在政府大力扶植下产业高速发展所暴露出的知识与能力空白,以及一代从业者求知若渴的状态。在几乎没有经济激励的情况下,这一批早期的敏捷先锋凭着宗教式的信念实践了自己认同的方法。
但这种来自西方发达国家的方法真正获得广泛传播的势能还离不开同样来自西方发达国家的外资企业。正是诺基亚这样的外资通信业巨头采用敏捷,才给了其中国同行华为尝试的信心;正是ThoughtWorks这样的外资咨询公司提供了敏捷转型咨询服务,才得以给华为的敏捷转型保驾护航。继华为、腾讯、阿里这样的行业巨头自发采用敏捷之后,这种在咨询公司手上洋气十足的方法开始被消化吸收、剪裁、补充和转化,成为一种(或几种)更接地气的方法。
随后,行业巨头的追随者们通过各种途径模仿巨头的成功之路,包括做软件的方式。但与巨头相比,模仿者在技术与人才的积淀方面都很薄弱,他们的模仿难免走样变形。经过几层的传播与模仿,当“敏捷”的概念终于深入人心时,其内涵的实践却已大打折扣。但与此同时,具备雄厚技术与人才积淀的巨头从未在一时的成就上止步,他们仍在不断完善与扩展软件研发的方法。于是,在同样的“敏捷”二字之下,其所指的概念却已是一个宽广的光谱。
敏捷的发展与流变,虽然看起来只是软件过程管理这一个小群体、一个小领域的事,但风起于青萍之末,敏捷在中国的历程恰如一个窗口。透过这扇窗我们看到的是中国IT行业的变迁。2000年,国务院印发了《鼓励软件产业和集成电路产业发展的若干政策》,即后来被广泛提及的对IT行业发展影响深远的“国发18号文”。“国发18号文”鼓励软件产业发展,鼓励的主要是外包出口型软件企业,这也是为什么政府要对CMM认证提供资金支持。从2000年前后对标印度的服务外包行业布局、靠十二金工程扶持,到2010年以后着眼内需、着眼互联网、着眼消费市场,是IT行业本身的大转向,这才使得业内企业以截然不同的视角看待敏捷方法。而这个行业大转向的背后,投射的更是中国经济从2001年之后获得的世纪发展机遇。
在敏捷“引入-传播-流变”的3段历程中,与之相关的从业人士是我尤为感兴趣的主题。这其中既有单纯热衷敏捷的传播者,也有为利而聚的甲方、乙方,更有后知后觉被浪潮卷挟的普通从业者。敏捷被中国IT行业逐渐接纳的过程,恰与改革开放后出生的“80后”一代跨出校园、进入行业并逐步成长为行业顶梁柱的过程相重叠。敏捷方法对人的独立自主和对尽量减少简单重复劳动的重视,与从小看着美国动画片和情景喜剧长大的“80后”对个性、自由的向往,形成了一种共鸣。这15年,敏捷在行业里的挣扎、发展与流变,又何尝不是这一代从业者从“青葱”到中年的侧面写照。
敏捷方法最终被行业广泛认同和采纳,绝非一帆风顺的预先设计,而是一段充满了波折与偶然的复杂历程。作为中国IT业的一名“老兵”,我希望重新耙梳记录敏捷在中国十余年的发展历程,还原时人身在行业中的所感所想,记录行业发展变迁的一段历史。这段历史既有大时代的必然,也有无数从业者在一件件平淡无奇的小事上的推动。敏捷中国史不仅是中国IT行业的一段小史,更是无数普普通通的IT从业者的一座小小纪念碑。
本书用生动、翔实的语言,辅以情景描述,循序渐进地讲解了敏捷软件开发在中国的发展历程。本书从敏捷的发展背景讲起,延伸到描述世纪之交的中国软件业的发展状况、敏捷的传入、敏捷的低谷以及敏捷实践者为敏捷发展所做的艰苦奋斗,还介绍了敏捷在通信行业和互联网企业的实施状况、敏捷软件开发的发展和Scrum的流行。
本书既适合广大的敏捷方法的爱好者阅读,也适合对软件开发方法发展历程和对中国敏捷技术普及历史感兴趣的人员阅读。
重构,一言以蔽之,是在不改变外部行为的前提下,有条不紊地改善代码。20 多年前,正是《重构:改善既有代码的设计》第1 版的出版,使重构终于从编程高手们的小圈子走出,成为众多普通程序员日常开发工作中不可或缺的一部分。如今,Martin Fowler 的《重构:改善既有代码的设计》一书已经成为全球有经验的程序员手中的利器,既可用来改善既有代码的设计、提升软件的可维护性,又可用于使既有代码更易理解、焕发出新的活力。
这本备受关注的第2 版在第1 版的基础上做了全面修订,反映了编程领域业已发生的许多变化。第2 版中介绍的重构列表更加内聚,并用JavaScript 语言重写了代码范例。此外,第2 版中还新增了与函数式编程相关的重构范例,旨在教会读者如何在没有类的环境下开展重构。
新版沿袭了第1 版的结构,依次解释什么是重构,为什么要重构,如何通过“坏味道”识别出需要重构的代码,以及如何在实践中成功实施重构(无论用的是什么编程语言)。
● 理解重构的过程和重构的基本原则;
● 快速有效地应用各种重构手法,提升程序的表达力和可维护性;
● 识别代码中能指示出需要重构的地方的“坏味道”;
● 深入了解各种重构手法,每个手法都包含解释、动机、做法和范例4 个部分;
● 构建稳固的测试,以支持重构工作的开展;
● 理解重构过程的权衡取舍以及重构存在的挑战等。
本书凝聚了软件开发社区专家多年摸索而获得的宝贵经验,书中所蕴涵的思想和精华,值得反复咀嚼,而且往往能够常读常新。