我的20年职业生涯:技术债或已废弃
“废弃”应该成为我的middle name
2023年5月15日
//
newsletter.productdriven.com技术债无疑是当今最常用的时髦词。人们会说:“我们正在快速推进我们的MVP(最小可行产品),同时最小化技术债!”他们提到技术债,似乎是为了让自己听起来很酷之类的。
我只是笑笑,因为所有东西最终都会变成技术债。
我的整个职业生涯现在要么是技术债,要么代码已被废弃。
如果你不相信你的整个职业生涯也会变成技术债,读完这篇文章后你可能会改变看法。我将带你回顾我20年职业生涯中事物的变迁。
起初,我是“Basic”的…
我的职业生涯始于一名 Visual Basic 6 开发者。从1999年到2003年,我构建了几个不同的应用程序。我想,以今天的标准来看,任何用 Visual Basic 6 编写的东西都可以说是技术债,或者早已被取代。 “‘on error resume next!’万岁!”
我曾花费大量时间进行经典的 Active Server Pages (ASP) 开发。我一度也是让网站兼容 Internet Explorer 6 和 Netscape Navigator 的专家。这些在如今的简历上已经没什么分量了!
Visual Basic、ASP、IE6 和 Netscape 都早已是被遗忘的技术。正如 Strong Bad 当时会说的:“delorted!”(被摧毁了!)
过时的语言:Perl, Delphi, Fortran, FoxPro, ColdFusion
在过去的20多年里,除了 Visual Basic 6,还有很多编程语言已经失宠。很有可能,如果你用这些语言构建了任何东西,人们现在正想方设法重写它,因为很难找到这些语言的程序员:Perl、Delphi、Fortran、FoxPro、ColdFusion。
用它们编写的应用程序还存在吗?是的。你能雇到人来做吗?很难。在大多数情况下,那些公司必须进行现代化改造并淘汰旧的应用程序。
在21世纪初,人们认为 Adobe ColdFusion 是热门技术。你还记得它短暂的辉煌吗?
Ruby on Rails 也面临被添加到这个列表中的危险。它已经失宠,而且很难找到它的开发者。它曾经的独特之处现在在其他语言中也能实现。
编程语言来了又去。开发者不希望学习那些需求不足的技能。这始终是供给与需求的平衡!开发者们迅速“跳槽”,总想在简历上拥有最新的热门技术。
ActiveX、Java Applets、Flash 和 Silverlight 怎么样了?
我早期制作的一些应用程序在 Internet Explorer 6 中使用了 ActiveX 控件。当时,它们是进行打印和其他非常不安全的“黑客式”操作所必需的。那时 PDF 还不像现在这么普遍,从浏览器打印本身就是一场噩梦。
Java Applets 也曾一度非常流行。它们速度慢,而且确保计算机上安装了正确版本的 Java 总是一团糟。我永远不会忘记处理那些需要 Java Applet 的网络防火墙的噩梦。我不怀念那些噩梦,幸运的是它消失了。
当然,我们都记得 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# 为 .NET Compact Framework 编写的,运行在 Windows CE 上。
这款 PDA 配备了100万像素的摄像头。只要外面是阴天以消除眩光,照片就只是稍微糟糕一点。😂 天啊,技术变化太大了!这个应用程序很久以前就被淘汰了,但在2005年却是前沿技术。
你最好用 Swift
Swift 是另一个展示开发工具变化速度的绝佳例子。苹果一发布 Swift,就很难再有理由用 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 迅速使我们曾经制作的所有 Web Forms 应用程序都过时了。任何用 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 横空出世。它迅速成为最流行的前端框架。
然后在2016年,Angular 进行了一次重大升级,并且不向后兼容。
猜猜这意味着什么?任何旧版本的东西现在都是技术债。我公司就有旧版 Angular 的项目,这是我们必须升级的重大技术债。
陈旧肮脏的 SOAP 和 WCF
在 REST API 和 JSON 成为事实标准之前,还有另一种选择是 SOAP,即简单对象访问协议(Simple Object Access Protocol)。它使得调用 Web 服务和自动代码生成代理类以正确调用服务变得容易。它主要由 Windows Communication Framework (WCF) 通过 XML 使用。
它曾经非常好用……直到它不好用了。我职业生涯中最糟糕的项目之一就涉及到解决我们公司和另一个供应商之间通过 WCF 和 SOAP 使用安全证书的问题。SOAP 和 WCF 的前景曾非常美好,但随着时间的推移,维护起来却是一场噩梦。
SOAP 和 WCF 是我一点也不怀念的两样东西。微软决定不再在 .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 最终将取代今天的前端开发方式,一个全新的世界将会演变出来。
技术债的现实
人们在做新项目时总是担心最小化技术债。我理解这一点。在让事情运转起来和试图让它们完美之间需要一种平衡。
然而,没有什么是技术债,因为它不完美。没有完美这回事。随着时间的推移,今天完美的东西在未来将不再完美。学会接受不完美。
技术债的另一面是,随着时间的推移,一切都会慢慢腐朽。要么在升级到最新版本时遇到重大问题,要么技术最终因为更新的做事方式而失宠。祝你好运能为旧技术栈招到人。
所有东西最终都会变成技术债,或者项目会被终止。如果你幸运的话,你的代码能存活足够长的时间,成为别人的技术债。
只要时间足够长,你所有的代码都会被删除。🤷♂️