重构,不要积压!

本文讲的是重构,不要积压!,


最近有很多关于重构的讨论或问题出现在清单和会议上,这些讨论和问题围绕着是否要将重构的“故事”放入积压工作中。即使“技术债”变多,这还是一个毋庸置疑的坏主意。原因如下: 

项目开始的时候,代码是空白的。工作的区域平坦干净,生活是美好的,这个世界是属于我的。一切看起来都那么美好。 

我们可以轻松顺利地建立起功能,哪怕我们似乎总会遇到一些波折。除了有点匆忙,一切看起来都是那么完美。我们不会注意到任何弊漏而且会迅速地让新功能上线。 

然而,我们就让一些灌木丛生长在我们近乎完美的代码中。有时人们称之为 “ 技术债务 ”。但这些灌木丛只不过不是很好的代码,其实它们看起来也不是太糟糕。 

正如我们画的图,我们不得不绕过这些灌木丛,或者推开它们。通常我们会绕道而行。 

不可避免的是,这会减慢我们的速度。为了保持速度,我们甚至会比以前更粗心,灌木丛自然而然越冒越多了。 

新的灌木丛堆在旧的灌木丛上,严重放慢了我们的进程。我们意识到这个问题,但我们太急于抵达终点。我们迫切地想要保持我们早期的速度。 

不久以后,我们工作中有一半的代码背负着应付杂草、灌木丛、矮树丛和各类障碍。甚至可能有一些旧罐头和脏衣服藏在某处。也许还会遇到一些坑。 

每趟穿越混乱代码区域的旅程都变成了一场躲避灌木丛、避免踩到坑的长途跋涉。然而,我们还是会掉进其中的一些坑里,然后爬出来。我们会比之前更慢。这时候我们必须要改变。 

现在我们的问题非常明显,我们看到,我们不能只是在该领域快速地掠过,只做好自己的事。我们还有很多的重构要做,来恢复一片干净的领域。我们不禁要向产品负责人索取重构的时间。这种索求往往是不被允许的。不会有人愿意为我们过去所搞砸的东西背锅。 

如果我们真的有那个时间,我们也不会得到一个相当好的结果。我们会在可用的时间里,尽我们所能地整理我们所理解的东西,尽管这时间永远不够用。尽管我们花了几个星期来把代码弄得那么糟糕,可是我们肯定不会再去花几个星期把它修改好。

这是一个死胡同。一个巨大的重构 session 是很难出售的,即使卖了,经过长时间的延迟,我们也不会得到我们所期待的回报。这不是一个好主意。我们应该做些什么呢? 

太简单了!我们要求下一个功能按我们的需求而建造,而不是绕开周围的杂草和灌木。我们花时间清理出一条路来。可能我们也会绕开一些障碍。因为我们只是改进需要使用到的代码,忽略掉没被使用的部分。我们得到了一个干净的工作环境。很可能,我们还会再次访问这个地方:这就是软件开发工作。

也许这个功能需要更多的时间去建设。但通常它不会,因为通过清除可以帮助到我们,哪怕是第一个功能。当然,它也将帮助到任何其他人。 

反复清理。每当出现一个新功能,我们就要清洗一遍这片代码区域。在产生垃圾的同时,我们只需要投资多一点时间,不需要多,通常很少。特别是随着过程的推移,从我们清理开始,我们的优势会越来越明显,进程会变得越走越快。 

很快,通常在我们开始清理的这个迭代周期内,我们能发现后续功能正使用了之前刚清理的这块区域。我们开始从增量重构中得到好处了。如果我们等着在一个大批次进行重构的话,我们需要付出更多努力,任何好处都会被延迟,而且很可能会无功而返。

工作变的更好,代码变得更干净,提供的功能比以前更多。各个方面都得到了显著的提高。

这事你就这么办吧。





原文发布时间为:2016年10月31日


本文来自合作伙伴掘金,了解相关信息可以关注掘金网站。

时间: 2024-10-01 09:26:40

重构,不要积压!的相关文章

新闻发布系统,SQLHelper重构

在清楚把握牛腩新闻发布系统的需求,以及对系统的数据库也做好了相应的设计后,接下来的几天里就是对后台代码的编写. 在视频中,采用的是经典三层的框架,这对于已经经历过机房重构的我们来说,敲代码还是很容易上手的. 相信大家都不会忘记机房重构中我们的一个好助手,那就是SQLHelper. 在机房重构的时候,看了很多博客,大家都用上了,也都觉得好用,我也就直接借鉴而来.在自己一步一步调试的时候,在自己的程序出现Bug的时候,真的发现SQLHelper的好处多多.但自己也没有去认真研究过这样一个类究竟是怎么

产品前端重构(TypeScript、MVC框架设计)

最近两周完成了对公司某一产品的前端重构,本文记录重构的主要思路及相关的设计内容. 公司期望把某一管理类信息系统从项目代码中抽取.重构为一个可复用的产品.该系统的前端是基于 ExtJs 5 进行构造的,后端是基于 Asp.net MVC 提供的 REST 数据接口.同时,希望通过这次重构,不但能将其本身重构至可用于快速二次开发的产品,同时还要求该前端代码要保证相对的独立,使得同时可以接入 .NET 和 JAVA 两个不同的后端平台所提供的数据接口.   旧代码的问题 老系统的前端代码如下图所示:

浅谈遗留代码的重构

             背景 <重构>诞生至今有近17个年头了,日常开发中大家谈到重构,要么非常随意,认为重构就是改代码:要么非常谨慎,把重构描述成焦油坑,像瘟神一样敬而远之.针对最具挑战性的遗留代码重构,有哪些需要注意的呢? 谈论任何事情,都该有它的上下文.本文谈论的技术背景是大型通信类产品,对于互联网产品不一定适用.另外,本文也不会涉及重构技术,有兴趣读者可以读<重构>或者<Effective Refactoring in C++>. 遗留代码重构决策表 遗留代码

Hi,我们的代码重构了

 作为一名程序员,我最大的愿望是自己写的代码,能够被人称赞,一直留存在项目里,直到永远.能够让自己的代码一直留存在项目里,一方面自己写的代码要健壮,没有任何逻辑错误.另一方面,还要具有很好的扩展性,能够适应需求的变化.对于前者来说,只要有个两三年的基本功,基本上就能保证代码的质量.然而,要写出具有扩展性的代码,却是一件比较困难的事情.       不是因为具有可扩展性的代码不好写,而是因为这个度不好把握.我们知道系统的可扩展性总是与系统的业务和性能成反比,因此,我们不会在追求系统的扩展性上而忽略

重构-使代码更简洁优美:实际经验之谈(提供一技巧,让你省掉N多代码)

这几天没怎么写文,因为在用 CYQ.Data  框架 重构以前的一个博客源码,而在重构的过程中,最关键的就是简化代码了.   今天,我将说一个很典型的示例,看完本示例后,不要惊讶,不要怀疑,它不是神马,也不是浮云,   而是很实在的一种方式,能让你节省了N多的代码,让你的代码看起来更简洁优美.   而这里说的一个很典型的示例,是从我目前重构中的博客中应用而来的:   一:正常的开发方式   1:扫一眼当前的项目解决方案   2:说说Module库 一般我们很常见的会有一个页面基类,当然各花叫法不

做个好重构不容易 怎样才算一个好重构?

文章简介:如何做一个好重构. 用这个标题,是因为前一段时间组里有一个开放式讨论:怎样才算一个好重构?其实,"好"与"坏"向来都是相对的,因为每个人眼中看待"好"与"坏"的标准不一样,不如从自身的角度考虑一下:如何做一个好重构? 先来看一个平时我们遇到的最多的两栏布局: 计算">基本的html代码: 来看具体的CSS代码实现(忽略margin): 很明显在保持同样html结构的情况下,实现两栏布局可以有多种CSS

关于“网站重构”概念解析

概念|网站重构 近来大家总是在标准上争论不休,其实,这些问题一些相关文章已经说得很明白了. 以下我就谈谈我的看法.本帖子有太多的"我认为",说明了我只是想把我的想法拿出来跟大家商榷,或许有太多不对的地方,也请大家一一指出. 1.我对web标准的理解 所谓的web标准,在一些教程文章上已经得到结论:结构化标准(XHTML.XML).表现标准(CSS.XSLT?).行为标准(DOM.ECMAScript).这些东西在网上一搜一大把,在这里我就不多说了.我只说我自己的想法: a.标准是相对的

网页的HTML结构进行重构:语义化标签的意义

文章简介:语义化标签的实战意义. 我收集到一些观点,大家姑且先听上一听,有人说:"没必要考虑语义化,只要我写的代码浏览器运行后没问题就行,反正领导根本不关心这些""语义化是w3c推广的,我是很想语义化我的代码,但总是用不明白""这个不好说,语义化再好有啥用,关键是有好的项目,客户才是金主!""除了专业人士,谁会去看我们的代码是不是语义化的" 不仅仅有页面重构人员的声音,也听一听工程师.设计师.还有项目管理人员,他们是怎么看&q

闪客帝国网站重构访谈

网站重构   高大勇 [ 资料 ] 网名:边城浪子著名FLASH门户闪客帝国创始人闪客帝国副总经理李超 [ 资料 ] 网名:Allan闪客帝国网站运营总监闪客帝国网站技术总监网易学院: 请问你们是怎么想到要用XHTML+CSS2.0技术对闪客帝国进行重新构建的呢? 边城浪子: 这次改版已经酝酿了很长时间.在这期间,我们了解了很多的关于W3C标准的知识,闪客帝国的前身就是一个专注于技术的网站,我们觉得在这方面不应该落后.当然也考虑到浏览器友好以及维护的方便,所以,经过谨慎考虑,我们决定采用Web标