敏捷史话(八):敏捷的破局之道——Martin Fowler
在 Martin Fowler 的世界里,任何事情都有最优解。
1963年,Martin 出生于英格兰的沃尔索尔(Walsall),也在同样位于沃尔索尔的玛丽女王文法学校中接受中等教育。在这里的乡村中,他度过了一段简单、愉快的少年时光。
上了中学之后,Martin 接触到了策略桌游。在桌游的“厮杀”中, 如何从复杂的局势中找出最简洁、直观的破局之法,就成为他想要寻找的答案,也成为日后他解决任何事情的目标。
1986年,Martin 毕业于伦敦大学学院,获得了电子工程与计算机科学的学士学位。自此,Martin 踏入了软件领域。
重构
毕业后,Martin 分别在 Coopers & Lybrand 和一家名为 Ptech 的小型科技公司工作了一段时间。之后,又作为一名独立顾问,为世界各地的公司提供相应的帮助。
在观察了多家公司的工作模式之后,Martin 发现, 由于软件需要不断地修复 Bug 并添加新特性,这会让原本的代码库变得繁杂,导致之后的工作进度越来越缓慢。
举一个很简单的例子:假设我们有一个抽屉,最初,里面只有三四样物品,这样我们很轻松地就能找到并拿出某一物品。但当抽屉内放置的物品越来越多时,再想要找到特定的物品就非常困难了。
那么,如何用一种简单、直观的方式来解决这一问题呢?Martin 想到,为了应对更改逐渐叠加的这一情况,可以用重构代码来减少这些不必要的复杂性。于是,Martin 开始筹备《重构》一书,希望能够将代码重构的实践带给更多的公司与团队。
1991年《重构》出版发行,这本书成功地推动了“重构”实践的普及,帮助程序员们编写出易懂、易维护的代码,同样也开辟了一个“炒熟饭”的市场,指导了企业或开发者,如何将“烂代码”重构。这之后,Martin 又分别于2013年和2018年出版了《重构:Ruby 版本》及《重构:改进现有代码的设计》,以指导职业 Ruby 程序员实践重构,并指出:重构并不是出现在项目计划中的一项特殊任务,而应该是编程活动中的一个常规部分。
Martin 认为,重构其实很简单,只需将复杂的事情拆分开。
《敏捷宣言》
随着应用软件的蓬勃发展,软件开发的升级成本越来越高,Martin Fowler 开始转而追寻软件开发的最佳实践,“轻量”方法论渐入人们的视野。
随后,Martin 为了形成全面运动的核心,开始同 Robert C. Martin、Alistair Cockburn 着手组织一个关于“轻量”方法论的聚会。
会中,Martin 与 Ward Cunningham 两人对会议进行了全面的调节,快速制定出了会议流程与决策方法。就这样,雪鸟会议开始了。
回忆起二十年前的那场会议,Martin 认为,参与雪鸟会议的这十七个人并没有什么特殊之处,他们也并不是唯一拥有这些价值观和原则的人。他们在随后掀起的敏捷运动中没有任何特殊的地位,也并没有要把自己建立在这样一个地位上的愿望。
实际上, 对于敏捷软件的未来,每个人都拥有发言权。
“bliki”的诞生
对 Martin 来说,记录是一个非常好的习惯。一方面,在与行业伙伴进行深入交流后,能够产生一些灵感碰撞产生的火花;另一方面,他会亲自思考实践并抽象总结,然后通过出版物、博客、网站等,同大家分享自己的理念。
Martin 的写作之路,早在20世纪就出现了苗头。90年代末,Martin Fowler 为《分布式计算》写了一篇专栏。同时,Martin 接触到了一位出版社编辑,也陆续在 Addison-Wesley 公司出版了一系列的书籍,包括:《分析模式:可重用对象模型》、《UML 精粹:标准对象建模语言的简明指南》、《重构:改进现有代码的设计》等。
在21世纪初,Martin Fowler 又在《IEEE软件》杂志的设计专栏做了五年的编辑。这几段专栏作者以及编辑的经历让 Martin 体验了从文章产出、校对到发表的全流程。与需要经过复杂校对审核的流程相比,Martin 更倾向于自己掌握主导权。
与此同时,blog 开始流行,很多人开始迈入 blog 大军的行列,Martin 也跃跃欲试。但在接触了 blog 后不久,他对此有了一些微词。在他看来,blog 中简短的文字就如同天空中的烟花: 稍纵即逝、无法保留。给他类似感受的,还有 wiki——一个很容易就会导致信息复杂、冗长的网站。因此,他决定创建一个介于 wiki 和 blog 之间的网站,既能像 blog 一样发布一些简短的想法,又能像 wiki 一样建立一个交叉链接的主体。
很快,一个名为“martinfowler.com”的 bliki 网站诞生了。一开始,Martin 会在网站上时不时地更新自己的文章,文章内容涵盖了软件开发领域的方方面面。随着网站越来越受欢迎,他认为,是时候以这一网站为平台来帮助更多作者增加曝光度了。所以,Martin 开始在网站中逐步增加他人的文章,并对收到的每一篇文章都进行仔细地审查,以确保网站内容的质量。
现今,已年近古稀的 Martin Fowler,同妻子住在波士顿市郊。在工作之余,他们会去度假、摄影、徒步,也会将沿路的风景、人文分享给自己的读者。这些日常不仅带给了 Martin 很多工作中的灵感,也激发了他写作的动力。或许, 问题的最优解,就藏在生活的每一处小细节中。
敏捷史话(八):敏捷的破局之道——Martin Fowler的更多相关文章
- 研发效率破局之道 Facebook工作法
如果你问中国和美国互联网公司都有什么差别,很多人会回答:低效加班文化.最近爆出的996大讨论,通过糙快猛打拼和996加班去抢占市场获得机会的成功案例越来越少.至此,只有提高效能才是出路. 由于软件开发 ...
- 敏捷史话(十二):你现在接触的敏捷也许是“黑暗敏捷”——Ron Jeffries
他很少提起往事,也不再提及二十年前那场引起软件行业变革的会议,他专注于当下,一直活跃在敏捷领域.八十多岁的他依然运营维护着网站和博客,是极限编程网站 XProgramming.com 的作者,该网站是 ...
- 敏捷史话(十三):我被 Facebook 解雇了——Kent Beck
2011年,Kent Beck 加入了 Facebook .那时候的他已年过半百,几十年的经验让他自认为非常了解软件行业.在 Facebook 的新手训练营期间,Kent 开始意识到,Facebook ...
- 敏捷史话(十五):我发明了敏捷估算扑克牌 —— James Greening
雪鸟会议 雪鸟会议前夕,James Grenning 在 Object Mentor 与 Robert C. Martin 一同工作,彼时组织雪鸟会议的 Bob 大叔盛情邀请 James,告知他会议的 ...
- 敏捷史话(一):用一半的时间做两倍的事——Scrum之父Jeff Sutherland
普通的人生大抵相似,传奇的人生各有各的传奇.Jeff就是这样的传奇人物,年近80的他从来没有"廉颇老矣尚能饭否"的英雄迟暮,不久前还精神矍铄地与好几百名中国学生进行线上交流,积极回 ...
- 敏捷史话(四):敏捷是人的天性 —— Arie van Bennekum
敏捷是人的天性,是你与生俱来的东西.面对敏捷,Arie van Bennekum 下了这样一个结论. 但这并不意味着人们只能通过天赋获得敏捷,对于想要学习敏捷的人来说,敏捷绝不是仅仅靠学习僵化的框架. ...
- 敏捷史话(五):敏捷已逝 —— Dave Thomas
" 敏捷已逝,但敏捷精神长存.因为所谓的敏捷专家卖给你的是方法论,而不是价值."当多数人都在从"敏捷"身上榨取利益时, Dave Thomas 成为了一位逆行者 ...
- 敏捷史话(六):也许这个人能拯救你的代码 —— Robert C. Martin
Robert C. Martin( 罗伯特·C·马丁),作为世界级软件开发大师.设计模式和敏捷开发先驱.C++ Report杂志前主编,也是敏捷联盟(Agile Alliance)的第一任主席,我们尊 ...
- 敏捷史话(七):从程序员、作家到摇滚乐手——Andy Hunt的多面人生
与其说 Andy Hunt 是敏捷宣言的创始人,不如说他是一名专业作家来得更为合适.他的<实用程序员><程序员修炼之道:从小工到专家><编程 Ruby:实用程序员指南&g ...
随机推荐
- Codeforces Round #655 (Div. 2) D. Omkar and Circle
题目链接:https://codeforces.com/contest/1372/problem/D 题意 给出奇数个数围成的环,每次可以将一个数替换为相邻两个数的和并删除相邻的两个数,问最后余下的数 ...
- Codeforces Round #682 (Div. 2) B. Valerii Against Everyone (思维)
题意:给你一组数\(b\),对于每个\(b_i\),相对应的\(a_i=2^{b_i}\),问你是否能找出两个不相交的区间,使得两个区间的\(a_i\)的元素和相等. 题解:对于任意一个\(2^k\) ...
- Codeforces Round #641 div2 B. Orac and Models (DP)
题意:有一个长度为\(n\)的序列\(a\),求一个最长上升子序列,且这个子序列的元素在\(a\)中的位置满足\(i_{j+1}modi_{j}=0\),求这个子序列的最大长度. 题意:这题假如我们用 ...
- Codeforces Round #668 (Div. 2) B. Array Cancellation (思维,贪心)
题意:有一个长度为\(n\)并且所有元素和为\(0\)的序列,你可以使\(a_{i}-1\)并且\(a_{j}+1\),如果\(i<j\),那么这步操作就是免费的,否则需要花费一次操作,问最少操 ...
- git仓库更换远程地址
首先进入项目所在文件夹,右键git bash (1)查看当前的远程地址 git remote -v (2)删除当前的远程地址 git remote rm origin (3)添加远程地址 git re ...
- kafka消息队列、环境搭建与使用(.net framework)
一:kafka介绍 kafka(官网地址:http://kafka.apache.org)是一种高吞吐量的分布式发布订阅的消息队列系统,具有高性能和高吞吐率. 1.1 术语介绍 BrokerKafka ...
- C#之抛异常
using System; namespace Demo { class Program { static void Main(string[] args) { try { BLLLayer(); } ...
- 为什么['1', '7', '11'].map(parseInt) returns [1, NaN, 3]?
前言 早上收到Medium的邮件推送,看到这样一篇文章:Why ['1', '7', '11'].map(parseInt) returns [1, NaN, 3] in Javascript 看定义 ...
- 【luogu AT3957】[AGC023F] 01 on Tree
01 on Tree 题目链接:luogu AT3957 题目大意 有一棵根为 \(1\) 的树,每个节点有个值 \(0\) 或 \(1\). 然后每次你可以把一个没有父亲的点删除,然后把值放进一个数 ...
- Mysql主从架构
Mysql主从架构 1. 克隆虚拟机 克隆的虚拟机的网络适配,使得虚拟机可以进入局域网 vi /etc/sysconfig/network-scripts/ifcfg-eth0 删除 HWADDR所在 ...