写点什么

代码臃肿已成常态:99% 计算机资源都被浪费掉了

  • 2022-08-08
  • 本文字数:2511 字

    阅读完需:约 8 分钟

代码臃肿已成常态:99% 计算机资源都被浪费掉了

作者 | Cliff Harris

译者 | 平川

策划 | 辛晓亮


曾经有一个编程的黄金时代,那时内存和CPU都有实实在在的限制。然而现在,我们生活在一个极端浪费的低效环境里。真是太可悲了。


本文最初发布于 Cliff Harris 的个人博客。

 

我使用的一项服务,有时会将我的一些文件上传到某个地方(是哪家公司的服务并不重要,因为坦率地说他们都是一样的)。举个一个很简单的例子:指向我硬盘上的一个文件夹,将内容复制到一台远程服务器上,然后他们可能会做一些与数据库有关的操作,为那一堆文件分配一个名称,并核实谁下载了它。

 

这是一家大公司,所以他们的流程很长,而且可能经常遭到黑客攻击,所以需要一些安全保障,也需要一些验证,以确保我上传的文件和他们收到的文件之间没有被篡改过。我理解。

 

……但基本上,这个过程无非是列出一些文件,读取、上传、然后关闭连接,用一个日志文件说明是否成功,如果不成功是因为什么。这不是什么高科技。事实上,我自己也从头写过这样的代码,使用了 WinINet API 和 PHP(在一台可以访问MySQL数据库的服务器上)。与企业级的东西相比,我写的东西可能没有那么健壮,但确实也可以支持数十万个文件的上传(GSB 挑战数据)以及对它们的验证、下载和记录。或许是一个程序员 2 到 3 周的工作?

电脑文件中 99.9% 的代码都没用

 

现如今,我使用的专用上传工具客户端文件总共有 230MB,这一处理过程涉及到 2700 个不同的文件。

 

你可能会觉得是我打字打错了,所以我澄清下。两千七百个文件237MB 的可执行文件及辅助性的东西,只是将一些文件从客户端复制到服务器上。臃肿、过度工程化都不足以描述这个情况了,这绝对是完全、彻底、确定无疑而又显而易见的荒谬和疯狂的。

 

问题是……我怀疑,其他任何大公司提供的此类软件也没什么不同。哦,还有,它给出了错误信息,它现在不能工作了。

 

我见过编码人员这样干。我知道这种情况是怎么发生的,这是因为编码人员不仅没有使用高效的底层代码来实现他们的目标,甚至他们从来没有见过写得好而又高效的底层代码。当他们都不知道有这种可能时,我们怎么能指望他们做得更好呢?

 

你可以用不到二十分之一的代码编写一个程序,将文件安全、快速地上传到服务器。它可以是单个的文件,仅一个小小的 exe,不需要成百上千的DLL。这不仅可能,而且很容易做到,还更可靠,更有效,更容易调试,而且......让我再唠叨一句.....它真的可以工作。

 

代码臃肿听起来像是五十多岁、脾气暴躁的老程序员(比如我)小题大做,因为我们年纪大,脾气暴躁,我明白这一点。但是,我们又老又暴躁是代码运行速度比它应该的要慢 50%时,或者是代码大 50%时,我们才会抱怨。其实,实际情况远比这更糟糕。我们已经到了这样的境地:我确信,你电脑上的文件中 99.9%的代码绝对是没用的,甚至从来没有执行过。它只是在那里,在一堆 DLL 里,全都是因为一些编码人员想做一些微不足道的事情,比如保存一个位图,但不知道这有多容易,所以为了实现它而导入了一大堆垃圾。

 

如我所言,我真的不应该对年轻程序员这样做感到恼火。这就是他们学到的东西。他们不知道什么是高性能,也不知道什么是基于约束的开发。当你告诉他们,游戏 Elite 最初只有 64K,但却提供了一个庞大的星系、3D 空间战斗、职业发展系统、贸易以及成千上万可供玩家探索的星球,我想他们听到了你说的话,但并不真正理解与我们现在的差距。



我为何在意这个?原因有很多,其中最重要的是,如果你需要比平常多两千倍的代码来实现一件事,那么它就应该有效。更重要的是我知道,在我这台大电脑上,99.9%的处理器时间是完全没用的。它每秒钟进行数十亿次的操作,只是为了原地打坐。我的电脑现在应该处于超低功率模式,关闭所有的风扇,处于完全的安静状态,因为我在 WordPress 中输入时,它只是做一些拼写检查。

为何我们的程序运行的很慢

 

如今,计算机的速度非常快,你可以把它们看作是绝对魔法。你能想象到的一切应该都可以在刷新率的 60 分之一的时间里发生。然而,当我在我的笔记本电脑(微软 Surface,相当新)上点击音量图标时,却有一个明显的延迟,因为机器一步步创建出一个新的用户界面元素,并最终确定了要绘制的图标,让它们弹出,然后开始运行。这需要时间,我怀疑有半秒,以 CPU 时间计,这就像 10 亿年。

 

如果我是对的(保守地说),我们的 PC 99%的运行时间都被浪费掉了。也就是说,计算机能源消耗的 99%被浪费掉了。这简直是犯罪,这是要干什么?我不知道,但只要看一下电脑的任务管理器,就会发现一大堆臃肿的废物,天知道它们在干什么。我现在正在做的就是输入这篇博文。

 

Windows 有 102 个后台进程在运行。我的 Nvidia 显卡当前占了其中的 6 个,其中一些还有子任务。这是要干什么?我现在不是在运行一个游戏,我所使用的显卡驱动程序的功能集与我二十年前的差不多,但却需要 6 个进程。

 

微软 Edge Web View 也有 6 个进程,还有微软 Edge。我甚至没有使用微软 Edge。我想是因为我昨天在里面打开过一个 SVG 文件,然后就这样了,12 段无用的代码,浪费着内存,可能还会轮询 CPU。

 

这太疯狂了,这就是为什么我们似乎什么都没做,却什么都很慢。这就是为什么你每年都需要一部新手机和一台新电视来加载那些臃肿的流媒体应用,它们也不得不运行这些糟糕的代码。

 

老实说,我认为情况只会变得更糟,因为像 Facebook、Twitter、Reddit 等大而无当的科技公司是这种趋势下最糟糕的例子。很快,他们雇用的成千上万的“程序员”在输入时都将使用机器学习从 GitHub 上复制粘贴臃肿、有缺陷而又杂乱的代码。只是将两个数字简单相加最终都将涉及 32 个 DLL、16 个 Windows 服务和 10 亿行代码。

 

Twitter 有两千名开发者,Tweetdeck 偶尔会无法加载用户栏。这种情况已经持续四年了。我打赌没有一名编码人员知道为什么会发生这种情况,因为其后台代码非常臃肿,有很多复制粘贴来的没用的东西。

 

Reddit,当从链接中推荐标题时,无法处理与号或分号或英镑符号。现在是 2022 年了,他们可能也有 2000 名开发人员。显然,他们中没有人能够提供一个有效的文本分析器。为什么他们还都能得到报酬?

 

曾经有一个编程的黄金时代,那时内存和 CPU 都有实实在在的限制。然而现在,我们生活在一个极端浪费的低效环境里,真是太可悲了。

 

查看英文原文:Code bloat has become astronomical

2022-08-08 14:3512491

评论 7 条评论

发布
用户头像
哈哈没错,使用一堆框架虽然开发更快,但必然会降低执行效率、浪费硬件资源。记得当年对号称要带领大家“优雅写代码”的laveral做过测试,本地执行一个空请求居然要30ms...后来就再也没碰过这个框架
2022-09-30 14:48 · 北京
回复
用户头像
深以为然,都是一大坨的,恐惧症就油然而生
2022-09-14 18:49 · 广东
回复
用户头像
先说Edge吧,这个人不知道现在的浏览器从多线程变成多进程了吗。
2022-08-11 18:07 · 北京
回复
用户头像
代码行数少 绩效高不了
2022-08-11 09:42 · 上海
回复
用户头像
深有同感觉,原来吐槽过,马上就被人按地上了,你会发现你冒犯了所有人的利益,包括最底层的“年轻程序员”
2022-08-09 20:10 · 福建
回复
带宽和计算资源更好以后,程序员只关心撸码效率了。
2022-08-10 10:53 · 重庆
回复
用户头像
第一时间想到各类短视频里经常说的: 以前超级马里奥和现在聊天软件
2022-08-09 09:13 · 上海
回复
没有更多了
发现更多内容

天猫商品详情数据接口(Tmall.item_get)

tbapi

天猫数据接口 天猫商品详情数据接口 天猫商品API接口 天猫商品数据接口 天猫API

如何利用香港VPS免备案加速你的数字生活

一只扑棱蛾子

香港VPS

克魔助手:方便查看iPhone应用实时日志和奔溃日志工具

记录一次RPC服务有损上线的分析过程

京东科技开发者

【保姆级教程】PAI x EasyPhoto,节日氛围AI写真生成

阿里云大数据AI技术

天猫商品评论数据接口(Tmall.item_review)

tbapi

天猫API接口 天猫商品评论接口 天猫评论API接口 天猫商品评价接口 天猫商品评论数据接口

实时获取小红书笔记详情的API使用与解析

Noah

Solana 生态铭文跨链桥 Sobit 是何神圣?其场外白名单已达到1200U

西柚子

The Next Generation of Apache Flink

Apache Flink

大数据 flink 实时计算

MES系统中的标准工时管理

万界星空科技

低代码 低代码开发 低代码平台 mes 低代码云MES

云手机引领社交平台运营新潮流

Ogcloud

跨境电商 社交媒体 社媒

锁定1.17|PolarDB开发者大会,我们将聊些什么?

阿里云瑶池数据库

数据库 阿里云 云原生 开发者大会

万界星空科技MES系统中的工时管理

万界星空科技

MES系统 mes 工时管理 万界星空科技 工时管理系统

作为一个后端必须要了解的事情

伤感汤姆布利柏

后端

万界星空科技智能制造平台的工时管理系统

万界星空科技

MES系统 mes 万界星空科技 工时管理系统

在Mac上,按Command-X键无法剪切怎么办?

mac大玩家j

Mac软件教程 好用的软件分享

MySQL常用图形管理工具

小魏写代码

我与算法有个约会——精心设计的偶遇

统信软件

算法

AI在NFT发展中的力量发挥:2024年AI将如何主导NFT场景

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

openEuler为操作系统“铸魂”,中国联通做了什么?CULinux了解下

彭飞

云手机:多开群控全天在线,提高效率的最佳之选

Ogcloud

弹性云手机 手机云服务

群星Stellaris mac(策略游戏)v3.10.1完美激活版

mac

群星stellaris 苹果mac Windows软件 科幻策略类游戏

Topaz Video AI for mac(视频增强和修复工具) 4.0.8完整激活版

mac

苹果mac Windows软件 Topaz Video AI

语音数据集:推动智能语音技术发展的关键驱动力

来自四九城儿

语音数据集:探索、挑战与应用

来自四九城儿

OpenLAM | 深度势能预训练大模型DPA-2发布

新消费日报

华为天气滑雪卡片预测滑雪好时机,轻松GET雪场信息

新消费日报

全球校园人工智能算法精英大赛-AIOT应用赛项圆满落幕

AIRIOT

人工智能 IoT AIOT

淘宝API与大数据技术在电商行业的应用研究

技术冰糖葫芦

API

淘宝API和天猫SKU API在推动电子商务创新中的作用研究

技术冰糖葫芦

API

代码臃肿已成常态:99% 计算机资源都被浪费掉了_架构_Cliff Harris_InfoQ精选文章