Robert C. Martin( 罗伯特·C·马丁),作为世界级软件开发大师、设计模式和敏捷开发先驱、C++ Report杂志前主编,也是敏捷联盟(Agile Alliance)的第一任主席,我们尊称他为“ Bob 大叔(Uncle Bob)”。

如今,年逾六十的 Bob 大叔过着典型的“斜杠”生活,他不仅是优秀的程序员、畅销书作家、演讲家,以及视频制作者,还是一名柔术爱好者。 多年学习柔术的经历,带给他的除了强健的身体之外,还有从中受到的有关“匠艺”的熏陶。他经常受邀去各地进行演讲,向当下年轻一代的程序员们分享他所理解的敏捷。现在,Bob 大叔也常常在 Twitter 的账号(@Uncle Bob Martin)以及个人网站(cleancoder.com)上发表自己的观点、文章。

Bob 大叔认为, 敏捷不是项目管理方法,而是一套价值观和纪律,可以帮助相对较小的团队构建中小型产品。这一观点的提出源于他无数次的亲身项目实践。

瀑布开发之旅

1970年,18岁的 Bob 在一家名为 A.S.C.Tabulating 公司做程序员,起初写代码的时候,Bob 及其团队度过了一段艰难的日子。当时的工作是划分白班和夜班的,白班时,程序员先用铅笔把代码写在编码表格上,然后用打孔机在卡片上打孔,把仔细检查过的卡片交给计算机操作员,操作员则在夜班时进行编译和测试。但这一番操作下来,通常会花费几天的时间,且之后的每一轮修改都会花费大约一天的时间,团队就在日复一日地编码、编译、测试、修复 Bug。这种开发模式在当时尤为普遍,因此生产效率低下的问题亟待解决。

 

为了缩短开发过程中反馈的时间,瀑布模型应运而生。该模型很好地解决了生产效率问题,并在70、80年代间迅速地占据了软件开发的大半江山,Bob 及其团队也开始了“瀑布开发”之旅。

但是想象中精细的计划、完美的策略所打造的卓越成果并没有出现,Bob 只能重新寻找能真正符合他期许的开发流程。在寻找过程中,35岁的 Bob 与搭档 Jim Newkirk 相继加入新的公司——Clear Communication,与此同时,有家公司写了一个很流行的杀手应用,许多专业人士都买来用,这其中也包括 Bob。但令人感到失望的是,这一程序的发布周期变得越来越长,Bug 开始积压,加载的时间也越来越长,系统崩溃的概率也越来越大。最终,大多数用户都选择不再使用这个程序。果不其然,在那之后不久,该公司就关门大吉了。

故事到这里还没有结束,偶然一天,Bob 见到了那家公司的员工,才从这名员工的口中得知整个事情的前因后果:当时公司为了推动产品提早发布,非但没有重视代码质量,还一味地追求速度,导致员工代码写得乱七八糟,无法进行修改或管理,最终公司经营惨淡,宣布倒闭。“千里之堤,溃于蚁穴。”从这一事件中,Bob 得出一个结论:代码的整洁是需要引起重视的。他认为, 软件质量不仅依赖软件架构及项目管理,还与代码质量紧密相关。

 

意识到代码整洁的重要性之后,Bob 心想,如果把瀑布模型与代码整洁结合在一起,那一定很完美。于是,在接下来很长的一段时间里,他同团队一起努力按照“ 分析—设计—编程”的方式试图实现产品交付。但这行不通。即使大家对代码整洁做出了规定,并且每次对需求的分析与设计非常正确,但一旦进入开发阶段,事情就开始变得不可控了,最终的冲刺会再次打乱之前做好的全部计划,导致产品交付不能如期进行。在一次一次的实践过程中,Bob 逐渐发现瀑布开发束缚住了自己的思想。就在他觉得连代码整洁也拯救不了这混乱的流程的时候,敏捷开发初见苗头。

敏捷开发的萌芽

20世纪90年代初,敏捷先驱们陆续发布了关于 Scrum 的文章。Bob 接收到这一变革的信号后,突然有种预感: 团队可以尝试一种新方式了。这一预感在他偶然接触到 Kent Beck 关于极限编程的著作之后成真了。Bob 先后几次拜访 Kent,从他那里深入了解了极限编程(XP),并尝试了测试驱动开发(Test-Dreven Development,TDD)。这才发现,原来在面向对象的环境中可以应用这样的流程,原来一套可以信任的测试能够使代码修改变得异常简单。当他觉得团队完全可以在开发流程中,简单并安全地修整代码的时候,就无法再接受烂代码了。

 

受此启发,Bob 想围绕代码整洁和极限编程创建一个非营利组织,但这一想法在当时并未得到大多数人的认可。于是到2000年秋天,Bob 又提出了一个想法: 让相互竞争的轻量级流程倡导者聚集在一起,形成一个统一的宣言。这个想法得到了 Martin Fowler 的大力支持,两人一拍即合,着手准备会议的前期筹备工作。在筹备的后期,又加入了一名意向者——Alistair Cockburn,Alistair 的加入使这次的会议准备更加完备,并将会议地点定在雪鸟滑雪场,这样,雪鸟会议就被安排好了。

这次的雪鸟会议历时两天,十七位不同流派的敏捷大师在阿斯彭会议室里进行了长达两天的讨论,意在寻求所有轻量级过程和软件开发的共同点,最终他们从 交互、 软件、 协作、 变化等四个角度搭建出了敏捷价值观及十二原则。但令人遗憾的是,为了求同存异,这次会议所签署的《敏捷宣言》 并未对“如何编程”这一部分作过多的解释,同样没有将 Bob 一直提倡的代码整洁纳入。

 

但这并不意味着 Bob 放弃了“代码整洁”。2010年,Bob 出版了《代码整洁之道》一书,他在书中正式提出“ 代码质量与其整洁度成正比”的观点。这本书一经面世,就在软件开发行业掀起了轩然大波 。“代码整洁”认为,整洁的代码是自解释的,阅读代码应该如同阅读一篇优秀的文章,见字知意,能够一下子明白大概的代码功能。代码首先要能读懂,其次才去要求功能实现,这一理念得到了数百万程序员的追捧。Bob 大叔坚信,工作保证速度与质量的唯一方法:尽可能地保持代码整洁。很快,这个唯一的方法就不那么灵验了。

贯彻“匠艺精神”

人们好像又陷入了一种误区:只要实施敏捷、做好代码规范就一定能给软件项目带来明显改善。在这一误区里,人们离真正的敏捷越来越远。2016年,Bob 出版《代码整洁之道:程序员的职业修养》一书,引导读者认识到专业程序员肩负的责任重大,阐述了什么才是程序员的职业素养。此外,Bob 将“代码整洁”在原有基础上扩充了一番:整整30年,大家一直受困于“用大团队干大事”的观念,根本不知道成功的秘诀其实在于用很多小团队解决很多小问题,而这就需要每个程序员具备“匠艺精神”,从而引导开发人员回归真正的敏捷。

“匠艺精神”是指开发人员不再把工作当作简单的上班打卡,而是基于把事情做好的渴望,来提供专业的服务。Bob 提出的“匠艺精神”将关注点聚焦到了开发人员身上,并得到了很多开发人员的支持。为了提高软件开发的水准,并重新明确敏捷最初的目标,一群开发人员于2008年11月聚集到芝加哥,发起了一个新的运动: 软件匠艺(Software Craftsmanship),并形成了一套核心价值观。

 

许多开发人员对敏捷未来的发展方向感到失望,这是催生软件匠艺运动的诱因之一。一部分人觉得敏捷太过于业务,而另一部分人觉得匠艺太关注工程,因此认为敏捷与匠艺水火不容,但 Bob 大叔对此持相反观点。不论是敏捷还是匠艺,本质都是为了交付高质量、有价值的工作,两者缺一不可,68岁的 Bob 大叔如是说。2020年,为了引导新一代软件开发者刚起步就把敏捷用对,他推出新作《敏捷整洁之道:回归本源》,帮助读者理解敏捷价值观与匠艺精神在敏捷团队中的重要意义。

如今,我们的 Bob 大叔——Robert C. Martin,作为2001年在犹他州雪鸟小屋中推动雪球的十七人之一,他身体力行地维护着代码整洁。对编程拥有无尽热情的他,也 开始尝试推动敏捷和匠艺的携手并进,从而修复业务与开发之间的鸿沟。他的故事仍在继续。

敏捷史话(六):也许这个人能拯救你的代码 —— Robert C. Martin的更多相关文章

  1. 敏捷史话(十五):我发明了敏捷估算扑克牌 —— James Greening

    雪鸟会议 雪鸟会议前夕,James Grenning 在 Object Mentor 与 Robert C. Martin 一同工作,彼时组织雪鸟会议的 Bob 大叔盛情邀请 James,告知他会议的 ...

  2. 敏捷史话(八):敏捷的破局之道——Martin Fowler

    在 Martin Fowler 的世界里,任何事情都有最优解. 1963年,Martin 出生于英格兰的沃尔索尔(Walsall),也在同样位于沃尔索尔的玛丽女王文法学校中接受中等教育.在这里的乡村中 ...

  3. 敏捷史话(十七):维基(Wiki)背后的灵感来源—— Ward Cunningham

    在软件开发领域, Ward Cunningham 有许多独到的见解与成就. 1949年,Ward Cunningham 出生于印第安纳州的密歇根市,并在莱克县的一个小镇中长大.怀揣着对计算机浓厚的兴趣 ...

  4. 《敏捷软件开发-原则、方法与实践》-Robert C. Martin读书笔记(转)

    Review of Agile Software Development: Principles, Patterns, and Practices 本书主要包含4部分内容,这些内容对于今天的软件工程师 ...

  5. 敏捷史话(十二):你现在接触的敏捷也许是“黑暗敏捷”——Ron Jeffries

    他很少提起往事,也不再提及二十年前那场引起软件行业变革的会议,他专注于当下,一直活跃在敏捷领域.八十多岁的他依然运营维护着网站和博客,是极限编程网站 XProgramming.com 的作者,该网站是 ...

  6. 敏捷史话(一):用一半的时间做两倍的事——Scrum之父Jeff Sutherland

    普通的人生大抵相似,传奇的人生各有各的传奇.Jeff就是这样的传奇人物,年近80的他从来没有"廉颇老矣尚能饭否"的英雄迟暮,不久前还精神矍铄地与好几百名中国学生进行线上交流,积极回 ...

  7. 敏捷史话(四):敏捷是人的天性 —— Arie van Bennekum

    敏捷是人的天性,是你与生俱来的东西.面对敏捷,Arie van Bennekum 下了这样一个结论. 但这并不意味着人们只能通过天赋获得敏捷,对于想要学习敏捷的人来说,敏捷绝不是仅仅靠学习僵化的框架. ...

  8. 敏捷史话(十三):我被 Facebook 解雇了——Kent Beck

    2011年,Kent Beck 加入了 Facebook .那时候的他已年过半百,几十年的经验让他自认为非常了解软件行业.在 Facebook 的新手训练营期间,Kent 开始意识到,Facebook ...

  9. 敏捷史话(二):Scrum社区的悲剧性损失——Mike Beedle

    2018年3月23日,在美国的芝加哥发生了一起意外刺杀事件.一名男子刺杀了一位首席执行官,而这位不幸的首席执行官就是<敏捷宣言>的合著者--Mike Beedle.Mike 的这场意外令 ...

随机推荐

  1. 【Docker】runtime create failed: container_linux.go:345: 解决

    ------------------------------------------------------------------------------------------------- | ...

  2. os.walk() 遍历目录下的文件夹和文件

    os.walk(top, topdown=True, onerror=None, followlinks=False) top:顶级目录 os.walk()返回一个三元tupple(dirpath, ...

  3. Vue MVVM模型原理

    最近反思了下自己,觉得自己很急躁,学技术总是觉得能用就行了,其实这样很不好,总是这样,就永远只能当用轮子的人.好了,废话不多说,转入正题: 要理解MVVM的原理,首先要理解它是什么,怎么运作起来的: ...

  4. git创建分支并关联远程分支

    1.新建本地分支: 如图,再输入你的分支名字,然后选择从哪个远程分支拉代码,如选择master 至此本地分支创建完成. 2.关联远程分支: (1).先输入git branch -vv,看看分支与远程分 ...

  5. JVM虚拟机基础

    JVM 全称Java Virtual Machine,也就是我们耳熟能详的Java 虚拟机.它能识别.class 后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作. Ja ...

  6. 获取html中某些标签的值

    一.获取单选按钮radio的值 <!doctype html> <html lang="en"> <head> <meta charset ...

  7. uni-app开发经验分享一: 多页面传值的三种解决方法

    开发了一年的uni-app,在这里总结一些uni-app开发中的问题,提供几个解决方法,分享给大家: 问题描述:一个主页面,需要联通一到两个子页面,子页面传值到主页面,主页面更新 问题难点: 首先我们 ...

  8. Redis 实战 —— 07. 复制、处理故障、事务及性能优化

    复制简介 P61 关系型数据库通常会使用一个主服务器 (master) 向多个从服务器 (slave) 发送更新,并使用从服务器来处理所有读请求. Redis 也采用了同样的方法实现自己的复制特性,并 ...

  9. 网络编程 — Windows TCP服务端和客户端

    1. 服务端 #include <iostream> #include <signal.h> #include <forward_list> #include &l ...

  10. Go RPC 框架 KiteX 性能优化实践 原创 基础架构团队 字节跳动技术团队 2021-01-18

    Go RPC 框架 KiteX 性能优化实践 原创 基础架构团队 字节跳动技术团队 2021-01-18