写点什么

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

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

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

关注

评论

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

从0搭建在线聊天室,只需4步!

网易云信

JavaScript 的 null 和 undefined 判断

HoneyMoose

富文本及编辑器的跨平台方案

vivo互联网技术

跨平台 编辑器 富文本

Python代码阅读(第11篇):展开嵌套列表

Felix

Python 编程 Code Programing 阅读代码

JVM集合之开篇点题

阿Q说代码

JVM hotspot 8月日更 栈式架构 寄存器架构

计算机字符编码的前世今生

vivo互联网技术

Unicode utf-8 编码 ASCII 字符集

后Kubernetes时代的虚拟机管理技术之Virtual-Kubelet篇

谐云

k8s 虚拟机

用Python爬取《王者荣耀》英雄皮肤数据并可视化分析,用图说话

Python研究者

8月日更

Java双刃剑之Unsafe类详解

码农参上

Java unsafe 8月日更

细数浅拷贝和深拷贝

cxuan

Java 后端

SpringBoot dockerfile生成镜像

Rubble

8月日更

基于昇腾CANN的卡通图像生成可在线体验啦!十分钟带你了解CANN应用开发全流程

华为云开发者联盟

ai框架 CANN 昇腾 昇腾AI应用 图像生成

Compose 列表

Changing Lin

8月日更

MaxCompute执行引擎核心技术DAG揭秘

阿里云大数据AI技术

网络货运平台要智能,安全的数据底座少不了

华为云开发者联盟

数据库 华为云 物流 智慧物流 可视化追踪

解读短小精悍的 Then 框架

fuyoufang

ios swift 阅读代码 8月日更

浅谈在探索数分之路上“数据思维”培养

小飞象@木木自由

数据分析 数据思维

Go1.17正式发布--切片转为数组指针

草原狼

Go 语言

The Data Way Vol.2 | 做个『单纯』的程序员还真不简单

SphereEx

数据库 开源

七步实现列表点击事件的采集

神策技术社区

大前端 后端 代码

Pulsar Manager - Use Docker

ZHOUWEI

Apache Pulsar

Nginx可观测最佳实践分享,一篇文章带你快速入门!

观测云

nginx 云计算

Java 为什么设计成 String 不能用 == 来进行比较

HoneyMoose

高可用架构演进之单元化

华为云开发者联盟

物联网 IoT 华为云

架构实战营模块五作业 -微博评论高性能高可用架构

hello

架构训练营

什么是强化学习?

华为云开发者联盟

机器学习 强化学习 智能体 环境 动作空间

【Vue2.x 源码学习】第三十八篇 - 组件部分 - 组件的编译

Brave

源码 vue2 8月日更

又翻车了?列表点击事件采集那些你不知道的坑!

神策技术社区

数据库 大前端 后端 代码

Regan Yue带你一起学习微软AZ-900认证的有关知识「 第Ⅲ章」

Regan Yue

云计算 微软 8月日更

索信达控股: 银行对公业务数字化营销进阶攻略

索信达控股

OPPO数据湖统一存储技术实践

安第斯智能云

大数据 数据湖 存储

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