在 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的更多相关文章

  1. 研发效率破局之道 Facebook工作法

    如果你问中国和美国互联网公司都有什么差别,很多人会回答:低效加班文化.最近爆出的996大讨论,通过糙快猛打拼和996加班去抢占市场获得机会的成功案例越来越少.至此,只有提高效能才是出路. 由于软件开发 ...

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

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

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

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

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

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

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

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

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

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

  7. 敏捷史话(五):敏捷已逝 —— Dave Thomas

    " 敏捷已逝,但敏捷精神长存.因为所谓的敏捷专家卖给你的是方法论,而不是价值."当多数人都在从"敏捷"身上榨取利益时, Dave Thomas 成为了一位逆行者 ...

  8. 敏捷史话(六):也许这个人能拯救你的代码 —— Robert C. Martin

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

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

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

随机推荐

  1. F - To Add Which?

    Description There is an integer sequence with N integers. You can use 1 unit of cost to increase any ...

  2. The Balance HDU - 1709 母函数(板子变化)

    题意: 现在你被要求用天平和一些砝码来量一剂药.当然,这并不总是可以做到的.所以你应该找出那些不能从范围[1,S]中测量出来的品质.S是所有重量的总质量. 输入一个n,后面有n个数,表示这n个物品的质 ...

  3. Codeforces Round #656 (Div. 3) B. Restore the Permutation by Merger (模拟)

    题意:有两个完全相同的排列,将其中一个的元素按相对顺序插入另外一个排列中,给你操作完的排列,求原排列. 题解:感觉看看样例就能直接写了啊,直接遍历,用桶存数字个数,如果桶为空,直接输出即可. 代码: ...

  4. WSL2 使用Docker运行.NET Core

    Docker的安装在前面说过了,此处就不说了,我们检查一下版本: 步入正题. 首先,我们为项目创建Dockerfile(无扩展名) 确保Docker是启动状态: 构建镜像,注意名称必须是全部小写(此处 ...

  5. MySQL5.6 与 MySQL5.7 的区别

    目录 编译安装区别 初始化的区别 其他区别 编译安装区别 # 5.7在编译安装的时候多了一个 boost 库 [root@db02 mysql-5.7.20]# yum install -y gcc ...

  6. C# 特殊符号

    特殊符号 @开头 前面提到过,字符串里免转义用的, 字符串里写的啥就是啥,遇到\ 不转义 ?? 判断一个值是不是null,是的话就变成后面的默认值,不是的话就还是原值 $开头 字符串篡改 和forma ...

  7. const,volatile,static,typdef,几个关键字辨析和理解

    1.const类型修饰符 const它限定一个变量初始化后就不允许被改变的修饰符.使用const在一定程度上可以提高程序的安全性和可靠性.它即有预编译命令的优点也有预编译没有的优点.const修饰的变 ...

  8. CSS & new class name

    CSS & new class name { test: /\.((s*)css|sass)$/, // test: /\.(css|scss|sass)$/, use: ExtractTex ...

  9. API 授权 All In One

    API 授权 All In One 身份验证 授权类型 身份验证类型 继承认证 没有认证 API密钥 不记名令牌 基本认证 摘要授权 OAuth 1.0 OAuth 2.0 授权码 隐含的 密码凭证 ...

  10. TypeORM Entity

    TypeORM Entity Entity Entity is a class that maps to a database table when using SQL database(or col ...