幽默:软件工业的吐槽和醒悟 - tonsky.me

20-01-02 banq

我已经编程了15年了。最近,我们行业对效率,简单性和卓越性的缺乏开始真正引起我的注意,以至于我对自己的职业和IT感到沮丧。

(banq注:有一个笑话,一位高血压三高患者复诊,内科医生问他一天喝几两酒?他说八两,内科医生惊讶:我不是让只喝二两吗?患者回答:你说二两,外科医生也说二两,口腔医生说二两,肛肠科说二两,一共八两。这个笑话说明科学细分发展的今天,作为最终用户需要有自己的哲学保护自己利益,小孩的家庭作业也是,在大喊减负的今天,数学老师布置一小时作业,语文也是,最后四五门课合起来让孩子作业做到凌晨零点,谁来捍卫自己孩子和自己身体?只有我们自己吧)

横向类比看:现代汽车的工作效率是当前发动机设计实际可实现的98%。现代建筑仅使用足够的材料来履行其职能,并在指定的一些条件下保持安全。所有平面都收敛到最佳尺寸/形式/负载,并且看起来基本相同。

仅在软件中,如果程序以可能的性能的1%甚至0.01%运行,这就可以了?每个人似乎都同意。人们常常为效率低下而感到骄傲,例如“为什么我们要担心计算机速度足够快”:

@tveastman:每天运行的Python程序需要1.5秒。我花了六个小时将其重写为Rust,现在花费了0.06秒。效率的提高意味着我将把时间花在41年24天:-)

您可能已经听过这个口头禅:“程序员的时间比计算机的时间更昂贵。”这基本上意味着我们正在以前所未有的规模浪费计算机。如果每100公里消耗100升汽车,您会购买吗?1000升怎么样?对于计算机,我们一直都在这样做。

一切都太慢了

环顾四周:我们的便携式计算机比将人类登上月球的计算机强大数千倍。但是,其他所有网页都难以在最新的顶级MacBook Pro上保持60fps的流畅滚动。我可以舒适地玩游戏,观看4K视频,但不能滚动网页吗?那怎么样?

由Google编写的网络应用程序Google Inbox(也在Google的Chrome浏览器中运行)需要13秒才能打开中等大小的电子邮件

Windows 10 更新需要30分钟。这么长时间可能会做什么?足够的时间足以完全格式化我的SSD驱动器,下载一个新的版本并连续安装5次。

现代的文本编辑器比42岁的Emacs具有更高的延迟。文字编辑器!有什么更简单的?在每次击键时,您要做的就是更新一个很小的矩形区域,现代文本编辑器无法在16ms内完成。会花费很多时间。3D游戏可以在同一16ms内用数十万个多边形填充整个屏幕,还可以处理输入,重新计算并动态加载/卸载资源,这些是怎么来的?

通常,我们不会获得具有更多功能的更快的软件。我们正在获得速度更快的硬件,而运行速度较慢的软件具有相同的功能。一切工作都在可能的速度之下。有没有想过为什么您的手机需要30到60秒才能启动?为什么它不能在一秒钟内启动?没有任意物理限制。我很乐意看到这一点。

一切都是巨大

如果您只是阻止所有广告,则网络应用的打开速度最多可以提高10倍。Google恳求大家停止使用AMP计划,这是一种无需任何技术的技术解决方案,只需一点常识即可。如果删除膨胀,网络将很快变得疯狂。您必须多么聪明才能理解这一点?

没有应用程序的Android系统将占用近6 GB的空间。只需想一想这个数字有多大。那里有什么高清电影?我猜基本上是代码:内核,驱动程序。

Windows 95为30MB。今天,我们的网页比这还要重!Windows 10为4GB,是133倍大。但这是它的133倍吗?我的意思是,它们在功能上基本相同。是的,我们有Cortana,但我怀疑它需要3970 MB。

安卓中Google的键盘应用程序通常会占用150 MB的空间。在屏幕上绘制30个按键的应用程序真的比整个Windows 95复杂五倍吗?Google应用基本上是Google Web搜索的一个软件包,它的大小为350 MB!Google Play服务,我不使用(我不在从中买书,音乐或视频)— 300 MB,只能干瞪眼,无法删除。

安装所有基本(社交,聊天,地图,出租车,银行等)应用程序后,所有可用于照片的空间大约为1 GB。那就是没有游戏,也没有音乐!还记得操作系统,应用程序和所有数据都可以放在软盘上的时候吗?

一切都烂

3年前,一部16GB的Android手机还不错。如今,在使用Android 8.1的情况下,它几乎无法使用,因为每个应用程序的大小至少增加了两倍,而没有明显的原因。没有其他功能。它们没有更快或更优化。他们看起来没什么不同。他们只是…成长?

iPhone 4s是与iOS 5一起发布的,但几乎不能运行iOS9。这并不是因为iOS 9如此出色-基本上是相同的。但是他们的新硬件更快,因此他们使软件变慢。不用担心,您获得了令人兴奋的新功能,例如……以相同的速度运行相同的应用程序!我不知道。

iOS 11放弃了对32位应用程序的支持。这意味着如果开发人员在iOS 11发行之时不在身边,或者不愿意回去更新一次完美的应用程序,那么您很可能不会再看到他们的应用程序。

越差越好

我拥有的每台设备都会定期以一种或另一种方式发生故障。我的Dell显示器不时需要硬重启,因为其中装有软件。

定期复位是最好的办法

Linux 通过设计杀死随机进程。但是,它是最受欢迎的服务器端操作系统。

而且我甚至没有接触物联网。到目前为止,我还不确定要添加什么,这已经超出了笑点。

我想为自己的工作感到自豪。我要交付稳定的工作。为此,我们需要了解我们正在构建和构建的内容,而在内容膨胀中、设计过度的系统中进行这种了解是不可能的。

编程是一团糟

似乎没有人对构建高质量,快速,高效,持久,基础的东西感兴趣。即使有效的解决方案已久负盛名,我们仍然面临着同样的问题:程序包管理,构建系统,编译器,语言设计,IDE。

几乎所有的编译器,预处理器和后处理器都会为您的构建增加大量的,有时是灾难性的时间负担,而没有提供相应的实质性收益。

您可能希望程序员做出大多数理性的决定,但有时他们做的恰恰相反。例如,即使选择Hadoop 的速度比在单个桌面上运行相同任务的速度慢,也要选择Hadoop 。

机器学习和“ AI”在大多数计算机甚至还不够可靠的时候就将软件推向了猜测。

@rakhim:当一个应用程序或服务被描述为“基于AI的驱动”或“基于ML”时,我将其理解为“不可靠,不可预测且无法推理行为”。我尝试避免使用“ AI”,因为我希望计算机与之相反:可靠,可预测,合理。

我们将虚拟机放入Linux中,然后将Docker放入虚拟机中,这仅仅是因为没有人能够清理大多数程序,语言及其环境所产生的混乱。我们用毯子盖住狗屎只是为了不对付它。例如,“单一二进制”仍然是Go的巨大卖点。没有混乱==成功。

人们可以轻松添加过度设计的“完整解决方案”来解决最简单的问题,而无需考虑成本。这些依赖带来了其他依赖。

如果没有重新启动,程序将无法运行多年。有时甚至连几天都支撑不了。随机的事情都可能发生,没人知道为什么。

更糟糕的是,没有人有时间停下来弄清楚发生了什么。

这些都不是工程。那只是懒惰的编程。工程学是对性能,结构,构建极限的深刻理解。将写得不好的东西与写得更差的东西结合起来严格地反对这一点。要取得进步,我们需要了解我们在做什么和为什么做。

我们坚持下去

因此,所有内容只是在先前编写的几乎无法工作的代码之上添加的一堆几乎无法工作的代码。它的规模和复杂性不断增长,从而减少了进行更改的机会。

要拥有一个健康的生态系统,您需要返回并重新访问。您需要偶尔扔掉一些东西,并用更好的东西代替它。

但是谁有时间呢?25年来,我们还没有看到新的OS内核?因为太简单了无法重写?到目前为止,浏览器充满了极端情况和历史先例,以至于没有人敢于从头开始编写布局引擎。

当今对开发的定义要么为火上浇油,要么:

@sahrizv:
2014年-我们必须采用#microservices来解决所有与巨石有关的问题。
2016年-我们必须采用#docker解决微服务的所有问题。
2018年-我们必须采用#kubernetes解决docker的所有问题

或重新发明轮子:

@ dr_c0d3:
2000年:编写100行XML以“声明式”配置您的servlet和EJB。
2018年:编写数百行YAML以“声明式”配置您的微服务。
至少XML具有模式…

我们被束之高阁,没有人能拯救我们。

业务不在乎

用户也不在乎,他们只是期望我们能提供什么。我们(工程师)说每个Android应用占用350 MB吗?好吧,他们会忍受的。我们说我们不能让他们流畅地滚动吗?好的,他们将与断断续续的手机一起生活。我们说“如果不起作用,请重新启动”?他们将重新启动。毕竟,他们别无选择。

也没有竞争。每个人都在构建相同的缓慢、不可靠的产品。偶尔的质量提升确实会带来竞争优势(iPhone / iOS与其他智能手机,Chrome与其他浏览器),并迫使每个人重新组合,但时间不长。

因此,作为工程师的使命是向全世界展示当今计算机在性能,可靠性,质量,可用性方面的可能,我们工程师必须学习,因为除了我们,没有其他人向他们展示这是很有可能的。

并不全是坏事

有一些亮点表明,改进最新技术并非不可能。

马丁·汤普森一直是这样做(LMAX DisruptorSBEAeron),这些产品令人印象深刻,令人耳目一新的简单和高效

Raph Levien撰写的Xi编辑似乎是在牢记正确的原则。

乔纳森·布洛(Jonathan Blow)自己开发一种语言,可以在笔记本电脑上每秒编译50万行。那是冷编译,没有中间缓存,没有增量构建。

您不必天才就可以编写快速的程序。没有魔术。唯一需要做的就是不要建立在现代工具链上的一堆正确的废话之上。

更好的世界宣言

我希望提高软件工程的最新水平,而不仅仅是停滞不前。我不想一遍又一遍地重新发明同样的东西,每次表现都更差,而且更肿。我希望可以有一个值得相信的目标,一个有价值的最终目标,一个比我们今天拥有的更好的未来,并且我希望有一个拥有相同愿景的工程师社区。

 

                   

8