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

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 年编程经验。目前从事支付系统相关业务,曾转战区块链、通信行业。敏捷倡导者、手绘爱好者。

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

  1. “大话架构”阿里架构师分享的Java程序员需要突破的技术要点

    一.源码分析 源码分析是一种临界知识,掌握了这种临界知识,能不变应万变,源码分析对于很多人来说很枯燥,生涩难懂. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 我认为是阅读源码的最核心 ...

  2. 这个有争议的软件开发方法,陪伴一代程序员走过了 18 年

    作者:熊节 / 插画:虎头锤 一.生于滑雪度假村,它的名字叫敏捷 敏捷是一种重视质量.追求快速反馈的软件开发方法. 2001 年 2 月,美国犹他州雪鸟滑雪度假村,"敏捷软件开发联盟&quo ...

  3. 从职业方向,谈程序员如何突破成长瓶疾,我们该怎么去学习?

    如何成长为一名架构师? 很多程序员想成为一名架构师,但是对于其中的技能掌握程度,以及编程功底的要求?设计能力的要求有哪些? 我简要从以下6点经验来谈,从技能的角度抛砖引玉. 1:编程基本功:数据结构和 ...

  4. 年轻一代程序员:社牛、不卷、玩开源

    这个世界,归根结底是属于年轻人的. 过去二十年,以程序员为核心的互联网行业,创造了诸多故事,这些故事的结尾通常是阶级跃迁.财务自由或提前退休.但就像每个历经起伏的领域一样,当互联网进入下半场,热潮回归 ...

  5. [转] 金山CEO求伯君今退休 老一代程序员时代结束

    10月24日消息,金山软件创始人求伯君今日起辞去其在金山软件所有执行性职务,正式退休.原微软亚洲工程院院长.亚太研发集团首席技术官张宏江博士接替求伯君正式为金山软件首席执行官(CEO).有观点指出,求 ...

  6. 程序人生 - 程序员三十五岁瓶颈你怎么看?

    35 岁,职业发展开始遇到瓶颈,有的人已经快写不动代码,也还没有晋升到管理层,个人职业如何发展必是反复拷问过自己的.即使不是自己主动考虑,在目前互联网行业裁员大潮下,中年程序员也有可能被动地被优化掉. ...

  7. 程序员之死:技术不是最重要的?

    程序员"已死"? Kent Beck在<实现模式>一书中提到:"写的好代码不一定市场上面买的好,市场上面很多用垃圾代码堆砌而成产品正在赚着大钱--" ...

  8. java高深技术总结_一名25K以上的高薪Java程序员总结出的技术以及学习技能

    原标题:一名25K以上的高薪Java程序员总结出的技术以及学习技能 总所周知,Java是目前使用最为广泛的网络编程语言之一. 它具有简单,面向对象,稳定,与平台无关,解释型,多线程,动态等特点. 一般 ...

  9. 好程序员大数据培训技术分享:Hadoop集群同步

    为什么80%的码农都做不了架构师?>>>    好程序员分享:Hadoop集群同步分享--是技术突飞猛进的很好体验!在好程序员学习大数据技术,开始学会了分享,班里五十个人,每个人就能 ...

最新文章

  1. vim 代码跳转神器 YouComPlete
  2. 久违了我的博客园《人生的体会》
  3. python输入水果数量_Python 水果统计
  4. VTK:vtkCubeAxesActor用法实战
  5. 计算机最佳参数,对使用者来说,学会计算机性能参数提取,给出性能评价很重要...
  6. Ubuntu 修改 hostname
  7. python漏洞利用脚本_利用Python脚本实现漏洞情报监控与通知的经验分享
  8. 同时起两个mysql 起不了_两大龙头同时提价,6月起下游订单V字反转,份额都倾向这两家...
  9. dism 分割镜像_(图文教程)利用DISM++工具整合驱动和预补丁至win7镜像
  10. 微信公众号对话框回复消息链接跳转到小程序界面
  11. pycharm提示 进程已结束,退出代码 -1073740791 (0xC0000409)
  12. 2019-11软考报名网站汇总,陆续更新
  13. 当初为了有机会进大厂,狠心复习了这9门核心知识点,熬夜整理成思维导图送给大家
  14. 必看!2021年云计算行业五大趋势,云南昆明企业小型云计算平台搭建及解决方案
  15. red5安装 (for flash server) 与fms 功能类同。
  16. 详解FC交换机基础知识
  17. 求职简历-NLP工程师
  18. python导出dxf图_利用Dxfwrite/ezdxf操作CAD文件!
  19. 轻度Linux患者福利,Win10安装Linux子系统教程,附 Docker 安装教程
  20. 华展云-让展览更高效 2017第二届中国(郑州)国际水务设备与技术博览会会刊(参展商名录) 展会名称: 2017年第二届中国(郑州)国际水务设备与技术博览会     所属展馆: 中原国际博览中心

热门文章

  1. 【.net】利用FFmpeg获取视频截图
  2. 基于物联网和机器人技术的智能图书馆
  3. php shm,PHP shm_put_var()访问已释放资源漏洞
  4. matlab模型连接函数series
  5. manjaro系统配置国内源
  6. springboot 处理视频截图
  7. html输入符号%3e,html常用特殊符号
  8. realme x2 深度测试打不开_Realme X2/X2 Pro支持深度测试-官方解锁BootLoader图文教程...
  9. IOS APP 上传到AppStore
  10. js四舍五入保留两位小数