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

简介:

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

1.9 博伊德迭代法则

程序员的修炼——从优秀到卓越
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的速度上。

image

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

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

单元测试必须要小而快,以便每次编译时都能运行这些测试。
可用性测试这么做最有效:以两周为一个周期来做一些小改动,并且快速抛弃那些不好的部分。
大多数敏捷开发方法都建议,迭代周期不能超过4周。
软件测试就是(在将软件发布之前)让它提早失败,经常失败。
功能规范书最好能简明扼要,并且持续改进。
请记住:疑惑之时,唯有快速迭代方能突围!

相关文章
|
3月前
|
人工智能 Java 开发者
Java做AI不行?2026年最大的认知误区
2026年,Java做AI已成现实:Spring官方集成DeepSeek,JBoltAI等框架支持MCP协议与Agent工程化落地。Java凭借稳定性、类型安全与现有系统优势,正成为企业级AI应用的首选底座——不换语言,即可构建可运行的AI服务。
401 1
|
消息中间件 存储 Kafka
RabbitMQ、RocketMQ和Kafka全面对决,谁是最佳选择?
1、应用场景 1.RabbitMQ: 适用于易用性和灵活性要求较高的场景 异步任务处理:RabbitMQ提供可靠的消息传递机制,适用于处理异步任务,例如将耗时的任务放入消息队列中,然后由消费者异步处理,提高系统的响应速度和可伸缩性。 解耦系统组件:通过使用RabbitMQ作为消息中间件,不同的系统组件可以通过消息进行解耦,实现松耦合的架构,提高系统的可维护性和灵活性。 事件驱动架构:RabbitMQ的发布-订阅模式可以用于构建事件驱动架构,将系统中的事件作为消息发布到相应的主题,不同的消费者可以订阅感兴趣的主题进行相应的处理。
2014 2
|
7月前
|
人工智能 JavaScript API
AI作词人速成指南:5分钟调用大模型,让汪峰拥有"林夕魂"
本文以“为汪峰创作情歌”为案例,带你用大语言模型实战AI歌词生成。通过5步详解:环境搭建、API调用、提示词设计、优化迭代与效果评估,掌握大模型开发核心技能。涵盖Node.js + OpenAI SDK实战代码,教你如何精准控制AI创作,实现从创意到产品的快速验证。适合所有希望融入AIGC时代的开发者。
|
调度 弹性计算 存储
拆解超算上云的障碍,阿里云用了这三招|E-HPC如何改变云超算?
2019年阿里云上海峰会,由阿里云资深技术专家何万青带来以“阿里云超算E-HPC平台”为题的演讲。本文内容包括了HPC概念及发展趋势,面向“大计算”设计的弹性基础设施,客户应用云上优化,着重介绍了E-HPC自动伸缩,闲时计算方案与混合云,数据全流程可视化以及HPC工作流与数据迁移等。
2384 0
|
10月前
|
监控 算法 NoSQL
Go 微服务限流与熔断最佳实践:滑动窗口、令牌桶与自适应阈值
🌟蒋星熠Jaxonic:Go微服务限流熔断实践者。分享基于滑动窗口、令牌桶与自适应阈值的智能防护体系,助力高并发系统稳定运行。
1208 1
Go 微服务限流与熔断最佳实践:滑动窗口、令牌桶与自适应阈值
|
网络协议 网络安全 PHP
使用天猫精灵实现计算机WOL网络唤醒
解决笔记本连显示器不想掀盖子开机和远程办公时给公司电脑开机不方便的痛点。
16375 8
使用天猫精灵实现计算机WOL网络唤醒
|
机器学习/深度学习 存储 文字识别
图解来啦!机器学习工业部署最佳实践!10分钟上手机器学习部署与大规模扩展 ⛵
如何快速部署机器学习模型?本文是机器学习工业部署的 best practice(最佳实践)!详细讲解了如何操作机器学习开源框架 BentoML,帮助研发团队轻松打包机器学习模型,并重现该模型以用于生产。
2216 4
图解来啦!机器学习工业部署最佳实践!10分钟上手机器学习部署与大规模扩展 ⛵
|
JavaScript
Vue3上传(Upload)
这是一个基于 Vue 3 的文件上传组件,提供了丰富的自定义选项,包括接受的文件类型、是否支持多选文件、上传数量限制、预览图片缩放规则等。组件还集成了多种功能,如拖拽上传、预览图片、自定义上传行为等,并支持不同类型的文件预览图标。组件使用了 `Space`、`Spin`、`Image` 和 `Message` 等子组件来实现多样化的布局和交互效果。此外,通过 `beforeUpload` 钩子可以对上传文件进行预处理,如限制文件大小和类型。整体设计简洁实用,适用于多种应用场景。
848 1
Vue3上传(Upload)
|
存储 安全 Java
傻傻分不清楚?: 一文看懂Java中String的New操作和直接赋值字符串的区别
傻傻分不清楚?: 一文看懂Java中String的New操作和直接赋值字符串的区别
2105 0
傻傻分不清楚?: 一文看懂Java中String的New操作和直接赋值字符串的区别
|
存储 数据采集 边缘计算
Link Edge 介绍| 学习笔记
快速学习 Link Edge 介绍
1299 0