一代程序员如何突破自身技术瓶颈:与敏捷的初接触

作者:熊节 / 插画:虎头锤

2000 年前后的中国,有一批年轻的 IT 从业者,受困于软件工程不能有效解决他们的实际问题,开始关注到敏捷,并在很短时间里翻译引进了敏捷的主要基础著作。

重构——一种写出高质量代码的方式

场景一

为侯捷举办的专家研讨会在《程序员》杂志社的二层小楼里进行。这是 2001 年 10 月,经营着 CSDN 网站和《程序员》杂志的百联美达美公司总共也只有 20 来人,控股的百联集团在位于北京亚运村西侧的利康饭店租了一栋独立的小楼,美达美和另一家公司共同在这里办公。这年夏天,北京成功申办 2008 年奥运会,利康饭店所在的这个位置正是未来奥运村的核心区域。7 年以后,这栋有些老旧的二层小楼将不复存在,在同一地点矗立着的将是被称为“鸟巢”的国家体育场。

第一次参加这种专家研讨会,旁听大家的发言,熊节感到有些费力、又非常兴奋。除了侯捷与孟岩等人围绕 C++ 的讨论让他大感兴趣之外,来自上海的王昕带来了一些新鲜的话题。王昕在 CSDN 论坛的账号是 “cber”,平日里在论坛发言相当尖锐,而且每每能跳出技术的框子,从业务和管理的角度给讨论引入一些新的观点。这天他跟熊节聊的话题就不完全是技术性的:

“你听说过 Refactoring 这个东西吗?”

“没有,”熊节连连摇头,“那是个什么来着?”

“是一种写出高质量代码的方法。你之前不是翻译过一系列关于设计模式的文章嘛!你看啊,设计模式社区的思路是,你先想好应该用哪些模式,然后照着模式的实现方式写出来,你的代码就是高内聚低耦合的。但是难就难在‘先想好’对吧?”

熊节点头。如何在开始编码之前先想好应该如何设计,这是他一直感到困难的一个点。之前孟岩与他讨论时曾经提醒他,“尽管当前软件界里几乎所有的人都为设计模式叫好,不过对于软件工程的发展方向,还是有不少批评意见的”。但这些批评意见是什么、对他熟悉的编程工作会产生什么影响,他并不了解。

“简单地说,Refactoring 这种技术,让你可以随时调整代码的结构,”王昕解释道,“把质量不好的代码修改好,在开发的过程中引入设计模式,那么你就不用担心一开始的设计做得不到位,可以一边编码一边完善设计。”

“现在国外有一个软件工程流派很重视这个技术,”孟岩也加入到讨论中,“因为有了在开发过程中调整设计的能力,才有可能降低前期设计的投入,不然软件开发的技术含量就必然在前期设计,开发必然不被重视。这个流派叫‘敏捷’,你有空可以看看。”

场景二

“Refactoring 这个词我知道的,”潘加宇说道,“我这里正好有一篇文章想请你翻译一下呢。”

“哦?什么文章?”熊节的好奇心被勾了起来。这是北京理工大学东门外的一家小餐馆,两人一边喝着小酒,一边聊着《程序员》和《非程序员》最近刊登的文章。从夏天开始,熊节连续翻译了十多篇关于设计模式的文章,在潘加宇办的《非程序员》电子杂志上发表。两人熟络起来,潘加宇每次到北京出差就会来理工大学请熊节吃顿饭。

“ Refactoring 是 eXtreme Programming 这种软件开发方法里面的一个实践,”潘加宇接着解释,“最近国外开始流行一类软件开发的方法,叫做敏捷,这个 eXtreme Programming 就是敏捷方法中的一种,简称 XP。我最近看到一篇文章,是讨论设计模式跟 XP 关系的,你要有兴趣的话,就看看这篇文章呗?”

晚上回到宿舍,熊节上网搜索关于 Refactoring、eXtreme Programming 和“敏捷”相关的资料,很快发现了一个叫 Martin Fowler 的人:这个大胡子美国人在 1999 年出版了一本题为 Refactoring 的书,好像还挺有影响力的。潘加宇塞过来的那篇文章,也是在谈 Refactoring 技术和设计模式之间的关系。联想到前两天和王昕的讨论,熊节感觉这本书貌似还真挺有意思的。

“正好明天杂志社要开选题会了,要不我就报这个选题好了。”一边这样想着,熊节拿出记事本,潦草地写下一行字:12 期技术专题:Refactoring。

中国 IT 从业者与敏捷的初接触

《程序员》杂志

中国的正式出版物首次刊载与敏捷软件开发相关的内容,是《程序员》杂志 2001 年 12 月刊。这期杂志的“技术专题”栏目用了 5 篇文章、12 页篇幅,较为系统地介绍了代码重构(即 Refactoring)。

这个系列的文章,在当时围绕软件工程的讨论中是别具一格的:一方面,它们讨论的不是用某种特定技术实现某种特定需求,而是软件设计的质量、程序的可理解性和可维护性、开发效率等明显属于软件工程领域的话题;另一方面,这几篇文章开展讨论的角度非常具体、非常细节,5 篇文章中有 3 篇给出了真实的程序代码。

《重复代码》 一文为例,作者石一楹从业内司空见惯的“把一份模板代码拷过去稍加修改”的开发方式为切入点,对于软件开发的 7 项基本原则展开了讨论,指出重复代码是损害软件可理解性和可维护性的重要因素,并用一段 C++ 代码范例说明了如何消除代码中的重复。

当时国内绝大多数软件工程相关的讨论关注的焦点在于流程、文档、架构、工具,与实际的软件开发实践、尤其是编程实践脱离较远。这一系列关于代码重构的文章,为中国 IT 业围绕软件工程的讨论打开了一种新的可能性。这期技术专题的导读如是写道:

坚固、灵活、容易维护。每个程序员每天都想得到这样的代码。How to ?编程不是盖房子,程序员不是砖瓦匠。你必须在代码中倾注自己的心力,你必须倾听代码的声音,你必须辨别代码的味道,你必须时时留心让你的代码看起来更漂亮……一句话,你必须善待你的代码。而你的努力不会白费,今天受你善待的代码,明天会加倍报答给你——优美的代码足以让你延年益寿了。

可以看到,这几篇文章所代表的软件工程思路,不是将软件的设计与实现分离、用严格的流程约束“软件蓝领”的“工业化”,而是将实际编写代码的程序员视为对软件开发效率与质量负责的主要角色

在这种软件工程思路中,程序员所从事的编程工作不是由详细的设计和流程框定的、几乎不需要思考的、“高中生经过短期培训就可以干”的“蓝领工作”,而是软件生产过程中各种质量和效率诉求最终的承担者,因而是需要“倾注心力”的、高技能含量的工作,并且有一整套不同于传统软件工程的流程、技能和工具(重构就是其中的一种)与之配套。

这种软件工程思路,就是被称为极限编程(eXtreme Programming)的软件开发方法。

中文互联网

在同一时期,另一些与极限编程相关的内容开始出现在中文互联网上。

2001 年 10 月,IBM developerWorks 网站发表了厦门国际银行项目经理林星关于需求分析的文章,文中介绍了极限编程(当时林星将其译为“极端编程”)的核心价值观:沟通、简单、反馈、勇气。

同样在 2001 年 12 月,浙江大学灵峰科技开发公司技术总监石一楹在 developerWorks 网站发表了 “Refactoring Patterns” 系列文章,从较高层面概要介绍了重构技术的原理和实践原则

除了重构以外,石一楹在文章提到的测试先行、结对编程等,都是极限编程的标志性实践。《非程序员》电子杂志于 2001 年 12 月邀请极限编程的创始人之一 Kent Beck 进行了在线交流,又在 2002 年 1 月与 Martin Fowler 进行了在线交流。

在这些文献资料中,《非程序员》与 Kent Beck 的在线交流显得尤为有趣。发生在聊天室中、氛围轻松随意的交流,加上 Beck 直接犀利的言论(相比之下,Fowler 在交流中就显得更加字斟句酌、四平八稳),让这段文字记录成了一面镜子,清晰地映照出当时业界的情景。

Beck 在交流中提到,当时在极限编程的邮件列表中提及过 100 多个真实项目,他猜测全世界使用极限编程的软件项目不超过 1000 个。当时全世界有大约 20 个区域性的极限编程兴趣团体,主要在美国和欧洲,中国没有这样的团体。作为 1996 年才被发明出来、1999 年才有第一本著作的一种新的软件开发方法学,这个水平的热度并不意外。

Beck 对于极限编程的前景表达了谨慎的乐观态度。网友在交流中提到,众多主流的企业里,管理者们更倾向于使用重型的软件工程方法(例如 CMM ),因为这是更安全的选择。Beck 表示他相信,未来的软件组织会以频繁交付可工作的软件——而非严格定义的交付过程——作为关键的考核指标。

他期望 “50 年之内,许多极限编程实践被当做’只是以正确的方式做事情’接受”,这些实践包括了测试先行、重构、快速迭代交付、全功能团队等。由 “50 年”这个随口说出的数字来看,即使 Beck 自己,对于极限编程的传播也没有太多信心。

以上内容摘自《中国敏捷史》。
在这里插入图片描述

敏捷是一种重视质量、追求快速反馈的软件开发方法。它对行业的影响远不止几个编程实践,说它影响了 Java 技术栈的变迁,说它引领了 DevOps 和持续交付的潮流,甚至,说它在中国 IT 发展史上是浓墨重彩的一笔,都不为过。

然而,敏捷在技术人士中具有很大的争议,有人将敏捷奉为圭臬,有人对敏捷嗤之以鼻。

大家对敏捷的态度为何有天壤之别?如今很多人所认识的敏捷跟 Martin Fowler、Kent Beck 等先驱主张的敏捷有何不同?70 后与 80 后老程序员当年是如何突破自身技术成长困境,将敏捷引入中国的?敏捷是如何从一个名不见经传的小流派,到如今,从自由职业者,到创业小团队,再到大型公司,无不接纳并大力应用它的?IT 领域最有影响力的巨头阿里、腾讯、华为的技术成长是如何深度融入敏捷方法的?

作为中国敏捷十余年发展历程的亲历者与推动者,资深老程序员熊节从整个中国 IT 发展进程审视敏捷,通过本课程带你一起重新经历一代程序员的青葱热血岁月,与你一起梳理中国软件工程领域 20 年发展的关键脉络。

不止于敏捷,你会切实感受到整个中国 IT 行业、乃至中国经济的发展。

【课程目录】在这里插入图片描述

作者简介:

作者:熊节,现任宝尊电商成都研发中心总经理,曾任 ThoughtWorks 总监咨询师、 CSDN 技术主编。

IT 行业打拼 18 年,在金融、零售、政府、电信、制造业、全球医疗等行业的信息化建设方面有着丰富经验。翻译了《重构》《软件工艺》《实现模式》等行业重要著作,是中国 IT 浪潮中敏捷发展的领航者之一。熊节拥有利物浦大学 MBA 学位。

插图:虎头锤,旅居墨尔本的老程序员,北邮博士、北大硕士,15 年编程经验。目前从事支付系统相关业务,曾转战区块链、通信行业。敏捷倡导者、手绘爱好者。

猜你喜欢

转载自blog.csdn.net/valada/article/details/87914945