专栏名称: Cocoa开发者社区
CocoaChina苹果开发中文社区官方微信,提供教程资源、app推广营销、招聘、外包及培训信息、各类沙龙交流活动以及更多开发者服务。
目录
相关文章推荐
花果科技  ·  iOS 18.4 ... ·  2 天前  
花果科技  ·  iOS 18.4 ... ·  2 天前  
51好读  ›  专栏  ›  Cocoa开发者社区

浅议技术债

Cocoa开发者社区  · 公众号  · ios  · 2017-01-02 08:06

正文

▲点击上方“ CocoaChina ”关注即可免费学习iOS开发



译者:众成翻译--主小席


作为一名前端架构咨询师,在为客户服务期间,我曾花费大量精力去评估客户的系统。我需要从那些庞大、老旧又难以维护的系统中甄别出优质代码和不良代码,并判断哪些问题属于技术债。


不良代码与技术债的契合程度如此之高,令我一直以来如鲠在喉,不吐不快。就该问题,我要用下面这句话来表达我的观点:


技术债不等同于不良代码,不良代码也不等同于技术债


有时候,不良代码就是不良代码,不要动辄就称技术债。开发人员明明是完成了低质量的工作,却非要冠以技术债的名义,实在是有粉饰能力不足的嫌疑。


技术债是一个经常被误解的表述。错误地将那些老旧、维护困难甚至令人厌恶的代码与技术债混为一谈的话,是在刻意回避代码库的问题,而这些问题往往才是根源所在。


是时候认真探讨一下技术债了。


当我们说到技术债这个词的时候,究竟是在说什么?


根据 定义 ,所谓技术债,区别于工程中的不良代码,它是程序员采用的一种主动性、策略性的方案。债务不是偶然发生的,它是人们在特定的情况下,为了能够立即获得某些东西,采取暂时性亏欠并承诺未来连本带息一起偿还的一种行为。


举例来说


假设你在为一个SaaS产品做前端开发,你们的销售团队正在努力争取一个非常重要的大客户,如果不能把握住的话,将会使公司损失惨重。此时客户要求:只要能使用客户公司的品牌给你们的产品增加主题,他们就可以签署合同。可是你们的CSS架构在设计之初就不具备包含主题的功能,同时眼下也没有什么良好简洁的方式来给代码库快速增加主题功能。


于是,你和公司商务部决定在两天内给产品强行植入一个主题。这种简单粗暴的方式,将会使你们的代码变得混乱且丑陋不堪。可是因为该客户实在太过重要,即使是CSS写得不太妥当,也只能暂且从权。 这就是我所说的技术债。

其后,你们交付包含主题的产品,客户签订合同,双方皆大欢喜。而此时的你(以及商务部)则需要做出决策:


  1. 回去把主题作为一项核心功能,增加到公司的CSS代码架构中。同时将先前临时添加的主题纳入正式的代码框架。

  2. 或者什么都不用管。因为到目前为止一切相安无事,客户已经完成付款,而且双方也已各取所需。看起来已经没有再投入时间和精力来收拾残局的必要了。


选1,偿还技术债;选2,无视之。


选择1:限于当时的情况和条件,你已经尽己所能。你知道如果不是形势所迫,本可以有更好的办法。此刻的你,就是要把更优的方案付诸实施。


选择2:你就是在逃避偿还债务的责任。而且这样做,会使还债的代价随着日积月累而不断增加。之后你还会遇到更多麻烦:


  1. 你的SaaS产品为你的一个客户提供了主题功能;

  2. 之后,另一个潜在客户可能也会要求给他们的产品同样增加主题。

  3. 面对这样的要求,你既无法拒绝,也无法立即满足;

  4. 于是你强行植入另一个主题,从而又增加了一笔技术债;

  5. 后面还有一连串的主题等着你继续添加,债务将会越积越深。


你令 软件熵 不断攀升,却丝毫没有要解决现有问题的打算。


然后,类似的需求接踵而至,你不得不一而再再而三地植入新的主题。债务越积越深,而你却无力偿还。经历了相当长一段时间之后,代码会变得臃肿不堪且难以维护。最后你不得不把所有东西推倒重来。然而最痛苦的地方在于,此时你所付出的代价,比你在最开始就选择还债所付出的代价还要多。2天时间的应急方案,再加上5天时间做重构,也依然要比之后花好几周时间重写CSS代码耗时更少。你的技术债策略最终变成了一次大败亏输的经历。


其实不良代码原本可以避免。当初摆在你面前有两条路:正途亦或捷径。在明知道可以走正途的情况下,当初选择走捷径的你绝非一时糊涂。偿还债务的过程是一条艰难的自我救赎之路。


优良债vs不良债


迫于形势而欠下的技术债本无可厚非,前提是你要心思偿还。技术债也可以成为解决商业问题的一种有效手段,当然,事后补救的过程是必不可少的。不过这并不意味着所有形式的债务都是可以被等同看待。现实世界的债务也要分三六九等。


优良的债务可以是:


  • 抵押贷

  • 学生贷

  • 商业贷


有好多种形式的债务,它们可以采取有效的手段来确保债务人具备偿还债务的能力。这些债务的选择,是你经过深思熟虑后的结果,因为它能鞭策你去赚更多的钱,是能为你带来切实利益的。


商业贷,它会抵押你的设备和房产,通过借钱使你企业盈利的方式,来确保你有还贷的能力;学生贷,则会确保你未来能够找到工作从而有能力还债。


这些类型的债务都是债务人审时度势、权衡利弊后所做的抉择,通过举债实现短期获益并且需要明确知悉——将来我有偿还的能力。


反过来,不良债务就是类似于:


  • 为了去赌城而向高利贷举债1万美金;

  • 为了买新电视选择小额短期贷(又称“发薪日贷”);


这样的行为。


以上这些债务,它们只能供你挥霍,却无法保证你偿还。最终往往还会导致你入不敷出。你真的要为眼前这一点蝇头小利而弃长远责任于不顾么?


判断债务好坏的最好办法,就是比较眼前获利和长远付出,看谁的代价更高。

前文说到的添加主题的问题,只要能够按时偿还,就属于优良债务(如果不还,任何债务都将成为不良债)。“权宜行事,日后补过”就是优良债务的真实写照。


不良技术债


作为一名前端开发人员,我主要的工作是同CSS打交道。从我的工作经验出发,给诸位举一个关于技术债最简单的例子:


``!important``








请到「今天看啥」查看全文