“一晃 20 年,原来我所做的一切都是技术债务,你也一样……”

e18a9202e88dc7caf257819c4c3d3968.gif

编译 | 郑丽媛

出品 | CSDN(ID:CSDNnews)

身为一名程序员,相信大家或多或少都遇到过“技术债务”。

具体来说,这是开发团队为追求短期效益,选择了一个短时间内容易实现的方案——但从长远来看,未来这种方案必将带来额外的开发负担,也就逐渐变成了开发团队所欠的“债务”。

很多开发团队在推进项目时,都会不断强调:“我们不仅要快速推进我们的 MVP(Minimum Viable Product,最小可行性产品),同时尽量减少技术债务!”对此,身为 Indobest Artha Kreasi 首席技术官的 Eddy Christiandy 表示:“我就笑笑,因为无论如何,最终所有东西都会变成技术债务。”

以其自身为例,Eddy Christiandy 分享了他这 20 年来的技术生涯及演变:“如果你不信你的整个职业生涯也会变成技术债务,在读完这篇文章后,你可能会相信。”

54377d3023c07fdc7ffd427559001567.png

(图片下载自视觉中国)

以下为译文:

d2e0b45370a9bae00df9bfb9f80991ec.png

起初,我用的是 Basic

我的职业生涯是从一名 Visual Basic 6 开发者开始的。从 1999 年到 2003 年,我创建了多个不同的应用程序。我猜你会说,按照今天的标准,任何用 Visual Basic 6 的内容都是技术债务,或早已被取代。

后来,我花了很多时间从事经典的 ASP(动态服务器页面)开发,也一度成为了让网站在 Internet Explorer 6 和 Netscape Navigator 上运行的专家——但这些,在如今的简历上已经没什么意义了!

Visual Basic、ASP、IE6 和 Netscape,都是早已被遗忘的技术。

c4da999072c51831e5c649068e85b639.png

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

在过去的 20 多年里,除了 Visual Basic 6 之外,还有很多编程语言都已经“失宠”了。如果你用这些语言建立了任何东西,人们很可能正在想办法重写它,因为现在已经很难找到熟悉这些语言的程序员了:Perl, Delphi, Fortran, FoxPro, ColdFusion。

这些语言中还存在应用程序吗?当然有。但你能雇人来做吗?这很难。在大多数情况下,公司必须对旧应用进行现代化改造和停用。

在 21 世纪初,当时人们认为 Adobe ColdFusion 是最热门的产品,但现在谁还记得它吗?Ruby on Rails 也可能走上 ColdFusion 的老路,它已逐渐失宠,也很难找到它的开发者——曾经 Ruby on Rails 独有的东西,如今已可以在其他语言中使用。

编程语言来了又去,开发人员又不想学习不需要的技能,这始终是一个供应与需求的平衡!于是开发人员迅速跳槽,并总希望能在他们的简历上体现一些热门的技术。

b8ec88ce5f3833d59f1c1fd6a64ffab2.png

ActiveX、Java Applets、Flash 和 Silverlight 都怎么了?

我制作的第一批应用程序中,有些使用了 Internet Explorer 6 的 ActiveX 控件,当时主要是用它来做打印和其他黑客行为。那时 PDF 还没有那么普遍,从浏览器上打印本身就是一场有趣的“噩梦”。

Java Applets 也曾辉煌过,但它们很慢,想要安装正确的 Java 版本总是很麻烦。我永远不会忘记处理需要 Java Applets 的网络防火墙的噩梦——我并不怀念,幸运的是它们也已经消失了。

当然,我们应该都记得 Macromedia/Adobe Flash!它曾一度是整个互联网的宠儿,有无数的 Flash 游戏以及软件都是用 Flash 的 ActionScript 构建的。有一个叫 CheerpX 的产品现在可以用 WebAssembly 运行旧版本的 Flash 应用程序。

微软推出了一个 Flash 的竞争者,名为 Silverlight。对于 C# 开发者来说,这实际上是一个非常棒的框架,我们公司就用 Silverlight 做了一些不错的事情。

不过众所周知,后来苹果在其浏览器中取消支持 Silverlight 和 Flash,以此结束了它们。

以下是我们 10 多年前在 VinSolutions 用 Silverlight 构建的财务计算器的截图。现在,Silverlight 已经不复存在了,他们用 JavaScript 重写了整个应用程序,但它已经失去了旧版本的魅力!

05f74b3690070a4c553fe5f6df632ab1.png

972888a57a538b0630db94e730673365.png

我的第一个移动应用

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

这个 PDA 有一个 1 百万像素的摄像头,只要外面是阴天,照片就会略显糟糕——即便如此,这在 2005 年也是最先进的。但现在时代已经变了,这款应用很早以前就被淘汰了。

146e0b34fb0a316d246b62c7fdf2834c.png

4f144abbd6a82e9a25a4623bd69adcf3.png

你最好使用 Swift

Swift 是另一个很好的例子,可以说明开发工具的变化有多快。自从苹果发布了 Swift,再用 Objective-C 编写代码就很难有说服力了。我相信仍有某些使用场景还在使用它,但用 Swift 开发要容易得多,这也是向前迈出的重要一步。

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

5582d765cf5cfbe74e60ce32fdb0d187.png

WebForms

在构建 Web 应用程序时,编写了疯狂的内联脚本之后,我很高兴能使用新的 Web 表单 ASP.NET,其服务器端控件使开发变得非常容易。它诞生的目标是使创建 Web 应用程序就像在 Visual Basic 6 中一样容易——我认为它基本上成功了!你可以在服务器端建立可重复使用的 UI 组件,并将其渲染到浏览器中。

虽然本质上来说,WebForms 并不完美,但这仍是一个相当大的升级。在 Ruby on Rails 出现并推广用于开发 Web 应用的 MVC(Model-View-Controller)框架之前,它一直都运行良好。

不过,MVC 的出现很快就让我们弃用了所有 Web Forms 应用。因此 Web Forms 中的任何东西也都是技术债务。

3ce10df153224d04384867bc44a2ed37.png

MVC 为王!(有一段时间)

在不知不觉中,当时每种编程语言都开始支持 MVC 框架,我们也转而在 ASP.NET MVC 中做一切新事情。它几乎无处不在,包括 Django、Laravel、Symfony、Spring 等等。

但快进到今天,MVC 已经落伍了,现在一切都在 React、Angular、Vue 和其他框架中完成——在我们拥有这些之前,我们还有其他 Javascript 框架。当我在 Stackify 工作时,我们使用了 Knockout,一个当时相当流行的前端框架。

但你还记得这些框架中的任何一个吗?Knockout,Ember,Aurelia,Meteor,,Backbone,Handlebars。

如果你用过其中任何一个,我敢打赌所有这些代码现在都会被认为是技术债务,并且已经失宠了。第一代前端框架们,都输给了 React 和 Angular。

6d1372527554a2056708ca091b660222.png

Angular JS

2015 年,Angular 由谷歌创建并迅速将其引入市场,它很快成为了前端框架中最受欢迎的选择。

然后在 2016 年,Angular 经历了一次重大升级,并且不向后兼容——你猜猜这意味着什么?原始版本中的任何东西现在都是技术债务。

在我公司的项目中,我们还在使用旧版本的 Angular,这是我们必须升级的重大技术债务。

0c3c7ace079ac281eb7ef16a2f537e10.png

“又旧又脏”的 SOAP 和 WCF

在 REST API 和 JSON 成为事实上的标准之前,还有一种选项是 SOAP。它代表简单对象访问协议,使得调用 Web 服务变得容易,并自动生成代理类以正确地调用服务,主要由 Windows Communication Framework (WCF) 在 XML 上使用。

它一直工作得很好…直到它不在了。我职业生涯中最糟糕的一个项目,就是要解决如何在我公司和另一个供应商之间通过 WCF 和 SOAP 使用安全证书。SOAP 和 WCF 都很棒,但随着时间的推移,维护它们简直是噩梦。

SOAP 和 WCF 是我不感兴趣的东西。微软决定不再支持 .NET Core 中的WCF,REST、gRPC 和 GraphQL 现在才是首选。

随着时间的推移,我们用来调用 Web 服务的技术类型已经改变,旧的方式也能用,但大多数人可能更愿意让它们“退休”。

cd2e743dcf492304d314963ba5b5553a.png

主要语言版本

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

当.NET Core 问世时,它是 .NET 平台最新、最轻、最快的版本,旨在在 Linux 上运行。基本的 C# 代码很容易移植过来,但没有人只将基本代码用于实际应用。

但在复杂的企业应用程序中,想要升级时可能会出现许多潜在的问题。这变成了一个必须弄清楚的主要技术债务,否则你最终会被卡在一个古老的版本上。

也就是说,这些主要版本的更新,最终成为了大型技术债务。

9d6758b27fed4bc9cd9185f28a571fbc.png

被困在旧的外部依赖中

我们在 Stackify 工作十,遇到的最大挑战之一是:被困在 Elasticsearch 的一个旧版本上。

有一次,他们对 Elasticse 的工作方式进行了一些重大更改,这些更改并不完全向后兼容。而我们大量使用了它,于是所有升级工作都变成了大量的技术债务和升级项目。

我们一次又一次地积累这些工作,最终还是远远落后了——这也是一个可能困扰公司的真正技术债务项目的例子。

edcaa9a69599a7b507e08c38a0fc51e2.png

开源替代方案,使我的代码“退休”了

在 Stackify 工作室,我们为 6 种编程语言构建了自己的跟踪/分析库。要做到这一点,工作量其实非常大。

结果好了,现在 OpenTelemetry 出现了,一下子把我们的这些工作都变得毫无用处——当你可以用开源行业标准时,为什么要管理你自己的?所以现在 Stackify 正在慢慢消除我帮着构建的 .NET 分析器。

7143eeeb96d34d163805ec7a9ee2146c.png

所有代码都将被荒废或替换

随着时间的推移,你可以看到几乎所有你创建的东西都会因各种原因被废止和替换,或者说是基于“旧技术”。

拿我来说,我在职业生涯早期开发的几个应用都被终止了,因为公司被收购后决定使用完全不同的技术。

大多数软件的寿命都是有限的,而且比你想象得要短,所以所有代码最终都会成为技术债务。每个人都希望以更现代的方式重写,也可能业务需求发生了巨大变化。

当然,在企业界更有可能产生似乎能永远存在的内部应用程序,像铁路公司或主要银行,已经用基于大型机的相同软件超过 40 年了。

我预测,WebAssembly 最终会超越如今的前端开发方式,一个全新的世界即将发展起来。

31ace5454df6f94e9cb42bb87d4943d6.png

技术债务的现实

人们在做新项目时,总希望能尽量减少技术债务,我很理解,他们是想在让项目变得完美和发挥作用之间找到一个平衡。

然而,不可能不产生技术债务,因为世界上没有完美的东西。随着时光流逝,今天完美的东西在未来将不再完美,要学会忍受不完美的生活。

从另一个角度看技术债务,那就是一切都会慢慢“腐烂”:要么在升级到最新版本时存在重大问题,要么因为出现了更新的东西而失宠。

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

不过只要有足够的时间,你的所有代码都将被删除。

bfe1f1664220c4686a8993d675796c95.png

开发者:“代码最终都会荒废?我认为不是”

Eddy Christiandy 分享的这篇文章在 Reddit 上吸引了许多程序员的关注,也引发了不少人的认同:

▶ “在几年前退休之前,我花了近 40 年的时间编写代码,但据我所知,目前只有一个应用还在用(大约已经用了 6 年)。我所做的其他所有工作,最终要么被取代,要么就是随着公司倒闭消失了。”

▶ “这 25 年来,我一直在相同的代码库上工作。早期我用 C++ 写的一个 Windows 桌面应用目前仍在使用中,但是,它现在的确变成了技术债务。”

不过,也有部分开发者认为这种说法过于武断:

▶ “虽然这种情况很多,但并非所有代码都会被弃用,像医疗设备和控制系统就永远在相同的代码上运行。我从事医疗设备领域,我工作的一家公司大约在 20 年前被收购,目前他们也只是继续运送设备而没有任何重大更新。”

▶ “仍然有汽车带着我 15+ 年前编写的代码跑来跑去。你说代码最终都会荒废?我认为不是。”

与此同时,也有开发者认为这些都不重要:“我已经从事编码 30 多年了,除了上一份工作,我不知道我之前写的任何代码是否仍在使用。不过我也不在乎——只要公司付钱了,让我写什么代码我就写。”

那么,你对于“所有代码最终都会变成技术债务”的说法,有什么看法吗?

参考链接:

https://blog.visionarycto.com/p/my-20-year-career-is-technical-debt

https://www.reddit.com/r/programming/comments/13ihrtx/my_20_year_career_is_technical_debt_or_deprecated/

推荐阅读:

▶百度云首次实现季度盈利;OpenAI 或将发布新的开源语言模型;苹果已注册 xrOS 系统商标|极客头条

▶Stack Overflow 正遭到 ChatGPT 的“暴击”!

▶Windows 11 初尝 Rust,36000 行内核代码已重写!

851e03e00f2311f416a3cf97575f283e.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/57591.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

周大福珠宝熠彩,聚焦人生最佳女主角

掌控生活的每一个镜头,探索生命的大女主剧本。珠宝熠彩点缀成长之路,做自己人生电影的最佳女主角。 自信演绎 路过不同风景,沉淀时光的生命色彩。自信演绎岁月的张力,于荏苒时光热烈盛放。(周大福青春88系列18K金红玛瑙…

公司起名工具,有了它你就是半仙了

某日,闲着蛋疼,正好老总正为公司起名发愁(要开分公司?谁知道),把我叫去,说:小黄,给你个艰巨而有伟大的任务,用Java写个为公司起名的工具出来,里面…

推广ProTradex项目的都是骗子”

证据一: 项目方给的智能合约地址里有USDT和BUSD两种币,合计价值4亿。 ProTradex项目众所周知使用的USDT, 智能合约是存储在区块链上的程序,只有在满足预先确定的条件时才会运行这些程序。 它们用于自动执行协议,以便…

“巨亏成名”的魔鬼交易员,你知道几个?

谁说在期货市场上只有赚大钱才能出名?殊不知还有这样一群特殊的交易员靠着巨额亏损而“一战成名”,亏得是老东家元气大伤,外号“魔鬼交易员”——“不亏不成魔”!接下来火象就给大家盘点几位代表性魔鬼交易员,看看他们…

天然钻石协会与周大福珠宝集团达成战略合作

天然钻石协会(Natural Diamond Council)宣布与周大福珠宝集团(周大福)达成独家战略合作计划,将通过形式多样的传播项目、即时灵活的数字化内容以及专业的培训资源,携手为中国消费者,特别是年轻一代,展现天然…

香港金银业贸易场十大会员名单排行榜

在种类丰富全面的国际投资市场中,黄金拥有者良好的受众基础,黄金投资产品有着悠久的历史记录和蓬勃旺盛的生命力,数百年以来无数炒金者在黄金投资中实现了投资理财的梦想,但是在黄金投资的过程中,投资中需要面对无数考…

周大福荣获2023亚洲零售大奖——年度珠宝零售商

由成立于1991年、服务于亚洲充满活力的零售业的行业杂志—《亚洲零售杂志》主办的“2023亚洲零售大奖”评选结果于6月15日揭晓,周大福珠宝集团凭借创新和卓越的表现荣获“2023亚洲零售大奖—年度珠宝零售商(中国)”,是中国唯一入榜…

珠宝店 (字符串)

珠宝店 1.题目2.分析3.代码scanf %s 和 gets()混和使用纯用scanf %s 也可使用二维数组(数组开大,所以内存会占用的比较大)巧妙输出(也能AC,但是个人感觉好像不太符合题目要求) 4.总结5.更新日志 1.题目 题…

lol手游国际服 手把手教你体验moba的乐趣

英雄联盟是一款运营十多年的电脑网络游戏,考虑到便携性官方专门推出了英雄联盟手游,不过国服的版本由于审核原因暂时还没有上线。所以小编为大家带来了lol手游国际服,这是由Riot Games拳头游戏研发和运营的一款5v5MOBA手游,现已全球公测,国内玩家可以在这里和全世界各地的…

拳头游戏教程

文章目录 一、初谈游戏美术游戏美术师的作用视觉效果 二、概念创造1.项目前期准备2.生成创意3.获取反馈 三、角色设计从概念到3D模型3D建模的过程表面改变解剖学协作改变 四、环境设计什么是环境美术创建的过程视觉层次可信度效率 五、技术美术骨骼制作定制化工具移植开发流程s…

Indian Buffet Process(印度自助餐过程)介绍

近期,有人将本人博客,复制下来,直接上传到百度文库等平台。 本文为原创博客,仅供学习使用。未经允许,禁止将其复制下来上传到百度文库等平台。如有转载请注明本文博客的地址(链接) 简介 无监督学习的目的是从观测数…

印度区块链项目Matic Network的应用场景分析

近日,随着Coinbase发出的关于正在评估上线Matic的一则公告,这个印度区块链项目逐步走进了大家的视野。能够得到Coinbase的关注,想必Matic必然有它卓越的地方。 据悉,**Matic Network致力于利用其行业平台、知识和影响力,为印度走向光明和去中心化的未来开阔道路。**为了继…

华为手机最大的不足在于错过了印度市场

华为消费者业务CEO余承东在2018新年致辞中表示“最大的不足是部分国家市场经营进步缓慢,份额占有率低”,这句话说的其实不够明确,笔者认为最大的不足在于错过了印度市场。 2018年国产手机品牌最为瞩目的当属小米,这家手机企业在经…

跟进chatGPT安卓版冲击榜单

ChatGPT的安卓版正式上线一天,美国、印度、孟加拉国和巴西四国可下载。下载量到100万。 评论区大多以中文为主。美国推荐页第一个是ChatGPT,但排行榜上还未出现chatGPT。关注我,继续跟进ChatGPT安卓版冲榜。搜ppwordgpt

[论文笔记]图片语义分割 文献综述

原文:《基于深度学习的图像语义分割方法综述》2019_田萱,引用量19 1.简介 是什么:ISS 为图像中的每一个像素分配一个预先定义好的表示其语义类别的标签。(田萱,2019) 与目标检测区别?——相似点&#xff…

【每周CV论文推荐】GAN在医学图像分割中的典型应用

欢迎来到《每周CV论文推荐》。在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的。 生成对抗网络是一项非常基础的技术,医学图像则是一个非常重要的应用方向&#xff…

图像分类论文阅读

该论文通过结合VGG-19和VIT模型,实现乳腺超声图像的分类Breast Ultrasound Images Dataset | Kaggle PyTorch VGG19复现代码 # VGG19.py import torch import torch.nn as nnclass Conv(nn.Module):def __init__(self, in_channels, out_channels, kernel_size=1, stride=1,…

新华三的网络脉动:为AI泵血,向产业奔流

AI大模型作为最新的通用技术,今年以来,发展如火如荼。也有很多从业者和专家注意到,AI模型训练和应用过程中,需要优先考虑网络的升级与适配。 如果说数据中心、算力集群是AI的“心脏”,那么网络就犹如AI的“动脉”&…

人工智能算力需求稳增,中国将持续夯实算力底座

中国始终强调科技兴国的重要性。数字经济时代,技术的力量更为凸显。近年来,中国政府相关部门相继发布一系列政策,更加明确了人工智能对于提升中国核心竞争力的重要支撑作用,加上新基建、数字经济等持续利好政策的推动,…

>【无糖出品|必属精品】数据库人的福音,全网最全的增删改查.

它来了,它来了,带着众人的期望,数据库 ChatGPT 来啦! 前有excel-GPT,现在对于数据库人的福音来了,由无糖工作室开发的免费版 Easy-sql 实现人工智能输出Sql语句完全可以在工作中使用,增删改查不在话下. 你觉得这样的工具对你的…