2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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:142053
用户头像

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

关注

评论

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

网心科技荣获第二十届“深圳知名品牌”荣誉称号

网心科技

数据剖析更灵活、更快捷,火山引擎DataLeap动态探查全面升级

字节跳动数据平台

聆心智能联合洪恩打造“AI问答”|国内首批儿童启蒙成长领域类ChatGPT式应用

硬科技星球

IOS技术分享| 快对讲2.0会议场景实现

anyRTC开发者

ios 音视频 视频会议 移动开发 快对讲

Mac苹果电脑如何设置色彩滤镜?

Rose

MacBook 苹果电脑使用教程 色彩滤镜功能 Mac使用

MAMP Pro(web开发环境)MAMP Pro使用技巧概述

Rose

MAMP Pro破解 MAMP Pro Mac下载 web环境开发 MAMP PRO激活码 MAMP Pro安装教程

提升打字速度,Master of Typing 3中文很简单~

真大的脸盆

Mac Mac 软件 打字练习 打字软件

在行 | “数智”为离散制造发展注入动能

用友BIP

Prompt learning 教学[基础篇]:prompt基本原则以及使用场景技巧助力你更好使用chatgpt,得到你想要的答案

汀丶人工智能

人工智能 自然语言处理 深度学习 ChatGPT prompt learning

购买小间距led显示屏需要注意什么?

Dylan

图像 像素灰度 LED显示屏

谷歌全线反击!PaLM 2部分性能已经超越GPT-4

引迈信息

低代码 Google ChatGPT JNPF PaLM 2

八股MQ007——浅谈Broker的网络架构

Codyida

后端、

“三问五步”落地医疗行业数据安全建设体系|盾见

极盾科技

数据安全

来了!昇腾MindStudio全流程工具链分论坛精彩回顾,助力高效开发和迁移效率提升

极客天地

JMeter笔记5 |Badboy使用和录制

Jmeter 性能测试 自动化测试 接口测试 脚本录制

解决centos的mysql服务3306端口无法远程连接10038问题

北桥苏

MySQL 安装宝塔

如何使用apache的ab压力测试小工具传参数

北桥苏

AB apche A/B 测试

PhotoBulk:Mac上批量调整图片大小、分辨率、添加水印和转换格式的工具

Rose

苹果软件资源站 PhotoBulk for Mac 图片水印添加 批量调整图片 PhotoBulk Mac破解版

共筑数字化未来 金山办公携手华为云完成文档中心和GaussDB适配

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

从立项到发布仅三个月,开源技术问答社区 Answer 是如何诞生的?

万事ONES

流控验证太麻烦?不敢上生产?MSE 有办法!

阿里巴巴云原生

阿里云 微服务 云原生 Spring Cloud Apache Dubbo

2023年北京.NET线下技术沙龙来了!大咖分享,还有精品好礼等你

MASA技术团队

.net MASA

ATLAS.ti 8 for Mac(定性数据分析工具) v8.4.4汉化版

Rose

数据分析 苹果软件资源站 ATLAS.ti 8 ATLAS.ti 8 Mac破解版

开源字节数字化乡村系统

源字节1号

开源 软件开发 小程序开发

让开发者成为创新主体 | 阿里云云原生4月动态

阿里巴巴云原生

阿里云 云原生 月报

如何向大模型ChatGPT提出问题以获得优质回答:基于AIGC和深度学习的实践指南

GPU算力

Mac电脑显示“打不开“XXX”,因为它来自身份不明的开发者的解决办法

Rose

Mac软件打不开 苹果软件 app已损坏

泰裤拉,安卓反编译居然可以这么简单——Jadx

吴脑的键客

Android 14 Beta 正式亮相, OPPO 连续五年稳居适配第一阵营

科技热闻

iOS MachineLearning 系列(15)—— 可进行个性化更新的CoreML模型

珲少

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