一切在软件中都很棒,但每个人都不满意



在Habré上可以找到一个典型的立场,不仅是:“尽管多年来硬件一直在进步,但人类却通过编写更糟糕的软件将影响降为零。”

就像处理器中有更多的内核一样,但是它的速度比以往任何时候都要慢。电子和懒散是黑暗的生物,它们剥夺了我们的幸福和记忆。与旧版操作系统相比,移动应用程序变得更加混乱。在操作系统本身中,确实没有任何进步,但是由于某些原因,它们的规模仍在不断扩大。无论是何时人们知道如何将操作系统安装到软盘上!

我将直接说:当我看到这样的陈述时,他们炸了我。我认为,他们错过了许多重要因素。最后,情况类似于路易斯X凯(Louis X Kay)的经典演讲“ 一切都很棒,没有人高兴””:一切都非常好,人们坐着抱怨。

因此,我决定描述这些遗漏的因素。既然文本很苛刻,所以我想强调一点,我的观点纯属个人观点(尽管我指的是我所在公司的会议)。

记忆选择性


众所周知,有一种怀旧的效果:“早些时候草更绿,音乐更好。” 但是,我认为,当感觉与现实大相径庭时,这种影响在许多方面都令人恐惧。

我说的是这样的陈述:“几乎计算机上的所有东西都感觉比1983年慢。” 从成千上万的喜欢来看,这不是一个孤立的观点,而是一个巨大的观点。


我的第一个反应是:“嗯,1983年的4K视频流如何?”就是说,对于初学者来说,让我们回想一下,当今大多数计算机应用程序以前都是不可能的,包括仅仅因为速度。电影一次(甚至不是4K,而是1080p)必须下载数月,然后计算机才能以24 FPS的速度播放。然后,如何将当前速度与太低以至根本不存在的速度进行比较?

第二个反应:是的,从命令行转移到GUI的某些事情在那里可能要花费更多时间。我已经准备好相信2020年的Word比1983年的控制台编辑器vi的启动速度要慢(我个人无法比较:这是90年代我第一次使用计算机)。但是,如果这对您如此重要,那么您也可以在2020年将命令行用于许多“ 80年代以来的任务”。我现在正在vim中写这篇文章-一个很棒的编辑器,插件生态系统有助于跟上时代的发展。在现代视网膜iMac上看起来很棒:字母变得非常清晰,并且仍然可以立即使用。问题是什么?

但是最重​​要的事情甚至不在两个命名的事物中。更重要的是以下几点:在我看来,我们开始忘记多少计算机速度下降了。当某件事开始放慢脚步时,我们会立即注意到它;但是当某件事变得更快或更容易时,我们只是理所当然地忘记了过去。

对于写“一切都更快”的所有人来说,我有一个问题:例如,您还记得吗?


我坦诚地承认:我自己并不特别记得这一点。今天,当我关闭计算机电源时,我不会想到二十年前我坐在并等待在按下OS中的按钮与按下系统部件上的按钮之间的事实。我只是理所当然地认为,现在它并没有那么必要了,而忘记了有什么不同。

随着计算机启动的时间,变化也很大。现在,我在aimak上坐下,按下一个键,再过一秒钟就可以开始工作了(这要归功于SSD和睡眠模式)。小时候我在等待Windows从HDD引导时,我简直不敢相信我会活着看到这一点。

“当一封信中有数百张图片时,它会非常缓慢地打开,有时甚至是十秒钟!”我知道这很烦人-但是在2000年,我仔细听了一下调制解调器的颤音,然后听了一下,然后等到邮件的主页缓慢加载,然后又不立即加载该信件本身,然后才开始阅读-完全没有图片,只有文字。今天,这将立即开放。也许您只是不需要敲出一千张图片,而这是另一种发明的通讯方式?在宣布“一切都变坏了”之前,让我们考虑一下:一封有这么多图片的信件在2000年将开放多久?

或者这是时间的另一种记忆,就像雨中的眼泪。这种笑话在2000年代很流行:“一台慢速的计算机就是您知道所有Photoshop开发人员的名字的时候。”对于那些并不意味着什么的人来说:螺旋Photoshop在俄罗斯非常流行,每次启动时,俄罗斯人都必须考虑很长时间:


哦,我现在意识到我认识其中一个人-肖恩·帕恩(Sean Parent 在我们家讲话 C ++俄罗斯

现在比较。今天,他们开玩笑说:“一旦将一个人送上月球花了2 KB的内存,现在就需要2 GB的空间来发射Slack。”听起来不错,但您注意到其中的不同吗?不管Slack消耗了多少RAM,用户都不会遇到“您可以在程序开始时喝茶”的情况。一切都变好了,但是我们没有注意到。

或者这是一个具有历史意义的历史文物:Masyanya系列“下载”(2002年)。英雄们非常担心断开连接,必须重新下载文件。


请注意:他们正在下载的文件重591 KB。角色担心必须重新加载半兆字节。这是2002年的真实情况。

作为比较,这是生活中的一个新例子。我在Mac上遇到了一个小技术问题,在Stack Overflow上我发现了“安装Xcode并接受其使用条款”的建议。我的反应:一次单击即可下载8 GB的IDE,这很奇怪,但如果有帮助,为什么不这样做。

就是说,这些年来,程序的大小一直在增加(在Masyan从“ 8 GB IDE”用户那里移开头发的时候),但是下载它们变得更加容易,我们的生活变得更加美好。

好吧,这部分的最后一个示例是关于“膨胀的移动应用程序”的。愤怒的帖子(例如“有时”)撰写了此内容。应用程序大小不受控制:“,因为LinkedIn何时开始在电话上占据275 MB?在2018年,“在安装应用程序后,我只剩下1GB的照片了” ,这样投诉是可能的

我不会说谎,LinkedIn的275 MB也给我带来了疑问。但我记得2010年他们在哈布雷(Habré)上写道,阿尔法银行 Alfa-Bank)拥有移动应用程序。它重达30兆字节-今天这样的大小根本不会引起任何问题。然后他们在评论中写道:



您知道为什么吗?在那些日子里,例如,俄罗斯用户可以带着HTC Hero走路。让我们看一下它的特性:“存储-512 MB,应用程序165”。所有已安装的应用程序总共165 MB!在这种情况下,我必须不断地选择哪些更重要,哪些没有生活。而要安装一个30 MB的磁盘,则必须一次拆除其他几个磁盘。真痛苦。

如果我们能回到2010年,与经历这种痛苦的人们接触,并告诉他们2018年的话,“安装应用程序后,我只剩下千兆字节的照片了”,我想我们会被击败。这些话听起来不算是一种抱怨,而是一种嘲弄和吹嘘。

甚至从2018年开始,当这种抱怨出现时,情况还是有所改善:现在基本版的预算小米Mi A3配备了64 GB的存储空间,因此在安装应用程序之后,显然会有很多免费的空间。

是的,在过去十年中,应用程序显着增长。但是,同时空间的数量却增加了数百。也就是说,生活已经好了十倍。

您还记得2010年使用智能手机的情况以及那里“一切都变慢了”多少种痛苦吗?

  • 少量的RAM意味着该应用程序必须从头开始运行,而不能立即切换到已经运行的应用程序。
  • 低功耗处理器从头开始非常缓慢地启动它们。
  • 我不想记住移动互联网的速度。
  • , USB 2.0 .

使用智能手机似乎一直是一种期望:无论您想做什么,这都包括“站立和哑巴”的时间。如果您在街上并且需要地图,则请保持静止,然后首先等待直到应用程序启动,然后再等待其中的地图加载。您将为同时消耗的流量支付大量费用。

与此相比,我们所有人现在都生活在天堂之中,但与此同时,我们也在积极抱怨。它看起来像是“第一世界的问题”-类似于“我想阅读推特躺在地上,将手机握在我的脸上,但随后您可能会不小心将它丢在自己身上。”好吧,我很同情,但是在这种情况下说“一切都变得更糟了”,似乎无视过去和现在。

: « » . , , . .



«»


还有另一种典型情况。人们说:“软件变得越来越and肿,运行缓慢,尽管对于用户来说,几乎没有任何变化。”与此同时,他们还不完全了解那里实际发生的情况。

作为一个小的说明性示例。 2018年,Nikita Prokopov发表一篇有关“被破坏的软件” 轰动性文章,其中包括“我不使用的Google Play服务(我不在那里购买书籍,音乐或视频)”一词-仅300 MB并且无法删除。”

读这篇文章,我想充满正义的愤怒,是的。但有一个警告:实际上,Google Play服务不是关于“购买书籍”的。它包括许多不同的API,并且据报道维基百科,“所有主要的Android服务均由Google Play服务控制。”也就是说,尼基塔很可能一直在主动使用该软件,而自己却一无所知-只是Google给他起了一个令人困惑的名字。

我在这里的目的不是批评某个特定的帖子,而是展示一种通用的方法:我们经常说“应用程序无缘无故肿胀/放慢速度”,没有完全理解这些原因。他们在应用程序中添加了一些内容,其开发人员具有有关确切内容和原因的详细信息,但我们没有它-但是由于某些原因,我们认为自己在这方面比他们更有能力。

但是内部有很多从外部看不到的东西。以文本编辑器为例:似乎人们早已不使用最弱的硬件来制作它们了,很长一段时间以来一切都清楚了,没有什么可以放慢的,“这可能会更容易”。因此,从外部看起来像这样:如果某些事情不能立即解决,那么这些歪曲的开发人员就已经忘记了人类已经是多么熟练。但是,如果您深入探讨该主题(我们以某种方式发表了一篇有关此主题的文章),就会清楚地显示出许多明显的细微差别-“更简单的方法”一词将不再具有说服力。

或另一件事。有关移动操作系统的新闻经常引起这样的反应:“在过去的八年中,没有做任何有用的事情。每年,他们大惊小怪地推出了一个新版本,比以前的版本重,但从差异中我只能看到新的表情符号。在棺材中,我看到了这些表情符号,返回了旧版本,效果更好。”



听着,好吧,似乎所有IT专家都从经验中了解到:您可以花大量精力进行合理的后端重构,用户甚至不会注意到它,或者您可以在半小时内更改界面中的几个图标,并且将在用户之间展开激烈的讨论。也就是说,我们知道“外部”只有一些变化是明显的,而通常不是最重要的变化。那么,为什么我们没有意识到,如果我们自己只在新版本的操作系统中注意到表情符号,那么这更多地是在谈论我们而不是在谈论操作系统?

以Android 8.0中的Project Treble为例。众所周知,Android存在一个大问题:尽管iPhone可以轻松地更新到新的OS版本,但Android手机通常会永久保留预安装的版本,因为它们的制造商不想四处逛逛。为了简化制造商的生活并促进更新,谷歌开始对整个架构进行大规模改造。尽管高音无法完全解决问题,但统计数字显示出明显的改善。也就是说,为了解决紧急问题,Google投入了大量工作(重构这样的庞然大物对您来说不是一件好事),并且情况得到了部分改善。在我看来,公司只需要解决严重的问题,他们就把事情做好了。

现在告诉我:如果您不是移动开发人员,您是否听说过?当您首次使用Android 8.0以上版本购买手机时,它是否以某种方式影响您对新版本的看法?这不太可能,因为在使用手机的最初几个月中,这根本不会出现在用户面前。您只有在一段时间后才会发布新版本的Android。并且仅当电话制造商属于Treble能够更新设备的公司之列。即使在这种情况下,用户也可能没有意识到更新是由于Google造成的,并且仍然说“八年来没有做任何有用的事情”。

这种情况很典型-“冰山的水下部分”通常很大。当Android引入自适应电池(“智能”定义,哪些应用程序可以在后台使用电池)时,您是否测量过手机的功耗是否发生了变化?当后台使用Google Play保护来保护您的安全时,您还记得以前没有过吗?当您添加了对AV1视频编解码器的支持时,您是否认为该编解码器的未来很有可能并且这种支持很有用?或者,您只是拿起电话,表情符号响起,而AV1支持却没有响起?

这篇文章发布后,一个奇妙的话题出现ny软件的膨胀主要是由于处理了罕见的情况。然后发生了什么:在1%的情况下,这些情况出现了,一切都变得好多了-但是,没有遇到这些罕见情况的人中有99%无法正确评估这些变化。



由此可以得出结论,当我们在所有“肿胀和抑制性应用”中宣誓就职时,在很多情况下都有其客观原因。在工作时间的某个地方,人们经过深思熟虑地权衡了所有利弊,彼此进行了讨论,并得出了利大于弊的结论。然后我们来了,我们不知道尺度是什么,我们不会花时间进行深思熟虑的研究,我们只会看到大小发生了变化,并且我们得出了一个自信的结论:“一切都变坏了”。

一般结论:关于“无意义的肿的软件”的某些说法是由误解引起的。而且,在没有深入研究原因的情况下做出这样的陈述并不是最明智的策略。



表现注意


关于“被破坏的软件”的说法听起来好像是开发人员过去用来节省计算能力,但是现在他们都想吐出优化的气息。就像,铁的工作原理非常重要-铁的要求很高,所以摩尔定律会以某种方式破坏一切。如果代码执行缓慢,则它会像占用内存一样吞噬内存,并占用大量空间-顺便说一句,没有人会担心它并改善某些地方。

听着,这根本不是真的。作为一个单独的示例:Facebook Messenger最近被重写,据报道,生产率提高了一倍,尺寸减小了四倍。上面所说的LinkedIn应用程序重275兆字节-我现在检查了一下,在App Store中看到“ 195.4 MB”一词,看来他们也设法将其减少了一半半。也就是说,两家公司都清楚地考虑了资源的消耗,并分配了大量的人力来减少资源,这些资源可以用于“节省功能”。

而且由于我参与了面向开发人员的会议并与许多会议相交(此外,来自不同的堆栈),所以我看到了他们关心的主题。他们所听的报道,他们所谈论的内容以及撰写的帖子。

而生产力正是这些主题之一。用“优化iOS应用程序的启动时间”之类的报告名称可以看出:开发人员愿意花60分钟来收听毫秒。

他们谈到了无处不在的生产力,甚至在JavaScript世界中(“通过望远镜提高JavaScript性能”),至少在移动开发中(“如何在iPhone中容纳一百万颗星星”)。但是他们大多数都在后端说。我认为这是因为用户自己购买了智能手机,但是在后端,该公司为计算能力付费,因此有进行优化的强大动力。

我最近做了一个简单的实验:我打开了Java会议JPoint的程序并查看了关于性能的多少个性能描述。后来,由于冠状病毒的缘故,我们将会议推迟到了六月,以便程序可能会更改,但是无论如何结果都是指示性的。他们是:

  • “本次演讲将涉及生产者性能调整。”
  • “考虑文件I / O优化方法”
  • “也许对于其中一个模块,您想要比从Java中挤出来的性能更高的性能?”
  • “ HotSpot JVM会执行哪些与安全点相关的优化?” 开发人员应该记住什么以避免不必要的停顿?”
  • “ Valhalla项目,内联类型及其周围的一切,从软件模型到性能”
  • “优化查询性能,吞吐量和内存消耗”
  • “该报告致力于对性能方面对Apache Cassandra数据库进行写入的过程进行详细分析。”

听着,如果我以喝酒游戏的形式进行这项实验,那么到最后我会喝醉了。用肉眼可以看到:Java开发人员关心他们如何使代码不仅有效而且快速。

而且:通常它甚至会激怒他们!从与绩效密切相关的人们那里,我反复听到过容易的事情。例如,为了略微提高生产率,人们使用了一些肮脏的骇客,最终造成了比他们要解决的问题更多的问题。嗯,这是在2017年JPoint上Alexey Shipilev的漂亮主题演讲中,我们为Habr进行了解密



总结:Internet感叹“开发人员懒惰,完全停止思考刹车”,实际上,许多开发人员对它们的思考超出了必要



有意义和权宜


我认为,现在最重要的论文。

是的,随着时间的流逝,应用程序需要越来越多的资源,有时需要几个数量级。是的,即使那里没有什么必要,我们也开始将更多精力投入到我们的项目中,而不是花时间隔离“严格必要”的东西。这是真的。

但是我相信,不断增长的应用程序并不能使当今的开发人员变得愚蠢。而且,情况恰恰相反:

如果应用程序没有增长,开发人员将是傻瓜。

想象一下一个世界,其中硬件在积极开发,而软件开发的方法却保持不变。尽管没有人会使用软盘本身,但是程序仍然适合软盘的容量。以性能为名,几乎所有内容都将用C ++编写。所有开发人员都会不断降低工作水平,并且知道可以提取几个字节的每个位置。没有“现在我们将为该任务安装五个库”,只有针对特定项目进行了仔细验证的解决方案,其中没有多余的内容。通常,需要进行优化的假期和对资源的谨慎处理。现在,所有这些都作为“丢失的技能”而感到遗憾。

你知道这张照片给我留下什么样的印象吗?一个大家庭被迫住在一个小房间里,因此她学会了如何精确地放置东西,并掌握了创建五层床的秘诀。然后她搬到了一个宽敞的多室公寓-但出于习惯,她只在那儿住了一个房间,其余的都空了。人们仍然坐在彼此的头上。

问题:您认为这很疯狂吗?如果可以给每个人足够的空间,那为什么要保存它呢?如果在同一时间没有地方邀请某人参观,谁能从古老的五层床工艺中受益呢?现在该掌握选择特大床的新技能了吗?

在软件中也是如此。如果在一个甚至廉价智能手机都具有64 GB的时代,我们将体验到“ Kotlin运行时将使我们的应用程序增加几兆字节”,那么我们将变成这个家族。放松一下,在里面放一些东西是必要的。如果浪费了,那就没有人能比这更好。如果空间很大,并且由于某种原因需要钢琴,那么您可以放心地设置它而不必担心平方厘米。

松弛-这是钢琴。好的,他吃了很多内存,但是您是否听说过非IT人员像过去常常抱怨Photoshop那样抱怨他?根据我的感觉,普通用户已经有足够的空间,因此这种“钢琴”不会阻止他们“在房间里走来走去”。是的,您可以用钢琴代替它,以节省空间。但是,如果您住在宫殿里,并且多年来宫殿的面积变得更大,那为什么呢?

我认为,由于Slack,大多数经验丰富的IT人员需要RAM来完成其他困难的任务。但是IT人员却是另一回事:开发公寓的隐喻,这些人的车间是由公寓组成的。好吧,是的,无论您提供什么宫殿,所有房间都将占据非常重要的位置。然后钢琴会干扰,因为您可以改用车床。但是世界上大多数人的生活方式有所不同,他们不需要家里的车床,并且已经有足够的资源来满足他们的生活方式。

在这种情况下,当内存中有很多东西时,要避免所有占用内存的事情就变得很热衷-就像移动任务管理器一样,用户殴打正在运行的应用程序以“清除RAM”。移动平台的创建者曾多次说过:“停下来,疯子。如果没有足够的内存,系统本身将终止应用程序,为什么要在此之前将它们钉牢?购买具有大量RAM的智能手机,然后将其保留为空而不使用所支付的价格,这有什么意义?”


它看起来已优化。你想住在这里吗?

我还记得带有“ 2000错误”的故事。二十世纪中叶,一位来自IT专家的人回忆说:“我们就是其中的一员。然后,我们保存了每个字节。当我们想到可以将年份保留为两个数字而不是四个数字的想法时,我们感到非常聪明。我们在一个堆中节省了两个字节!直到本世纪末,后果才变得明显。”

是的,当时以两位数记录年份似乎是一个合理的决定。它直接体现了所有提倡“谨慎”方法的拥护者。这是他们真正在照顾资源方面达到极限的地方。

但是随后,多年之后,其他人不得不花费大量资源来确定此决定的后果并防止出现问题。

而现在,当保存的两个字节不再对任何人有用,并且负面后果为人所知时,保留这样的年份将是很奇怪的。

所以:我今天想唱的很多东西,就是将来的“合理节约资源”,看起来就像是“节省比赛费用”,花了更多的资源。例如,由于开发人员的时间也是最宝贵的资源,因此这里通常不包括在计算中。如果您已经超出了数据对齐的范围,并且您的应用程序变得更小,更快,但是您花了一个星期的时间,而这可能会成为一项有用的功能,您使用户变得更好还是更糟?

, « , , ». .

— . , , .

, - ( ), . .




我会在评论中预料到反对意见:“但是任务X对我而言的执行速度比13年前要慢得多,让我回到2007年。”

不要误会我的意思:我并不是要说没有这样的任务。。并且确实发生了依赖关系的过度使用。和膨胀软件发生。当我听说Photoshop中有视频编辑功能时,我会像您一样感受到“为什么”的感觉。当我看到使用create-react-app创建任何应用程序立即意味着其中包含28678个文件的4304目录时,我也有一个疑问,我们是否已移至其他位置。有许多实际问题值得讨论。

我唯一的主张是,与这些问题相关的是一种激进派别,它由于软件的普及而在世界的尽头。他们改写了该部门的历史记录(“它过去通常能更快地工作!”),误解了正在发生的事情(“为什么Windows多年来发展了,那里什么都没有真正改变”),对开发人员说了不当的话(“他们不想优化任何东西”) “,走极端,让我们保存每个字节,即使这会使用户变得更糟。”我们不要那样做。

当然,我对激进立场的反对也有些激进(正好相反)。您也可以发现它们的缺点,它们也可以称为一个教派。但是,这篇文章的目的并不是要让我的每句话都被视为最终真理。其目标是使人们更少地参与教派。

主要结论是无聊和平庸,但至少是正确的:这一切都取决于具体情况。优化不是绝对邪恶,也不是绝对美好。他们可以帮助和伤害。在某些情况下,显然值得进行优化,而在某些情况下显然不值得进行优化。在中间情况下,不同的人会以不同的方式看待“值得或不值得”,而没有人会更正确,这是正常的。

如果有人(包括我在内)告诉你,否则-这是宗派主义者,将他追到脖子上。

All Articles