原文:My 20 Year Career is Technical Debt or Deprecated (visionarycto.com)
任何事情不可能一成不变,变化在持续、不同视角的变化,貌似印象中,技术债务的风险,几近乎没啥好考量的,毕竟这个周期越来越短、所以是技术带来的便捷性太大还是我们做的业务太过同质化,亦或是人力太过充沛?
技术债务很容易成为当今最常用的流行语。人们说,"我们正在快速推进我们的MVP,同时最大限度地减少技术债务!他们在那里提到技术债务听起来很酷或其他什么。
我只是笑,因为最终一切都是技术债务。
我的整个职业生涯现在都是技术债务,或者代码已被弃用。
如果你不相信你的整个职业生涯也会是技术债务,你可能会在阅读这篇文章之后。我将带您了解在我20年的职业生涯中情况如何变化。
开始 "Basic"
我的职业生涯始于 Visual Basic 6 开发人员。从1999年到2003年,我开发了几个不同的应用程序。我想你可以说,按照今天的标准,Visual Basic 6 中的任何内容都是技术债务,或者早已被取代。"下次错误恢复"万岁!
我花了很多时间进行经典的活动服务器页面(ASP)开发。有一次,我也是使网站与Internet Explorer 6和Netscape Navigator配合使用的专家。这在简历上已经没有多大意义了!
Visual Basic,ASP,IE6和Netscape都是长期被遗忘的技术。
旧语言:Perl,Delphi,Fortran,FoxPro,ColdFusion
除了Visual Basic 20之外,在过去的6 +年中,还有很多编程语言已经失宠。如果你用这些语言中的任何一种构建任何东西,人们都在试图弄清楚如何重写它,因为很难找到这些语言的程序员:Perl,Delphi,Fortran,FoxPro,ColdFusion。
其中还存在应用程序吗?是的。你能雇人来做吗?这很难。在大多数情况下,这些公司必须对旧应用进行现代化改造和停用。
在2000年代初期,人们认为Adobe ColdFusion是热门产品。你还记得它很少成为明星吗?
Ruby on Rails有可能被添加到这个列表中。它已经失宠,很难找到它的开发人员。曾经使它与众不同的东西现在有其他语言版本。
编程语言来来去去。开发人员不希望工作学习不需要的技能。它始终是供需平衡!开发人员快速跳槽,并且总是希望在简历上出现热门的新事物。
ActiveX、Java Applets、Flash 和 Silverlight 发生了什么变化?
我制作的一些第一批应用程序使用了 ActiveX Internet Explorer 6中的ActiveX控件。当时,他们被要求做印刷和其他非常不安全的黑客事情。PDF在当时并不常见,从浏览器打印本身就是一场有趣的噩梦。
Java Applet也曾几何时是一件大事。它们很慢,并且在您的计算机上安装正确版本的Java总是一团糟。我永远不会忘记处理需要Java小程序的网络防火墙的噩梦。我不怀念那些噩梦,幸运的是它消失了。
当然,我们都记得Macromedia/Adobe Flash! 曾几何时,它是整个互联网的宠儿。有无穷无尽的Flash游戏,许多软件都是用ActionScript在Flash中内置的。一个名为CheerpX的产品现在允许使用WebAssembly运行旧的Flash应用程序。
Microsoft推出了一个名为Silverlight的Flash竞争对手。对于C#开发人员来说,它实际上是一个非常出色的框架。我的公司用Silverlight构建了一些非常了不起的东西。
众所周知,苹果通过放弃对浏览器的支持来结束Flash和Silverlight。
以下是我们10多年前在VinSolutions使用Silverlight构建的财务计算器的屏幕截图。Silverlight现在已经不复存在了,他们用所有的JavaScript重写了它,但它不像旧版本那么酷!
我的第一个移动应用程序
我在2004年开发了一个移动应用程序。很难记住,但那时iPhone和Android并不存在。我为康柏PDA编写了一个应用程序,用于跟踪汽车经销商的库存。它是用C#编写的,用于在Windows CE上运行.NET Compact Framework。
这个PDA有一个1万像素的摄像头。只要外面多云以消除眩光,照片就只是稍微可怕。😂 男孩,技术变了吗!这个应用程序很久以前就进入了骨场,但在 2005 年是最先进的。
《有远见的首席技术官》是一本由读者支持的出版物。要接收新帖子并支持我的工作,请考虑成为免费或付费订阅者。
订阅
你最好是斯威夫特
Swift 是开发工具变化速度的另一个很好的例子。一旦苹果发布了 Swift,就很难再证明用 Objective C 编写代码是合理的了。我相信有些用例仍然需要它。但 Swift 的开发要容易得多,并且是向前迈出的重要一步。
我认为,任何用Objective C编写的应用程序现在都可能是技术债务。
WebForms
在为构建 Web 应用程序编写了疯狂的内联脚本之后,我很高兴使用新的 Web 表单 ASP.NET。他们的服务器端控件使开发变得更加容易。他们的目标是使创建 Web 应用程序尽可能容易,就像在 Visual Basic 6 中一样。它基本上奏效了!您可以构建可重用的 UI 组件服务器端以呈现到浏览器。就像我们今天在 100% JavaScript 中所做的那样。
WebForms并不完美,但这是一个相当大的升级。在Ruby on Rails出现并普及用于开发Web应用程序的MVC(模型-视图-控制器)框架之前,它一直运行良好。
MVC 很快弃用了我们曾经制作过的所有 Web 表单应用程序。网络表单中的任何内容都绝对是技术债务。(虽然,同样的想法正在卷土重来 布拉佐。
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,它代表简单的对象访问协议。它使调用 Web 服务并自动生成代码代理类以正确调用服务变得容易。它主要由Windows Communication Framework (WCF) over XML使用。
它工作真棒...直到它没有。我职业生涯中最糟糕的项目之一是弄清楚如何在我的公司和另一个供应商之间通过 WCF 和 SOAP 使用安全证书。SOAP 和 WCF 的承诺是惊人的,但随着时间的推移,这是一场噩梦。
SOAP 和 WCF 是我不会错过的两件事。Microsoft决定不再支持 .NET Core 中的 WCF。像 REST、gRPC 和 GraphQL 这样的东西现在是首选。虽然,一个社区项目最终使CoreWCF保持了它的运行。
随着时间的推移,我们用来调用 Web 服务的技术类型发生了变化。旧方法仍然有效,但大多数人可能更愿意退休。
主要语言版本
另一个常见问题是主要的编程语言版本更改。无论是Ruby,PHP,.NET还是其他。它们通常需要一堆代码更改甚至重写。
当.NET Core问世时,它是更新,更轻,更快的.NET版本,旨在运行在Linux上。基本的 C# 代码很容易移植,但没有人只将基本代码用于实际应用。
但是,在复杂的企业应用程序中,导航升级路径时存在许多潜在问题。这成为必须弄清楚的主要技术债务。否则,你最终会陷入古老的版本。
卡在旧的外部依赖项上
我们在 Stackify 遇到的最大挑战之一是卡在旧版本的 Elasticsearch 上。
有一次,他们对它的工作方式进行了一些重大更改,这些更改并不完全向后兼容。我们大量使用它,所有升级工作都变成了大量的技术债务和升级项目。
我们一遍又一遍地把它踢到路边,最终远远落后了。这是可能困扰公司的实际技术债务项目的另一个例子。
开源替代方案退休了我的代码
在 Stackify,我们为 6 种编程语言构建了自己的跟踪/分析库。要做到这一点,工作量非常大。
好吧,现在OpenTelemetry已经出现,使所有这些工作变得毫无用处。
当您可以使用开源行业标准时,为什么要管理自己的标准?Stackify正在慢慢消除我帮助构建的.NET分析器。
所有代码都腐烂或被替换
随着时间的推移,您可以看到您创建的几乎所有内容都因各种原因而被废弃和替换,或者现在基于旧技术。
我在职业生涯早期开发的几个应用程序被终止了,因为这些公司被收购并决定使用完全不同的技术。
大多数软件的寿命有限,比您想象的要短。所有代码最终都会成为技术债务,每个人都希望以更现代的方式重写,或者业务需求发生巨大变化。
诚然,在企业界,更有可能拥有似乎永远存在的内部应用程序。像铁路或大型银行这样的东西已经使用相同的基于大型机的软件40年了。
我预测WebAssembly最终将超越今天的前端开发,一个全新的世界将发展。
技术债务的现实
人们总是担心在做新项目时尽量减少技术债务。我明白这一点。在让事情发挥作用和试图使它们变得完美之间有一个平衡。
然而,没有什么是技术债务,因为它并不完美。 没有完美的东西。随着时间的推移,今天完美的东西将来不会完美。学会与不完美共处。
技术债务的另一面是一切都会随着时间的推移慢慢腐烂。它要么在升级到最新版本时存在重大问题,要么由于更新的做事方式而最终失宠。祝你好运,为旧的技术堆栈雇用人员。
一切最终都会变成技术债务,或者项目被淘汰。如果幸运的话,你的代码可以存活足够长的时间,成为别人的技术债务。