技术债务(Technical debt )是当今最常用的时髦词汇之一。人们会说:“我们在迅速推进我们的MVP,同时尽量减少技术债务!”他们在其中提到技术债务,可能是为了显得很酷或其他什么原因。

我只是笑了,因为一切终将成为技术债务。

我的整个职业生涯现在都是技术债务,或者说代码已经被弃用。

如果你不相信你的整个职业生涯也会成为技术债务,那么读完这篇文章之后,你可能会改变看法。我将带你回顾我20年的职业生涯中发生的变化。

从Basic开始的生涯

我的职业生涯始于Visual Basic 6开发人员。从1999年到2003年,我开发了几款不同的应用程序。从今天的标准来看,你可以说在Visual Basic 6中的任何东西都是技术债务,或者早已被替换掉了。“on error resume next”万岁!

我花了很多时间进行ASP开发。有一段时间,我也是使网站与Internet Explorer 6和Netscape Navigator兼容的专家。但现在这些经历在简历上已经不再有多大意义了!

Visual Basic、ASP、IE6和Netscape这些技术早已被遗忘。就像Strong Bad当时会说的那样,“朽掉了!”

古老的语言:Perl、Delphi、Fortran、FoxPro、ColdFusion

在过去的20多年中,除了Visual Basic 6之外,还有很多编程语言已经不再流行。如果你在这些语言中构建了任何东西,人们正在努力找出如何重写它,因为很难找到那些语言的程序员:Perl、Delphi、Fortran、FoxPro、ColdFusion

这些语言中仍然存在应用程序吗?是的。你能雇佣人来完成这项工作吗?很困难。在大多数情况下,这些公司必须进行现代化并淘汰旧的应用程序。

在2000年代初,人们认为Adobe ColdFusion是一个热门的东西。你还记得它的崛起吗?

Ruby on Rails也有可能被列入这个清单。它已经不再流行,很难找到开发人员。曾经使它独特的东西现在在其他语言中都可以找到。

编程语言来来去去。开发人员不想学习没有需求的技能。这始终是供需平衡的问题!开发人员很快就会跳槽,总是想在简历上写上最新的热门技术。

ActiveX、Java Applets、Flash和Silverlight去哪儿了?

我最早制作的一些应用程序使用了Internet Explorer 6中的ActiveX控件。当时,它们是必需的,用于进行打印和其他非常不安全的操作。那时PDF文件还不太常见,通过浏览器进行打印是一场噩梦。

Java Applets曾经也是一件大事。它们很慢,而且在计算机上安装正确版本的Java总是很麻烦。我永远不会忘记处理需要Java applets的网络防火墙的噩梦。我不再怀念那些噩梦,幸运的是它们已经消失了。

当然,我们都记得Macromedia/Adobe Flash!在某个时刻,它是整个互联网的宠儿。有无数的Flash游戏,许多软件都是使用ActionScript在Flash中构建的。现在有一个名为CheerpX的产品可以使用WebAssembly运行旧的Flash应用程序。

微软推出了一个与Flash竞争的产品,叫做Silverlight。实际上,它是一个非常出色的用于C#开发人员的框架。我的公司用Silverlight构建了一些非常惊人的东西。

正如我们所知,苹果通过在其浏览器中停止对Flash和Silverlight的支持来终结了它们的命运。

我们曾在VinSolutions公司十多年前用Silverlight构建的金融计算器。Silverlight现在早已消失,他们用JavaScript进行了重写,但不如旧版本那么酷炫!

我的第一个移动应用程序

我在2004年开发了一个移动应用程序。很难记得,但当时iPhone和Android还不存在。我为Compaq的PDA编写了一个用于跟踪汽车经销商库存的应用程序。它使用C#编写,运行于Windows CE上的.NET Compact Framework。

这个PDA有一个100万像素的摄像头。只要天外有云,照片就不会太糟糕,可以消除反光。看看技术的变化!这个应用程序很久以前就被抛弃了,但在2005年时它是尖端技术。

你最好懂得Swift

Swift是另一个很好的例子,展示了开发工具的变化有多快。苹果发布Swift后,很难再有理由用Objective C编写代码。我相信还有一些情况下仍然需要Objective C。但Swift的开发要容易得多,是一个重大的进步。

我认为,用Objective C编写的任何应用程序现在可能都是技术债务。

WebForms

在为构建Web应用程序编写疯狂的嵌入式脚本之后,我很高兴能够使用新的ASP.NET Web Forms。它们的服务器端控件使开发工作更加容易。它们的目标是使创建Web应用程序像在Visual Basic 6中一样容易。它基本上是成功的!你可以在服务器端构建可重用的UI组件,然后呈现到浏览器中。就像我们今天在100% JavaScript中所做的一样。

WebForms并不完美,但它是一个重大的升级。它运行得很好,直到Ruby on Rails出现并推广了用于开发Web应用程序的MVC(模型-视图-控制器)框架。

MVC很快淘汰了我们制作的所有WebForms应用程序。任何Web Forms相关的东西绝对都是技术债务。(尽管,相同的想法现在通过Blazor再次流行起来。)

MVC为王(暂时的)!

转眼之间,每种编程语言都支持了MVC框架。我们开始在ASP.NET MVC中完成所有新的工作。它无处不在,包括Django、Laravel、Symfony、Spring等。

快进到今天,MVC已经不再流行。现在一切都在使用React、Angular、Vue和其他框架。

在这些框架出现之前,我们还有其他JavaScript框架。在Stackify,我们使用了Knockout,一个相当受欢迎的前端框架。

你还记得这些框架吗?Knockout、Ember、Aurelia、Meteor、Backbone、Handlebars

如果你使用过其中任何一个,我敢打赌,现在所有那些代码都被视为技术债务并已不再流行。第一代前端框架败给了React和Angular。

Angular JS

2015年,Angular由Google推出并迅速成为最受欢迎的前端框架。

然后在2016年,Angular经历了一次重大升级,不再向后兼容。

你猜这意味着什么?原始版本的所有内容现在都是技术债务。在我的公司,有一些项目仍在使用旧版本的Angular,这是一项重大的技术债务,我们必须进行升级

陈旧的SOAP和WCF

在REST API和JSON成为事实上的标准之前,SOAP是另一种选择,它代表简单对象访问协议(Simple Object Access Protocol)。它可以方便地调用Web服务并自动生成正确调用服务的代理类。它主要由基于XML的Windows Communication Framework(WCF)使用。

它的工作效果非常好····直到它不行了。我职业生涯中最糟糕的项目之一涉及到如何在WCF和SOAP之间使用安全证书来解决我公司与另一个供应商之间的问题。SOAP和WCF的前景非常吸引人,但随着时间的推移,它们的维护成为一场噩梦。

SOAP和WCF是我不想再遇到的两个东西。微软决定在.NET Core中放弃支持WCF,转而推出更现代化的gRPC。现在,REST, gRPC, 以及GraphQL 更受欢迎,尽管CoreWCF 得以凭借社区项目苟延残喘。

时光荏苒,我们曾经使用过的调用web services的技术几经变革,旧的依然可用,但大多程序员更愿意淘汰它们。

主要语言版本问题

另一个常见问题是主要编程语言版本的更改,不管是Ruby、PHP、.NET还是其他语言。它们通常需要大量的代码更改甚至重写。

当.NET Core发布时,它是.NET的新版本,更轻量、更快,并且设计用于在Linux上运行。基本的C#代码很容易进行移植,但在真实世界的应用程序中,没有人只使用基本的代码。

然而,在复杂的企业应用程序中,升级路径中可能会出现许多潜在问题。这就成为了一项重大的技术债务,必须加以解决。否则,你最终会陷入使用古老版本的困境。

这些主要版本更新最终会成为重大的技术债务项目。

旧的外部依赖问题

在Stackify,我们遇到的最大挑战之一是陷入了旧版本的Elasticsearch泥淖之中。

有一段时间,他们对其工作方式进行了一些重大更改,这些更改并非完全向后兼容。我们在很大程度上使用它,而升级所需的工作变成了一项巨大的技术债务和升级项目。

我们一次又一次地推迟它,最终落后很多。这是真正的技术债务项目的又一个例子,可能困扰着公司。

开源替代方案使我的代码过时

在Stackify,我们为6种编程语言构建了我们自己的追踪/性能分析库。这是一项令人难以置信的工作。

然而,现在OpenTelemetry已经出现,并使所有这些工作变得无用。

当你可以使用开源行业标准时,为什么还要自己管理呢?Stackify正在慢慢努力消除我参与构建的.NET分析器。

代码也会衰老(像人一样)

时间久了,你会发现几乎所有你创建的东西都会因为各种原因被废弃。

我在职业生涯早期构建的一些应用程序因为公司被收购并决定使用完全不同的技术而被终止。

大多数软件的寿命都比你想象的要短。所有的代码最终都会成为技术债务,每个人都想以更现代的方式重写它,或者业务需求发生了巨大变化。

诚然,在企业界,很可能有一些内部应用程序似乎永远存在。像铁路公司或大型银行这样的企业已经使用基于同一台主机的软件40年了。

我预测WebAssembly最终将取代现有的前端开发方式,一个全新的世界将出现。

技术债务的现实

在进行新项目时,人们总是担心将技术债务最小化。我理解这一点。在让事情正常运作和试图使其完美之间存在着平衡。

然而,没有什么是因为不完美而成为技术债务。完美是不存在的。今天的完美将来不再完美。学会接受不完美。

技术债务的另一面是,一切都会逐渐腐烂。要么存在升级到最新版本的重大问题,要么由于新的工作方式而最终不再受欢迎。如果要为旧的技术堆栈招聘人员,那么祝你好运。

一切最终都变成技术债务,或者项目被淘汰。如果你幸运的话,你的代码可以存活足够长的时间,成为别人的技术债务。

如果时间足够长,你的所有代码都会被删除。

作者:Matt Watson 来源:The Visionary CTO  翻译:西墙网

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注