写点什么

代码臃肿已成常态: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:3512670

评论 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 · 上海
回复
没有更多了
发现更多内容

架构实战模块1作业

Geek_e3a35c

AngularJS进阶(四十二)ng-options渲染的第一项为空问题分析及解决方案

No Silver Bullet

12月月更 ng-options 页面渲染 上拉加载

Vue进阶(贰零柒):Webpack 性能优化措施汇总

No Silver Bullet

性能优化 Vue webpack 12月月更

凭借这份Java面试复盘笔记,我在2022寒冬之际也斩获了多张Offer!

程序员小毕

spring 程序员 后端 架构师 java面试

选取数据的原则

穿过生命散发芬芳

数据分析 12月月更

ZBC陆续在主要CEX开启Staking,锁定市场大部分流通量成大利好

股市老人

chatGPT的49种应用场景介绍,各开发语言接入chatGPT参考指南

非喵鱼

Java Python 前端 编程语言 ChatGPT

场景 | 大型电商企业运营管理数字化解决方案

九科Ninetech

Python开发游戏?也太好用了吧!

Jackpop

Chrome浏览器竟然可以用ChatGPT了!

Jackpop

多名网络主播因恶意炒作被列入警示名单,如何打击这种违规行为

石头IT视角

2022-12-16:给你一个长度为n的数组,并询问q次 每次询问区间[l,r]之间是否存在小于等于k个数的和大于等于x 每条查询返回true或者false。 1 <= n, q <= 10^5 k

福大大架构师每日一题

golang 算法 福大大

2022中国产业数字化发展成熟度区域指数分析——充分利用特长,形成区域比较优势,夯实中国式现代化建设基础

易观分析

数字化 产业

专利进阶(一):软件专利工程师浅谈如何针对计算机软件类专利申请进行技术挖掘

No Silver Bullet

专利 12月月更 软件专利工程师 技术挖掘

来聊一聊 ElasticSearch 最新版的 Java 客户端

江南一点雨

Java elasticsearch springboot ES

云渲染是什么?云渲染和自己渲染有什么区别?

Renderbus瑞云渲染农场

云渲染 渲染农场 云渲染平台

相见恨晚!Git这些功能太好用了!

Jackpop

SpringBoot整合Swagger2,再也不用维护接口文档了!

@下一站

12月日更 12月月更 springboot整合 swagger2

实战整了一个后台服务,真香!

风铃架构日知录

多线程 线程池 网络 HTTP CGI

声网管浩森:元宇宙派对场景的最佳实践

声网

实践 元宇宙 RTE2022

下一个AI舞台,名叫煤矿

脑极体

模块二 -- 朋友圈高性能复杂度分析

陈实

「架构实战营」

数据库原理及MySQL应用 | 数据库安全加固

TiAmo

安全 数据库· 12月月更

打造算力新引擎!安擎上海智能制造基地正式运营

科技热闻

Verilog的语句块

芯动大师

Verilog Verilog语法 Verilog语句块

极客时间运维进阶训练营第八周作业

好吃不贵

SQL查找是否"存在",别再count了!

风铃架构日知录

MySQL 后端 Java、 java程序员 sql

横空出世!阿里巴巴Spring全家桶实战笔记真香

Java永远的神

spring 源码 架构师 springboot SpringCloud

ZBC陆续在主要CEX开启Staking,锁定市场大部分流通量成大利好

BlockChain先知

C++开发,这些GUI库一定不要错过!

Jackpop

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