写点什么

Martin Fowler 对于“YAGNI:你不会需要它”这一 XP 实践的评论

  • 2015-06-16
  • 本文字数:1270 字

    阅读完需:约 4 分钟

Martin Fowler 是 Thoughtworks 的著名作者和顾问,他在最近的一篇博客文章中描述了YAGNI 实践,分析了它的重要性以及创建“推定特性”(presumptive feature —— 意指某些已经完成编码,但并未投入实际应用的特性)所造成的成本。YAGNI 是“你不会需要它”(You Aren’t Gonna Need It)的缩写,它是一种极限编程(XP)实践,表示程序员不应为目前还不需要的功能编写代码。

XP 的联合创始人 Ron Jeffries 说道:

只在真正需要某些功能的时候才去实现它,而不是仅仅因为你预见到它将出现。

根据 Cunningham & Cunningham 的 wiki 页面所说:

即使你非常确信将来你需要某个特性,也不要现在就去实现它。在很多情况下,你会发现或许最终你不需要它了,或者是你真正所需的特性与你之前预计的有很大的出入。遵循 YAGNI 实践有两个主要原因:

  • 你节约了时间,因为你避免了编写最终证明不必要的代码。
  • 你的代码质量更高了,因为你使代码不必为你的“推测”所污染,而这些“推测”最终可能或多或少有些错误,但此时这些错误已牢牢地依附在你的代码中了。

Martin 说道,当我们在考虑推定特性时,很有可能我们是错的。在这种情况下,推定特性一个很明显的成本就是整个构建过程的成本,也就是对这个在当下没有用处的特性进行分析、编码以及测试所耗费的精力。他同时表示,假设我们对这个需求的理解恰好是正确的,但即使在这种比较理想的情况下,创建这个推定特性同样会带来两种巨大的成本。第一种成本是软件价值的延误成本,第二种成本是延续这一特性所带来的成本。他是这样解释这些成本的:

延误成本:团队本可以将精力投入到那些能够产生实际收益的特性上。

延续成本:为推定特性所编写的代码增加了软件的复杂性,这种复杂性使得对软件的修改与调试变得更加困难了,因而增加了其它特性的成本。这就为特性的开发造成了额外的成本,并且造成了进一步的延误成本,因为将它投入到生产环境的时间变得更长了。

Martin 还表示,如果特性是正确的,但对它的创建有错误,那么这还会导致额外的修复成本。

开发团队总是在不断地进行学习,一方面要学习他们的用户,一方面也要学习软件的代码。他们要对代码中使用的各种工具进行学习,而且这些工具会不断地更新。他们还需要学习这些代码是怎样配合工作的。以上这几点意味着,你很可能意识到:六个月之前所编写的某个特性并不是按照如今你所认识到的正确方式进行编写的。这样一来,你不仅积累了技术债,而且不得不考虑今后对其重写所带来的成本,或是出于困难而采用临时方案所带来的持续性成本。

Martin 说道,YAGNI 不仅适用于大型特性,同样也适用于较小的特性。将大量较小的 YAGNI 决策累积在一起,就能够使代码的复杂性得到很大程度的简化,同时又能够加速交付需求更紧急的特性。

查看英文原文: Martin Fowler on “Yagni: You Are Not Gonna Need IT” XP Practice


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-06-16 06:142263
用户头像

发布了 428 篇内容, 共 198.7 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

云栖大会Day1:云应用开发平台 CAP 来了

阿里巴巴云原生

阿里云 云原生 云栖大会

海尔连续3年蝉联生态品牌认证“领航者”,飞书获评“突破者” ,共建生态绿洲

ToB行业头条

中国信通院边缘人工智能平台标准首轮评估正式启动

中国信通院AI Infra工作组

一文说清楚ETL与Kafka如何实现集成

谷云科技RestCloud

kafka 数据处理 分析 ETL 数据集成

《科研智能(AI4R&D)——人工智能驱动的研发新范式》正式发布

中国信通院AI Infra工作组

【Tomcat源码分析】从零开始理解 HTTP 请求处理 (第一篇)

派大星

tomcat源码解读

阿里巴巴拍立淘API返回值:商家优化商品信息的深度指南

代码忍者

API 测试 pinduoduo API

LED厂家告诉您LED玻璃幕墙如何设计

Dylan

设计 艺术 LED LED display LED显示屏

活动预告:“大模型时代下AI中台”主题沙龙

中国信通院AI Infra工作组

AI助力低代码平台:从智能化到高效交付的全新变革

天津汇柏科技有限公司

低代码 AI 人工智能

探索高质量大模型推理平台建设路径——大模型推理标准第二次研讨会即将召开

中国信通院AI Infra工作组

大模型训练平台标准第三次研讨会即将召开

中国信通院AI Infra工作组

虚拟人,如何用好这个“外挂”?一定要看看这本书!

博文视点Broadview

“前沿思享会:探索AI+材料新边界”闭门研讨会顺利召开

中国信通院AI Infra工作组

中国信通院可信人工智能基础平台(AI Infra)评估工作正式启动

中国信通院AI Infra工作组

探索高质量大模型训练平台建设路径——大模型训练标准第三次研讨会顺利召开

中国信通院AI Infra工作组

万界星空科技电线电缆行业MES系统核心功能

万界星空科技

mes 万界星空科技 电线电缆行业 电线电缆mes

Apache Doris 2.1.6 版本正式发布

SelectDB

数据仓库 数据分析 LakeHouse 物化视图

中国信通院启动科研智能(AI4R&D)重点标准化方向及参编专家征集工作

中国信通院AI Infra工作组

中国人工智能产业发展联盟正式发布《科研智能(AI4R&D)——人工智能驱动的研发新范式》

中国信通院AI Infra工作组

助力企业降低成本,ByteHouse打造新一代“弹性”云数仓

字节跳动数据平台

数据库 大数据 云原生 Clickhouse 数仓

华为全联接大会2024︱鲲鹏计算产业峰会成功举办

极客天地

京东商品属性的详细api数据解析:颜色、尺寸与材质

技术冰糖葫芦

API Gateway API 接口 API 测试 pinduoduo API

可信AI评估|中国信通院可信AI“大模型一体机”第二批评估正式启动

中国信通院AI Infra工作组

Amazon Bedrock 模型微调实践(二):数据准备篇

亚马逊云科技 (Amazon Web Services)

人工智能

VMware Live Site Recovery 9.0.2 发布下载,新增功能概览

sysin

vmware esxi

云南大理等级保护测评机构在哪里?电话多少?

行云管家

等保 云南

Martin Fowler对于“YAGNI:你不会需要它”这一XP实践的评论_文化 & 方法_Savita Pahuja_InfoQ精选文章