我的20年职业生涯:全是技术债( 二 )


【我的20年职业生涯:全是技术债】

我的20年职业生涯:全是技术债

文章插图
开发工具的变化有多快?
2004 年还没有 IOS 和 Android,当时,Watson 曾为 Compaq PDA 编写了一个应用程序,用于跟踪汽车经销商的库存 。它是用 C# 编写的,用于在 windows CE 上运行的 .NET Compact Framework 中 。
这个 PDA 有一个 100 万 像素的摄像头,只要外面是阴天,照片就会糟糕些 。这个应用程序很早以前就被淘汰了,但在 2005 年时它还很前卫 。
Swift
Swift 是另一个很好地说明开发工具变化速度之快的例子 。苹果公司发布 Swift 后,就很难再证明用 Objective C 编写代码是合理的了 。虽然在某些用例中仍然需要用 Objective C,但 Swift 明显更易于开发,并且是向前迈出的重要一步 。
Watson 认为,现在任何用 Objective C 编写的应用程序都可能是技术债了 。
WebForms
在为构建 Web 应用程序编写了疯狂的内联脚本之后,Watson 很乐意使用新的 ASP.NET Web 表单,其服务器端控件大大简化了开发 。它们的目标是让创建 Web 应用程序变得像在 Visual Basic 6 中一样简单 。开发者可以在服务器端构建可重用的 UI 组件以呈现给浏览器,就像今天使用 100% 的 Java 所做的那样 。
WebForms 并不完美,但它是一个相当大的提升 。在 Ruby on Rails 出现并普及了用于开发 Web 应用程序的 MVC(Model-View-Controller,模型 - 视图 - 控制器)框架之前,它一直运行得很好 。
MVC 很快就淘汰了开发者制作的所有 Web 表单应用程序 。Watson 认为,任何网页形式的东西都绝对是技术债 。
MVC
不知不觉中,每种编程语言就都支持 MVC 框架了 。Watson 也曾转而使用 ASP.NET MVC 做所有的新功能 。它无处不在,包括 Django、Laravel、Symfony、Spring 等 。
快进到今天,MVC 已经过时了 。现在一切都是在 React、Angular、Vue 和其他框架中完成的 。在此之前,开发者还会使用 Java 框架 。在 Stackify 工作时,Watson 还曾使用过 Knockout,这是一个相当流行的前端框架 。
但在今天,还有人记得 Knockout、Ember、Aurelia、Meteor、Backbone、Handlebars 这些框架吗?它们都“失宠”了,甚至被划分为技术债 。毫无疑问,第一代前端框架输给了 React 和 Angular 。
Angular JS
2015 年,谷歌创建了 Angular,Angular 迅速成为最受欢迎的前端框架 。2016 年,Angular 进行了一次重大升级,不再向后兼容 。这意味着,原始版本中的任何内容现在都是技术债 。
Watson 曾在项目中使用过旧版本的 Angular,如今却成了他必须升级的主要技术债 。
过时的 SOAP 和 WCF
在 REST API 和 JSON 成为事实上的标准之前,另一种选择是 SOAP,它代表简单对象访问协议,主要由基于 XML 的 Windows 通信框架(WCF)来使用 。它使得调用 Web 服务并通过自动代码生成代理类来正确调用服务变得更容易 。
Watson 职业生涯中最糟糕的一个项目,就是要弄清楚如何在他的公司和另一家供应商之间通过 WCF 和 SOAP 使用安全证书 。SOAP 和 WCF 的承诺令人惊叹,但随着时间的推移,维护它简直是一场噩梦 。
微软决定不再支持 .NET Core 中的 WCF,REST、gRPC 和 GraphQL 现在才是首选 。尽管如此,有个社区项目最终使 CoreWCF 得以继续发展 。
随着时间的推移,开发者用来调用 Web 服务的技术类型已经发生了变化 。旧的方式仍然有效,但大多数人可能更愿意淘汰它们 。
此外还有编程语言的版本更改问题 。无论是 Ruby、php、.NET 还是其他语言,它们通常需要改写大量的代码,甚至是完全重写 。
当 .NET Core 刚发布时,它是专为在 linux 上运行而设计的更新、更轻、更快的 .NET 版本 。基本的 C# 代码都很容易移植过来,但没有人会在真实的应用程序中只使用基本代码 。然而,在复杂的企业应用程序中,想要升级时可能会出现许多潜在的问题 。这就成为了一笔必须解决的重大技术债 。否则,开发者最终会陷在一个古老的版本中 。
这些主要版本的更新,最终会成为重大的技术债项目 。
Watson 在 Stackiy 遇到的最大挑战之一是卡在了旧版本的 Elasticsearch 上 。有一次,它们对其工作方式进行了一些重大的更改,但这些更改并不完全向后兼容 。Watson 的团队大量使用了它,于是所有的升级工作都变成了海量的技术债和升级项目 。
所有的代码都将被替换
在 Stactify 时,Watson 曾为 6 种编程语言构建了自己的跟踪 / 测评分析库,这项工作的工作量令人难以置信 。随着 OpenTelemetry 出现,Watson 过去的这些工作变得毫无用处 。既然可以使用开源的行业标准,为什么还要自己管理呢?Stackiy 正在慢慢地消除那些 Watson 帮忙构建的.NET 测评分析器 。


推荐阅读