什么是YAGNI?
YAGNI 是 You aren’t gonna need it 的缩写。该原则的基本含义就是,不应该开发任何当前不使用的功能。因为这些占用开发成本的功能,可能根本没有人用。而且不仅仅是开发成本打了水漂,你还要不断投入维护成本,来保证这些无人使用的功能可以正常运行。
YAGNI原则之深度思考看似简单,执行不简单
作为一名程序员,一般都具有良好的抽象能力和超前思维。编写更健壮的、扩展性更好的,复用性更强的代码,往往是许多程序员的理想和目标。但是,这种程序员的思维定势也容易将软件开发推向一个大家都不愿见到的局面。常见的不良局面可能是以下几种:
- 过渡设计:十分常见的情况。增加了复杂度不说,不少功能根本无人使用或调用。最终导致开发成本和维护成本都居高不下。
- 重复造轮子:比如,同一公司,各个项目,到处可见功能类似的工具包。大量开发成本被重叠和浪费。
- 框架上的框架:比如,同一公司,各个项目都有自己一套项目小框架,凌驾于基础框架之上。如此这般,维护成本只会越来越高。
(当然,上述情况,尤其是后两种情况的发生,不仅仅是未履行YAGNI原则的问题)
所以,合格的程序员和优秀的程序员之间的区别,有一个重要的标志,就是是否拥抱YAGNI原则。优秀的程序员应该是充分理解YAGNI原则,并且能真正地执行。
YAGNI vs 未雨绸缪/扩展升级
可能有读者要问,YAGNI要求不应该开发任何当前不使用的功能。那难道软件开发就不需要未雨绸缪了,不考虑未来扩展和升级了?
笔者认为:
- YAGNI:本质是实用主义,通过减少不必要的功能,降低复杂度,从而减少无价值的开发和维护成本。它聚焦剔除无回报的成本。
- 未雨绸缪:聚焦预防风险,减少损失。
- 扩展和升级:聚焦未来的开发和维护成本。
3者因关注度不同,并不冲突。
- 首先,预防风险和扩展升级都属于必要功能,都不属于无回报的成本
- 其次,YAGNI作为一种思想也可以应用到后2者。比如预防风险,就一定要判断哪些风险需要预防。再比如,扩展和升级,一定会预先明确扩展升级的范围以及方向。
总结
拥抱YAGNI原则,可以提高开发效率,降低开发和维护成本,避免过度设计等一系列问题。是软件开发过程中的重要且必要原则之一。
网友评论