“技术债就像俄罗斯方块”
根据维基百科的定义,技术债(Technical Debt)是 “编程中的一个概念,反映了当使用短期内易于实现的代码而不是应用最佳的整体解决方案时,出现的额外开发工作”。 技术债可以与金融债进行比较。如果不偿还技术债,则会积聚“利息”,从而导致之后更难以实施更改。 不过,技术债不一定是一件坏事,有时恰恰需要技术债才能推动项目前进。
开发者 Jonathan Boccara 将技术债比作俄罗斯方块。游戏初始,需要从一个空白的页面开始进行,就像从什么都没有的编码项目开头一样。
接着,方块开始掉落,每个方块被放置的位置都会影响游戏的其余部分。如果你在没有太多思考的情况下让方块自由滑落,那么接下来的游戏会变得更为艰难。反之,如果设法构建干净、紧凑的结构,在后期将更易于管理。
每个新的修复程序或开发都像一个新的方块一样,需要与现有代码集成。 如果以快速而肮脏的方式对其进行破解,就好像在俄罗斯方块结构中留下了漏洞。若希望少留些空白或漏洞, 则需要花时间设计一个干净的解决方案,来集成修复程序或开发程序。这不太容易实现,但从长远来看会有所回报。
俄罗斯方块游戏并非总是要求平坦的结构,只要能够有计划地增减和消除即可。 就像为垂直栏留出空间以一次滑入并清除四行一样,具有一种令人愉悦的感觉:
即便留有一些漏洞,也可以在其上方保留紧凑的行,这样可以在清除上方后,填充漏洞。 技术债也是如此,如果能够控制,并且计划在以后偿还,则可以适当增加债务。
当过去的技术债管理不善时,方块堆积至顶部,无法再添加新功能。 在这一点上,前进的唯一方法是回到过去,从而通过重构简化代码。不过,这在真正的俄罗斯方块游戏中无法做到。
另一位同样将技术债比作俄罗斯方块的开发者 Colin O'Dell 认为,必须使用与玩俄罗斯方块类似的思维过程来管理技术债:
- 如何排列先前的块?(当前如何构建代码库? )
- 是否有放置当前块的理想位置?(是否有执行当前任务的理想位置? )
- 接下来会出现什么障碍,它们将如何调试?( 接下来会出现什么功能,它们又将如何适应? )
这样做将使维护现有功能以及引入新的更改和功能变得更加容易。 当你背负技术债时,不妨借鉴俄罗斯方块的思路,或是玩几局游戏,说不定能激发灵感。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Service Mesh 在百度网盘数万后端的实践落地
1 背景 起初,在网盘快速发展期,为了快速上线,采用了服务单体化 + 主干开发模式进行研发,随着用户规模爆发式的增长以及产品形态的丰富,单体化的不足就体现出来了,于是架构上采用了微服务架构,开始对业务逻辑进行拆分部署。 服务拆分之后,也引入了新的问题,具体如下: **请求路由:**服务部署从物理机向虚拟化方式迁移中,有大量的切流量操作,需要相关的上游都进行升级上线修改,效率低下 **故障管理:**单实例异常、服务级别异常、机房故障异常、网络异常等,严重缺失或者不完善,同时配套的故障定位也没有,服务稳定性不足 **流量转发:**不同的服务采用了不同的框架,甚至裸框架,策略不完善,导致负载不均衡 **研发效率:**相同的功能点,需要在不同的语言框架上实现一次,浪费人力,同时升级周期比较长,收敛效率低 2 解决方案 - UFC 2.1 UFC 发展史 为了解决这个问题,从2015年底开始思考解决方案,确定了解决问题的核心在于管控请求流量,在2016年开始自研网络流量转发中间件 - UFC(Unified Flow Control),业务通过同机部署的agent进行服务通信,相关的发展史如下:...
- 下一篇
阿里云IoT Studio服务开发定时关灯功能示例Demo
概述 IoT Studio服务开发是一个物联网业务逻辑的开发工具,通过编排服务节点的方式快速完成简单的物联网业务逻辑的设计。本文主要使用:定时触发、设备和钉钉机器人节点实现对灯泡的定时控制,并将控制后的结果发送给钉钉机器人。本文以官方文档:定时关灯为基础,针对文档中缺少设备属性上报,钉钉机器人配置参考较老等问题,逐一介绍整个链路的完整实现。 Step By Step 1、创建产品和设备,使用Code完成属性上报 1.1 创建产品和设备 1.2 使用开源Java MQTT SDK上报属性,参考链接:基于开源JAVA MQTT Client连接阿里云IoT import com.alibaba.taro.AliyunIoTSignUtil; import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import java.util.HashMap; import java.util.Map; public class IoTDemoPub...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题