“ 敏捷已逝,但敏捷精神长存。因为所谓的敏捷专家卖给你的是方法论,而不是价值。”当多数人都在从“敏捷”身上榨取利益时, Dave Thomas 成为了一位逆行者。在敏捷实践中他不断尝试,以寻找敏捷最务实的价值。

“敏捷是什么”

早在2001年春,Dave 参加了发布《敏捷宣言》的雪鸟会议,成为了《敏捷宣言》的17个作者之一。虽然 Dave 对敏捷本身的价值毫不存疑,但之后由于很多出于不同目的的人,将无限多的内容加到了“敏捷”中,导致“敏捷”越来越违背敏捷的实质。此时的“敏捷"已非彼"敏捷",Dave 不愿再背上“敏捷”的标签,开始追求真正的敏捷性。

十几年的敏捷实践,带给 Dave 的不仅是项目效率的提升,也让他明白了目前敏捷的误区有多大。直到2014年,Dave 在一次大会上撕碎了敏捷被很多自称敏捷专家的人赋予的华丽外衣:“敏捷已逝,但敏捷精神长存。因为所谓的敏捷专家卖给你的是方法论,而不是价值。”

Dave 告诉大家,他没有 CSM、CSP、CSXX 等认证,但依然可以在自己的项目上很好地运用着敏捷。显然,与市面上大量的敏捷认证及方法论相比,Dave 更专注于个体对敏捷实践的思考,而不是照搬敏捷专家的说法。

在 Dave 看来,敏捷不是一个产品。敏捷的产生,是因为当初他们有过一些犯错的经验,所以才总结出4条价值观,希望减少后来人试错的时间。但现在很多人只强调敏捷可以让软件成本更低、交付更快、质量更高,却没有强调敏捷还需要严格的纪律来约束团队,这需要与时俱进。

对于敏捷,Dave 总结了三个特点:非常简单,无需复杂的流程,也无需各种“敏捷”专家。由此,他还提到一万小时理论: 要成为某领域的专家,要花一万个小时去实践操作,这样此领域的知识在脑海中有一个根深蒂固的概念,大脑会自动去做这件事,才有可能成为这个领域的专家。

同样,敏捷实践也需要多操练、因时而变, 让敏捷成为一种习惯和不用思考的东西,这样敏捷才会真正给我们带来价值。

“I am a programmer”

Dave 是敏捷圈里的一股清流,他对敏捷始终保持着清醒的认知。在很多活动上,他的自我介绍,也仅仅是以“ I am a programmer”作为开始。谈到程序员的身份,还要从 Dave 高中时期谈起。

Dave Thomas 出生于1956年,他最早接触编程是在高中时期。当时,Dave 在学业之余报名了编程课,课上学的是 Basic 语言,只需要将代码敲到纸带上,再通过一台调制解调器将数据传到大型机器上,机器就可以运行了。

尽管过程稍显繁琐,但长时间摸索下来,Dave 发现编程十分符合他的大脑逻辑,这种极具创造性和精确性的体验,让 Dave 自此一发不可收拾地爱上了编程。

大学时期,Dave 在伦敦的帝国理工学院进修计算机科学,正式敲开了编程世界的大门。

经历了多个编程项目, Dave 拥有了丰富的经验与发散思维。在一次项目中,Dave 认识了 Andy Hunt,两人在项目中经常给很多程序员建议,像在部署前对软件要进行测试等。诸如此类的建议不仅得到了很多程序员的肯定,也确实令开发过程得到了有效改进。为了把这些敏捷实践过程中的建议与技巧整理下来,他们辞掉了当时的工作,花费了一年半左右的时间整理成了一本书。1999年前后,两人合著的《程序员修炼之道》出版了,并获得了 Jolt 效能大奖。

“不要让自己成为一个标签”

在2012年全球软件开发大会上,Dave 提到了标签理论。他认为标签是一个名词,只是表明你是做什么的,而限制了你如何去做。尤其是作为一名程序员,Dave不希望在这个职业前面加上任何的标签去修饰。比如他热爱 Ruby,但不想说自己就是一个 Ruby 程序员,可以说是使用 Ruby 来解决问题的。

就这样, Dave 常常把一个标签改成一种解决方案,也就为自己创造了更多的可能性。

在2003年,Dave 跟 Andy Hunt 一起创办了“The Pragmatic Bookshelf”出版公司。两人还一起合著出版了其他十多种作品,其中包括 Ruby 语言类。

Dave 是一个 Ruby 语言的热心推行者,写了《Programming Ruby》等相关书籍,每天写 Ruby 脚本是他生活中的一大享受。在刚开始接触时,尽管 Ruby 社区人很少,但 Dave 抱着交朋友的心态经常参加 Ruby 大会,并乐在其中。在 Ruby 的开源社区,Dave 提交过几千行的代码和文档,他认为在开源社区这样做不仅能帮助别人,也能让提升自己在社区中的名誉和声望。

2009年,Dave 在敏捷中国大会上,带来了一场“ 程序员修炼之道·十年”主题演讲。十年间,软件行业发生了翻天覆地的变化,《程序员修炼之道》作为十年前的出版书籍,虽然案例看起来古老了一些,但背后的概念仍然具有很多现实意义。比如“DRY(Don’t Repeat Yourself)”、 “Code Kata ”等原则,这些方法在现今仍然很适用。大会上,Dave 对书中提出的建议进行了反思与修正,也为 下一个十年(2019年)中,《程序员修炼之道》第2版的面世做好了铺垫。

改变世界的人看似拥有比常人多出一倍的时间。生活中的 Dave,记性很差,但凡生活中能够用自动化解决的事物,无一例外都被他用 Ruby 成功打造,这个生活习惯也被 Dave 运用在工作中。

作为出版商,Dave 团队的工作能力非常出色,很多出版商发布一本新书,往往需要提前一两天开始准备,而 Dave 利用自动化的线上装置只需要花费5秒钟。公司的高度自动化让团队有了更多空余时间,他们没有固定的办公室,大家都在家里工作。Dave 每天起床后查查邮件、遛遛狗、了解新的科技、继续探索……在晴朗的天气下,边晒太阳边开始一天的工作。尽管每天的工作时间多于8小时,但由于生活与工作分布在各个时间段里,Dave 以享受生活的方式享受着工作。

当然,在各个角色的行进过程中,不是一路的繁花似锦。Dave 也会跟人分享:“我也常常会有感到艰难的时候,但每次考验过去之后,你的技艺都将更上一层楼。所有值得做的事情都是困难的,但克服这些挑战不仅会让你更强大,还会让你变得更加投入。”

由此可见, 能够改变世界的人,首先改变的是自己。让自己不只是具备广泛的能力,还能将不同的技术结合起来创造价值。改变自己,你准备好了吗?

敏捷史话(五):敏捷已逝 —— Dave Thomas的更多相关文章

  1. 敏捷史话(七):从程序员、作家到摇滚乐手——Andy Hunt的多面人生

    与其说 Andy Hunt 是敏捷宣言的创始人,不如说他是一名专业作家来得更为合适.他的<实用程序员><程序员修炼之道:从小工到专家><编程 Ruby:实用程序员指南&g ...

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

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

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

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

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

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

  5. 敏捷开发 and 敏捷测试

    名词解释 agile: 敏捷的:灵活:敏捷开发. scrum: 扭打,混打:并列争球:参加并列争球. sprint:  冲刺,全速跑. backlog: 积压的工作:积压待办的事务. retrospe ...

  6. keras系列︱Application中五款已训练模型、VGG16框架(Sequential式、Model式)解读(二)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72859145 中文文档:http://keras-cn.readthedocs.io/ ...

  7. Keras(二)Application中五款已训练模型、VGG16框架解读

    Application的五款已训练模型 + H5py简述 Keras的应用模块Application提供了带有预训练权重的Keras模型,这些模型可以用来进行预测.特征提取和finetune. 后续还 ...

  8. 【敏捷0】敏捷项目管理-为什么从敏捷开始?为什么从PMI-ACP开始?

    作为敏捷项目管理的开篇文章,还是先来简单地说一说为什么先从敏捷开始,为什么是以 PMI-ACP 为参考.当然,这一系列的文章可能不可避免地会为 PMI-ACP 做一些广告,但是我想告诉大家的是,敏捷以 ...

  9. CODING 助力江苏高速信息实现组织敏捷与研发敏捷,领跑智慧交通新基建

    疫情之下的高速公路管控重任 江苏高速公路信息工程有限公司(以下简称:江苏高速信息)成立于 2002 年,是江苏交通控股旗下,专业从事高速公路领域机电系统集成.智能交通软硬件研发.大数据分析运营的高新技 ...

随机推荐

  1. 第6章 未来的函数:生成器和promise

    目录 1. 生成器函数 1.1 定义生成器函数 1.2 迭代器对象 1.3 对迭代器进行迭代 1.4 把执行权交给下一个生成器 2. 使用生成器 2.1 用生成器生成ID 2.2 用迭代器遍历DOM树 ...

  2. Popup中ListBox的SelectChange事件关闭弹出窗体后主窗体点击无效BUG

    WPF的BUG!弹出框的 自定义控件里有Popup, Popup里面放一个ListBox 在ListBox中的SelectionChange事件触发关闭弹出框后,主窗体存在一定概率卡死(但点击标题又能 ...

  3. PHP SDK短信接口

    /** * sdk 短信接口 * @param $tel 手机号 * @param $content 短信内容 * @return bool */ public function telSDK($te ...

  4. SparkSQL学习进度9-SQL实战案例

    Spark SQL  基本操作 将下列 JSON 格式数据复制到 Linux 系统中,并保存命名为 employee.json. { "id":1 , "name&quo ...

  5. Count PAT's (25) PAT甲级真题

    题目分析: 由于本题字符串长度有10^5所以直接暴力是不可取的,猜测最后的算法应该是先预处理一下再走一层循环就能得到答案,所以本题的关键就在于这个预处理的过程,由于本题字符串匹配的内容的固定的PAT, ...

  6. Spring框架之websocket源码完全解析

    Spring框架之websocket源码完全解析 Spring框架从4.0版开始支持WebSocket,先简单介绍WebSocket协议(详细介绍参见"WebSocket协议中文版" ...

  7. .NET探索平台条件编译

    前言 今天偶然机会,翻了一下大学期间的书籍<C程序设计>,好吧,当我翻着翻着,翻到了符号常量(#define指令)中,是啊,这是一个预处理器指令,记得在Magicodes.IE中针对平台选 ...

  8. 【ORA】ORA-27101快速处理方法

    今天朋友的数据库出了问题,报错如下: 这个问题主要是是spfile和pfile文件不一致导致的, 生成一个pfile,完了用pfile启动数据库即可 SQL> create pfile '/ho ...

  9. 【Samba】共享服务器的搭建和相关权限设置

    1.查看防护墙 [root@zhang~ ]# /etc/init.d/iptables status   iptables:Firewall is not running.   如果没有关闭的话将他 ...

  10. LeetCode590. N叉树的后序遍历

    题目 1 class Solution { 2 public: 3 vector<int>ans; 4 vector<int> postorder(Node* root) { ...