写点什么

临时代码、可持续代码以及二者之间的一切

  • 2010-03-25
  • 本文字数:1122 字

    阅读完需:约 4 分钟

有些代码经过良好的测试和重构,而且要长久存在下去。有些代码打算在几天内就抛弃掉。在这两个极端之间,有很多灰色地带。人们在开发处于灰色地带的代码时,打算稍后做清理,却从未完成。

William Pietri 从开发人员和业务人员的两个角度,分析了代码的相关成本。在 William 看来,代码可以分为 3 种类别:

  • 临时的——开发的代码打算在短时间内抛弃掉。
  • 可持续的——打算长久存在的代码,经过团队的良好重构和理解,还经过有力的单元测试,并且易于维护。
  • 半途而废的——一切都没有完成。临时的快速修复从未得到修复,成为永远的麻烦。匆忙之作。

William 提出:故事中有一部分很有趣。在开发人员和业务人员之间,对于代码相关的成本感觉不同。他给出了下面的比较:

业务人员 开发人员 临时的

可持续的

半途而废的

因此,利益干系人最喜欢半途而废的选择,因为成本不高,而且仍能交付他们想要的价值。这是非常严重的错误。William 认为,比较代码成本,要看长期成本和短期成本,而不是看角色。他提出:

短期成本 长期成本 临时的

可持续的

半途而废的

长期来看,半途而废的代码成本要高得多,而且会伤害业务。另一方面,尽管可持续的代码也许在开始时看起来成本高昂,但最终,经过长期运转后,可以说是“物美价廉”。

当然,那对开发人员来说不算糟糕,受影响的是公司整体。如果公司在软件方面的成本不断增加,对于在软件开发方法方面深思熟虑而且规范严谨的竞争对手来说,他们将会获得强有力的竞争优势。

Alex Chaffee 评论了上面三个分类,同时指出:在他看来,可持续的代码=测试+半途而废的代码+重构。 Chris Sterling 同样同意 William 的看法,他说:

过高业务期望值+工程人员的弱势反弹=高昂的技术债务,并导致工程方面的糟糕表现

Alberto Gutierrez 做出类似分析,提出看待代码的不同机制。他基于简单性和可扩展性,将代码的打分设定为从 A 到 F 。简单性定义了代码理解和阅读的难易程度。可扩展性定义了向现有代码中加入功能的难易程度。A 至 F 的范围定义了从最出色的代码到必须重新来过的代码这两个极端。

分析再次指出一个事实:最好的代码是既简单又可扩展的。这又映射到了 William 提出的可持续的代码种类。

那么,如何避免处于灰色地带?

在 William 看来,要让利益干系人知道:代码在长期的表现能够帮助团队交付业务价值。这也有助于团队避免技术债务的陷阱。一旦人们了解了这一点,那就更容易区分可持续的代码和处于中间阶段的代码。

很多项目就像我见过的一样,是半途而废的代码,却像可持续的代码那样得以销售。这很危险,就像牛仔程序员一样,他们冲进来拯救危机,离开时剩下很多半途而废的代码,让别人去解决。

查看英文原文: Temporary Code, Sustainable Code and Everything in Between

2010-03-25 22:241962
用户头像

发布了 143 篇内容, 共 31.8 次阅读, 收获喜欢 8 次。

关注

评论

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

毕业总结

michael

架构实战营 #架构实战营 「架构实战营」

ORACLE进阶(二)视图详解

No Silver Bullet

oracle 视图 7月月更

【LeetCode】粉刷房子Java题解

Albert

LeetCode 7月月更

Spring Cloud Alibaba 2.2.8 版本发布与社区未来规划介绍

阿里巴巴云原生

阿里云 云原生 spring cloud alibaba

Spring Cloud源码分析之Eureka篇第一章:准备工作

程序员欣宸

Java spring SpringCloud 7月月更

到底什么才是DaaS数据即服务?别再被其他DaaS概念给误导了

雨果

DaaS数据即服务

SAP UI5 应用的主-从-从(Master-Detail-Detail)布局模式的实现步骤

Jerry Wang

前端开发 SAP UI5 ui5 web前端开发 7月月更

毕业设计项目

michael

架构实战营 #架构实战营 「架构实战营」

如何有效远程办公之我见 | 社区征文

踏雪痕

远程办公 居家办公 初夏征文

EventBridge 在 SaaS 企业集成领域的探索与实践

阿里巴巴云原生

阿里云 云原生 SaaS 事件总线

从0到1建设智能灰度数据体系:以vivo游戏中心为例

vivo互联网技术

数据分析 根因分析 数据分析体系

高中肄业,从月薪1000到几亿融资的创业者,是它拯救了我!

博文视点Broadview

关于对JavaScript变量提升的理解

是乃德也是Ned

JavaScript 前端 7月月更

如何远程办公更有效率 | 社区征文

宇宙之一粟

效率 居家办公 初夏征文

函数计算异步任务能力介绍 - 任务触发去重

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

JDBC 进阶

武师叔

7月月更

【Python技能树共建】Beautiful Soup

梦想橡皮擦

Python 7月月更

自主工业软件的创新与发展

Geek_2d6073

国内酒店交易DDD应用与实践——代码篇

Qunar技术沙龙

架构

程序员的焦虑

沃德

程序员 7月月更

资深工程师的技术方案思考模型

刘绍

方法论 工程师 软件设计 技术方案 程序员进阶

免费商城系统源码——如何选择?

开源直播系统源码

二次开发 免费源码 商城源码 免费商城源码

CSS 文本阴影 text-shadow 悬停效果

南城FE

前端 动画 HTML5, CSS3 7月月更 hover

小程序直播 + 电商,想做新零售电商就用它吧!

CRMEB

图解网络:什么是热备份路由器协议HSRP?

wljslmz

网络技术 路由协议 7月月更 热备份路由器协议 HSRP

疫情来袭--远程办公之思考|社区征文

桑榆

初夏征文

叮~您有一封Vue.js挑战邀请函,请查收

😶

JavaScript vue.js 前端 前端开发 开源项目

Container killed by YARN for exceeding memory limits

怀瑾握瑜的嘉与嘉

spark 7月月更

Qt如何实现打包,实现EXE分享

小肉球

qt 7月月更

Go 语言入门很简单:Go 实现凯撒密码

宇宙之一粟

密码学 Go 语言 7月月更

程序员转方向

沃德

程序员 7月月更

临时代码、可持续代码以及二者之间的一切_研发效能_Vikas Hazrati_InfoQ精选文章