天天看点

《程序员的修炼——从优秀到卓越》一一1.9 博伊德迭代法则

本节书摘来自异步社区出版社《程序员的修炼——从优秀到卓越》一书中的第1章,第1.9节,作者:【美】jeff atwood,更多章节内容可以访问云栖社区“异步社区”公众号查看。

程序员的修炼——从优秀到卓越

scott stanfield曾经转发给我一篇roger session的文章,题为“a better path to enterprise architectures”(通向企业架构更好的一条路)。尽管文章的标题带了“企业”这个很泛滥的词,但出乎我的意料,这篇文章写得挺好!

我特别喜欢roger在文中独辟蹊径,使用一组类比来阐明了软件开发中迭代和递归方法的区别。他首先展示了colonel john boyd对于20世纪50年代的喷气式战斗机在操控过程中的独特性能的研究。

colonel john boyd对任何空战都很感兴趣,而对于mig-15和f-86之间的较量尤为关注。作为一名资深飞行员和飞机设计师,boyd对于这两种飞机都非常熟悉。他知道mig-15的性能比f-86更加优异:爬升速度更快,转弯速度更快,可视距离也更远。

f-86也有两个优点。首先,它拥有较宽的视野,相比于mig-15的飞行员可以看到前方更远的地方,f-86的飞行员可以看到飞机侧面的更多情况。其次,f-86拥有液压飞行控制系统,而mig-15的飞行控制系统是手动的。

一般飞机设计师普遍认为,飞机的可操作性是赢得空战的关键因素。毫无疑问,拥有更快的转弯速度和爬升性能的mig-15可以完胜f-86。

但问题在于,尽管mig-15被飞机设计师们认为是优胜者,但飞行员们却更愿意驾驶f-86。原因很简单,在与mig-15的一对一的较量中,10次中有9次是f-86胜出。

一种配置稍逊的飞机如何能持续击败另一种配置优良的飞机?作为史上最优秀的空战飞行员之一,boyd有他自己的一套理论。

boyd认为,空战中取胜的主要决定因素不是观察、定向、计划以及更好地操作,而是观察、定向、计划以及更快地操作。换句话说,能不能取胜就看飞行员能够多快地执行迭代。boyd暗示,迭代的速度胜过迭代的质量。

接下来,boyd提出了另外一个问题:为什么f-86可以更快地迭代?他总结的原因是,f-86装备了液压飞行操纵杆而mig-15只装备了手动操纵杆——在此之前,没人觉得飞行操纵杆有这么重要。

没有液压装备,移动mig-15的飞行操纵杆会比f-86稍微多费一些体力。一旦mig-15的飞行员移动操纵杆,尽管mig-15可以更快转弯(或者爬得更高),但飞行员会消耗更多的体力。

每完成一次迭代,mig-15的飞行员都会比f-86的飞行员更加疲乏一点。随着疲劳的累积,mig-15的飞行员会需要更长的时间才能完成一次oopa迭代——observe(观察)、orient(定向)、plan(计划)、act(操作)。mig-15的飞行员输就输在oopa的速度上。

《程序员的修炼——从优秀到卓越》一一1.9 博伊德迭代法则

这就引出了“博伊德迭代法则”:迭代的速度胜过迭代的质量。

于是你不难发现,在现代软件工程的方方面面都有异曲同工之妙:

单元测试必须要小而快,以便每次编译时都能运行这些测试。

可用性测试这么做最有效:以两周为一个周期来做一些小改动,并且快速抛弃那些不好的部分。

大多数敏捷开发方法都建议,迭代周期不能超过4周。

软件测试就是(在将软件发布之前)让它提早失败,经常失败。

功能规范书最好能简明扼要,并且持续改进。

请记住:疑惑之时,唯有快速迭代方能突围!

继续阅读