1
如果把软件开发当成一个谜题,数代的软件人在过去的 50 年里前赴后继地尝试解决这个谜题,不过到今天为止,全世界不管是码农还是码神,我们仍在这个谜题当中痛苦挣扎。
1965 年 ~ 1985 年,软件危机逐步浮现,这让刚刚进入科学管理时代的人们极其不爽。1931 年建成的帝国大厦只花了 410 天,还是提前完工,写个软件还能复杂过盖摩天楼?那肯定是方法有问题。
供职于洛克希德软件技术中心的 Winston W. Royce,在其 1970 年的论文 “Managing the Development of Large Software Systems” 中提出了一个长得像瀑布的流程,业界似乎找到了一款灵丹妙药,虽然这位搞了多年航天器的 Royce 老兄并没有在他的文章中提到任何瀑布相关的字眼。之后以 1988 年 CMM 的发布为重大里程碑,剩下的似乎就是沿着既定的路线,细化,标准化,量化,优化,再优化……
直到一线干活的人们发现事情其实不是这样,于是生长出了各家敏捷流派,以期解决 Fred Brooks 在 “No Silver Bullet” 一文里提出的复杂性(Complexity)、配合性(Conformity)、隐蔽性(Invisibility)、易变性(Changeability)这些现代软件开发中本质性(Essence)的难度。
2
中国用 20 年的时间迈过了西方 50 年的软件工程发展史。《敏捷中国史》中一个个鲜活的故事和严谨的数据考证一起,描绘了敏捷方法在中国软件产业的土壤中一步步发芽、传播的画卷,构成了中国软件史一个精彩的侧影。
《敏捷中国史》不仅帮读者在宏观层面理清了中国软件工程领域在过去 20 年里发展的关键脉络;一系列从业者的经历巧妙串联,更让读者从个体视角体验历史,了解众多普通的软件人是如何参与着历史和创造着历史。
我个人的从业经历跟敏捷中国史的跨度大致重叠,因此格外有感触。阅读每篇内容,本以为早就遗忘的画面在脑海之中栩栩如生地一页页闪过。
3
我还记得 2001 年在新加坡的一个社区图书馆,第一次翻开 Kent Beck 的 Extreme Programming Explained 给我带来的冲击。
不过一番琢磨之后,我得出了几个轻率的结论:
- 迭代开发玩不转,甲方的预算和立项流程根本不可能让乙方这么干(我当时在新加坡的一个系统集成商工作);
- 结对编程太奢侈,没有老板会让团队这么干;
- TDD 真是好东西,不过只要团队里有一个人不这么干,其他人也干不下去,让所有人都用 TDD 不现实。
所谓纸上得来终觉浅,直到四年之后,我自己卷起袖子,在全面采用敏捷实践的团队沉浸工作了几个月,才真正体会了那些理念和实践的价值和可操作性。让我很有共鸣的是,文中不少人和公司初步接触敏捷的经历和感受其实也是类似。
看到敏捷中国大会的举办,大型通信企业的敏捷转型,DevOps、设计思维、精益企业、精益创新的推广,ThoughtWorks 相关的记述把影像拉回我的记忆。那些熟悉的名字把他们的面容带回我的眼前,与他们合作中体验到的酸甜苦辣又从心中流过。虽然是文中很多事件的亲历者,我看到的也只是点点滴滴,从没想到有人能如此全局又生动地把握和呈现当时的脉动。
说到合作,我 2007 年加入 ThoughtWorks,那是我真正认识熊节的开始,不过我知道熊节却要更早一些。那时经常在 JavaEye 上津津有味地旁观一个叫熊节的人跟人吵架,觉得这人吵得很有见解,而且吵得很有文笔。于是,我有了无数的机会在现场和邮件里看熊节怼人,以及被熊节怼,从中学到很多。
为什么专门把怼人拿出来说?这其实跟 ThoughtWorks 的风格有关。不满足于现状,寻求更好的理念、方法和工具,追求软件卓越,这是 ThoughtWorks 的使命。ThoughtWorks 期望员工不盲从主流意见,要持怀疑挑战的态度,以求找到不一样的路径,做到比当前更好。熊节就是这种风格的典型代表。
4
20 年中国软件工程方法的变迁也是中国软件行业追赶国际先进水平的历史。巨大的国内市场已经让我们成为一个软件大国,但我们在工程方法领域并没能够取得匹配的领先地位。
我理解《敏捷中国史》不仅仅是对历史的记录和纪念,更是以史为鉴。文中一个个致力于改善工作成效的一线从业者,致力于推广新方法新工具的布道者,正是他们吸引了一批又一批热衷软件开发的人加入进来,一起推动行业的发展。
以上内容来自ThoughtWorks中国区总经理张松为《敏捷中国史》所作的序。在这一系列课程中,作者熊节也用部分章节叙述了在ThoughtWorks与敏捷的不解之缘。
于 2005 年进入中国以后,对中国的敏捷社区发展起到了极大的推动作用。面对行业环境对敏捷并不积极的状况,ThoughtWorks 选择了主动造势。“敏捷中国”开发者大会就是这样启动起来的。
ThoughtWorks 初入中国
从进入中国开始,ThoughtWorks 就在行业中扮演了敏捷先锋的角色。
2005 年,被西安丰富的高校资源和高新区政府的热情态度所吸引,ThoughtWorks 在西安软件园落户,目标是服务中国本土客户。
同年,ThoughtWorks 在国内获得了三个项目:与西安市高新区政府合作的单点登录系统建设项目,与河北省地税局合作的电子政务项目,以及与厦门好望角信息技术有限公司合作的网游物品交易平台项目。其中第三个项目是唯一来自私企的项目、唯一的互联网项目,客户对敏捷方法的配合程度很高。
ThoughtWorks 在这个项目上也投入了很大的资源,Martin Fowler、Fred George、Jim Webber、Perryn Fowler 等全球敏捷和开源社区的知名人物都曾参与过这个项目的架构与开发。在后来的几年中,好望角是 ThoughtWorks 在中国最重要的标杆项目。
Martin Fowler 的中国之行后,一批 BJUG 和 JavaEye 的网友(如徐昊、李默、熊节、陶文、钱安川等)陆续加入 ThoughtWorks,为 ThoughtWorks 在中国业务与影响力的初期发展做出了贡献。
除了在网络社区和《程序员》杂志为主的报刊发表言论之外, ThoughtWorks 开始积极参与国内的行业会议。
2005 年 12 月,熊节代表 ThoughtWorks 出席了微软企业决策者峰会金融行业论坛,并做了题为《敏捷软件开发》的主题演讲。
2006 年 6 月,Martin Fowler 再次来华,出席第十届中国国际软件博览会暨中国软件产业发展高峰论坛,并做发言演讲。第十届软博会由信产部、发改委、科技部三部委主办,发言嘉宾包括时任信产部副部长娄勤俭、科技部部长徐冠华等政府官员,以及来自东软、用友、神州数码、CA 等知名企业的高管,是当时国内档次最高的 IT 行业会议。
但 ThoughtWorks 在这些行业会议上的亮相并不成功。熊节在微软企业决策者峰会上的演讲反响平平,几乎没有得到任何反馈。
Fowler 在软博会的演讲中介绍了 ThoughtWorks 给国外一家投资银行做的项目案例:这个原定计划 8 个月完成的项目,由于采用了迭代式的开发方法,在两个月的时候已经有部分功能上线,并给客户带来真正的经济效益,随后几个星期就收回了整个项目的投资。
当时台下的听众一片茫然。由于政府主导的重点行业信息化工程固有的特点,在当时绝大多数中国 IT 业者的概念中,软件项目就只有一次预算和一次交付(多发生在年初和年末)。一个项目中有多次交付、多次上线、项目还没结束软件已经开始赚钱,这样的事情对于很多人来说不是信不信的问题,而是根本无法理解。
对敏捷方法、迭代式交付基本理念和运作方式的缺乏了解,使得中国的 IT 同行一时无法认识到 ThoughtWorks 独特的价值。
在早期的三个本地项目中,ThoughtWorks 与西安高新区政府和河北省地税局的合作都出现了不愉快,为时不长即告结束,只有与厦门的私企好望角的合作持续了较长时间。Martin Fowler 在短暂的中国之行中已经看到,当时的中国市场并不特别重视软件的价值,行业更关注压缩项目成本,包括缩短项目周期和挤压人力成本,因此更倾向实施成型产品而非定制开发。
这种对软件独特价值的忽视和对成本的极度重视,导致 ThoughtWorks 在与北大方正等典型的本土 IT 企业谋求合作机会时屡屡遭遇尴尬。为此,ThoughtWorks 决定自行营造行业氛围,主办大型行业会议,倡导对软件价值的重视。
“你还不走吗?”熊节问郭晓。
此时已经是夜里 11 点多,熊节跟 CSDN 的一名工作人员正在调试会场的音响设备,猛然回头,发现郭晓坐在会场中间的座位上,两眼呆呆地望着天花板。
“噢,”被熊节问到,郭晓好像突然回过神似的,“再等一会儿。你们不是也没忙完嘛。”
说完,郭晓又进入了入神的状态。他低头看看一张纸卡片,然后又抬头望着天花板,过一会儿开始念念有词,手还不时挥舞两下。熊节好奇地走到郭晓身旁,探头看他手上的卡片写了什么。
“这是我明天的 cheat sheet,”郭晓主动拿起卡片给熊节看,只见卡片正反两面密密麻麻地写着英文小字,“明天不是我讲第一个吗?得抓紧时间练啊。”
“总共 40 分钟演讲还需要准备?”熊节诧异地问道,“你这种外企高管不是张口就来吗?”
“哪儿啊,”郭晓笑着说,“你可不知道,我最怕对着一大群人演讲了。紧张啊,紧张起来腿都会抖,跟筛糠似的。何况这是第一次在中国做这么大规模的演讲,更紧张。所以我得先练好,练得熟了就不那么紧张了。”
说完,郭晓又把注意力放回他的卡片上,一时抬头呆看天花板,一时念念有词手舞足蹈。直到其他人调好所有设备准备关灯,他才离开会议室回房间睡觉, 这时时间已过午夜。
首届敏捷中国开发者大会在 2006 年 6 月 3 日在北京新世纪日航饭店举行,大会的主题是“敏捷释放软件价值”。这次会议由 ThoughtWorks 和 CSDN 共同主办,JavaEye 等网上社区以协办单位身份帮助宣传。除 Martin Fowler 外,ThoughtWorks 还派出了来自澳大利亚的 Scott Shaw 和来自英国的 Liv Wild 作为演讲人,公司创始人 Roy Singham 也专程到中国参会。现场到会听众约 600 人。
在时任 ThoughtWorks 中国区副总经理郭晓的开场演讲中,他一方面迎合了行业对成本的重视,列举 Forrester 的数据说明采用敏捷开发方法可以大幅节省软件项目成本。然而他给出的数据中,产品总体缺陷率的大幅下降或许可以用测试驱动开发和持续集成等实践来解释,但项目速度(如果“速度”定义为项目完工的总体时间的话)的大幅提升是敏捷解释不了的,只能解释为实施敏捷的团队(即 ThoughtWorks 的团队)能力更强。
另一方面,他也指出“软件的功能不等于价值”,因为“实际上很多功能最终用户根本不会用”,反而造成软件的维护和扩展困难。敏捷方法借由充分的沟通避免开发不必要的功能、借助技术和管理手段保障软件的可维护性与可扩展性,从而释放软件的价值。
这个演讲用一种贴近中国市场现状的方式阐述了敏捷的价值:没有超越时代地谈论“迭代式发,而是从避免功能浪费和延长软件生命周期的角度提出论述。后来几年的实践证明,这个演讲的逻辑,比起 Fowler “原汁原味”的敏捷论述,在中国市场上更容易得到认可。 在随后的主题演讲中,来自英国的业务分析师 Liv Wild 具体介绍了如何进行“充分的沟通”。
当时的ThoughtWorks 在启动项目时会采用一套称为“QuickStart”(快速启动)的信息收集方法,以高互动、可视化的工作坊形式厘清项目的愿景、利益相关人、业务流程、功能范围、设计风格、技术架构,并形成明确的交付计划。当时典型的 QuickStart 需耗时 4 周,后来这套方法在中国被压缩到两周甚至一周。即使放下迭代式开发不谈,这套需求获取的方法本身也大大领先于当时国内 IT 企业普遍的水平。
主题演讲之外,ThoughtWorks 的咨询师还在会场组织了一系列“敏捷游戏”,邀请现场听众参与。“折纸帽子”游戏阐述了在开发过程中与客户频繁沟通和反馈的重要性,“搬运气球”游戏阐述了迭代式交付对于消减项目风险的价值。 这两个游戏都是 ThoughtWorks 在印度举行的新员工入职训练营 “ThoughtWorks 大学”(简称 TWU)的课程内容,这种参与性强、寓教于乐的形式,在中国 IT 行业的专业会议中前所未见,令与会者耳目一新。
大会结束后,李默建立了“敏捷中国”邮件列表,并根据签到记录邀请与会者加入。在后来几年中,这个邮件列表中发生了一系列颇有深度的讨论,成为国内敏捷先行者们又一个重要的在线言论阵地。这个邮件列表随着一年一度的“敏捷中国”大会不断成长,正是中国敏捷社区在逆境中砥砺前行的剪影。
结语
在行业信息化项目的甲方与软件企业的高层领导都对敏捷缺乏兴趣的几年时间里,在一线打拼的一批敏捷实践者没有停下脚步。
他们在探寻轻量级开源架构方案的同时,也在各自的工作中采用敏捷方法,尤其是用户故事、迭代管理、持续集成和测试驱动开发等实践,在需求管理、项目管理、配置管理和质量保障等方面获得了扎实的能力提升。
他们在 JavaEye 等在线论坛交流心得、在 BJUG 等线下社区展开深入的探讨和分享。在交换信息、答疑解惑的过程中,他们也结识了同道的朋友,获得了并肩前行的动力。
在整个行业对敏捷缺乏认同的岁月,《程序员》杂志为这些“草根”实践者们保留了一个难得的言论阵地,使他们得以持续发声。当全球敏捷社区的领导者 ThoughtWorks 进入中国,这些敏捷实践者们迅速在其周围聚集,并以行业大会的形式喊出了响亮的宣言。
随后,一些对于软件能力有着最迫切诉求的大企业回应了这一号召,向着“敏捷中国”这面大旗靠拢。
作为中国敏捷十余年发展历程的亲历者与推动者,资深老程序员熊节从整个中国 IT 发展进程审视敏捷,通过本课程带你一起重新经历一代程序员的青葱热血岁月,与你一起梳理中国软件工程领域 20 年发展的关键脉络。
不止于敏捷,你会切实感受到整个中国 IT 行业、乃至中国经济的发展。
作者简介:
熊节,现任宝尊电商成都研发中心总经理,曾任 ThoughtWorks 总监咨询师、 CSDN 技术主编。
IT 行业打拼 18 年,在金融、零售、政府、电信、制造业、全球医疗等行业的信息化建设方面有着丰富经验。翻译了《重构》《软件工艺》《实现模式》等行业重要著作,是中国 IT 浪潮中敏捷发展的领航者之一。熊节拥有利物浦大学 MBA 学位。
插图提供:
虎头锤,旅居墨尔本的老程序员,北邮博士、北大硕士,15 年编程经验。目前从事支付系统相关业务,曾转战区块链、通信行业。敏捷倡导者、手绘爱好者。