软件开发越来越糟?

66f9349dbbdac949b08d174e6580e446.gif

内存越来越大,空间却越来越小!

原文链接:https://stackoverflow.blog/2023/01/30/is-software-getting-worse/

本文为 CSDN 编译整理,未经授权,禁止转载!

作者 | Isaac Lyman    译者 | 弯月

责编 | 梦依丹

出品 | CSDN(ID:CSDNnews)

最近,我偶然间读到Nikita Propokov的一篇文章《软件幻灭》(https://tonsky.me/blog/disenchantment/)。这不禁让我想起了 Maciej Cegłowski 的帖子《网站臃肿危机》(https://idlewords.com/talks/website_obesity.htm),以及其他几篇类似的帖子。

越来越多的软件开发人员认为,如今的应用程序规模越来越大,速度越来越慢,问题越来越多。然而,以这个时代的硬件水平,我们理应能够编写出更快、更小、更健壮的应用程序。DOOM,于 1996 年问世,就能在怀孕测试仪(https://www.cnet.com/culture/programmer-makes-original-doom-playable-on-pregnancy-test/)以及其他上百种意想不到的设备上运行。而另一方面,时至 2022 年,聊天应用程序在后台运行时居然会占用 0.5GB(甚至更多)的内存,有时甚至会让设备完全失去反应,即使在高端硬件上也是如此。

对于这个主题的帖子,人们普遍认为 80% 的批评是公平合理的,还有 20% 只不过是没病空呻吟。

大多数开发人员都知道,千万不要说“这只是一个智能手机操作系统,能有多难?”之类的话。或者,“90 年代的电子表格应用程序只需要 10 KB,为什么这款应用需要一个G?”若非亲手构建应用程序,你永远无法想象其复杂性和困难程度。

但这并不意味着,我们不能进行客观的批评。如今的应用程序的的确确比以前更慢了,而且还在没有相应增加价值的情况下呈指数增长。其实,几乎所有现代应用程序都可以被优化。我们可以提高它们的速度,甚至可能提高几个数量级。我们可以删除代码。我们可以编写微型的、专门构建的库。我们可以找到压缩文件的新方法。

但为什么我们没有这么做呢?

Propokov 的答案是“软件工程师并没有为自己的工作而感到自豪”。这句话虽有一定的道理,但我坚信,努力工作并出色地完成任务是人类的自然天性,只有当某些事情反复阻碍时,我们才会失败。因此,与其抱怨人类的懒惰,并以此来解释为什么如今的软件如此缓慢且有缺陷,我们更加应该思考:“什么样的力量和驱动力创造的环境导致软件工程师很难全力以赴做好自己的工作?”

对此,我有几个答案。

f0eebd6e914e4dcfb6241e13110c602b.png

速度、可靠性以及磁盘占用空间并不能吸引客户

在工程师眼中,软件是由交互组件、输入和输出构成的网络。这个模型既准确又实用。然而,这并不是打包、营销或销售软件的方式。对于商人和客户来说,软件就是一系列功能。

以库存管理应用程序为例。营销会大肆展示高分辨率的库存照片、大胆的色调,以及各种功能亮点:

  • 跨多个仓库跟踪库存;

  • 与物流、供应链以及销售系统集成;

  • 多层次的周次以及月度报告;

  • 细粒度的访问和安全控制;

  • 所有终端的即时更新;

  • 可在 Windows、MacOS 和 Linux 上运行。

这些陈述都是可证伪的,也就是说,我们只需要一个小时的演示,就可以证明软件能否做到这些。但只有一条与速度有关。软件实际上可能非常慢,需要几秒钟才能响应按钮点击,但依然可以保证“即时更新”。

速度会影响用户对应用程序的整体体验。速度是质量的重要标志,但这个特性很难吸引人。如果你花大量时间优化核心流程,而竞争对手正在开发一种新型报告,那么有可能接下来你会因此而损失大量客户。针对现有客户调查一下,你就会发现,当问及下一步应该开发什么时,他们大多会要求功能,而不是速度,除非软件太慢以至于无法使用。再者,董事会根本不可能允许公司暂停现有的产品开发计划,抽出六个月的时间来处理技术债务。功能、功能、还是功能,我们身上的这些压力从未减轻。

程序员希望编写快速的应用程序。但市场根本不在乎

你可能注意到,上述我们没有提及可靠性。有谁敢说自己的应用程序没有bug?我们根本没有办法确保这一点,更不用说通过产品演示证明了。难道我们要说“90%的单元测试覆盖率和全套集成测试?”谁能明白这意味着什么,而且如果你向他们解释,他们会感到无聊。我们无法向客户解释可靠性,让他们相信你的说辞,同时又对这个话题感兴趣。敏捷时代告诉他们,bug是不可避免的,你只能努力修复。由于没有全面的方法来衡量软件中的缺陷,因此不能将其作为比较产品的特性。我们投入时间来测试、重构和改进,但可能完全不会有人注意到。

程序员希望编写没有bug的应用程序。但市场根本不在乎

另外,上述我们也没有提到磁盘使用情况,尽管有时我们会在“下载”按钮下方用一行小字显示下载文件的大小。与上述功能亮点相比,磁盘使用情况在客户心目中的影响力太小。上一次,你因磁盘空间不足而责怪开发人员(而不是自己的计算机)是什么时候?你是否会根据下载文件的大小选择视频游戏?可能永远不会。你会发现有人抱怨最新的《使命召唤》太大,但新版发布的那一周仍然赚了 10 亿美元。

减小可执行文件或输出包的大小是吃力不讨好的工作。但这通常是一项技术含量很高的工作,不仅需要了解正在构建的应用程序,还需要了解其依赖的数百个较低级别的库。此外,通常我们并不鼓励这项工作,部分原因是这是一个雷区。你也许并不了解某一行代码的作用,但这并不意味着它没有用。也许这样做只会造成在智能手机上运行Ubuntu的那0.01%的用户出问题。但也许你付出了大量努力,最后不过是防止应用程序在每四年一次的闰日崩溃。即使是最小的工具函数最终也会发展成公司智慧的产物。我们没必要惹这种麻烦。

一些程序员希望编写更小的应用程序。但对市场或我们来说,这样做并没有好处

ea1df34468a2e10896e20ddeff3edc6d.png

消费类软件被低估

分发应用程序并不难。互联网的诞生或多或少正源于此。但销售应用就像拔牙。大众愿意花 15 美元买一个三明治或一张电影票,即便碰到烂片也只能一声叹息,但面对感兴趣的应用,即便只需要 1 美元,他们也会犹豫不决。只有两种人群愿意为优质的软件付费:企业和游戏玩家。不知为何,我们所在的世界其他人都希望软件免费。

这种期望对消费应用的质量造成了破坏。构建一款应用所需的成本大约为 5 万~50 万美元。如果你无法让用户付费,那么就必须通过其他方式收回成本。以下这些因素是导致 Web 和原生应用膨胀和缓慢的最主要原因:用户跟踪、广告、营销漏斗、捆绑销售、付费订阅、针对上述所有内容的反制措施,以及其他上百个不太体面的收入来源。人们往往以为这些都是因为商家的贪婪,但其实大多数时候都是因为他们很绝望,没有更好的方式。互联网上的一些流行网站,大多只能勉强维持。

我并没有夸大这样的系统造成的浪费和低效率。如果按照合理的价格发布一款独特、高质量的应用,结果往往是无人问津,下载量为 0。于是,你只能以免费试用/订阅模式重建。然而如此一来,即便下载此次达到数百次,也只有少数用户愿意转为付费,这些收入不足以支撑你的开销。那么,接下来,你只能在免费版本中投放广告,虽然 UI 设计师可能会极力反对。然而,即便这样,你也会发现广告浏览获取的收入仅为几分钱。于是,你只能投放更多的广告。然后,用户就会抱怨广告太多,因为在他们看来,你应该让他们继续免费使用应用。你尝试将一些广告换成应用内购买。而用户会继续抱怨。无奈之下,你添加了一些“行动呼吁”,鼓励用户付费使用无广告体验版。结果发现,很多人很快就删除了应用。为此,你添加了分析和遥测,这样就可以弄清楚如何保留住客户。然而,你发现“保留”可能就是“成瘾”的代名词。如此循环往复,不久之后你的应用就彻底“面目全非”,成为一个毫无乐趣的收入机器,各种滥用用户的注意力和隐私。但你依然无法赚到很多钱。

如果人们愿意付费购买应用,我们就可以避免这一切。但不幸的是,他们不愿意,所以应用都变成得臃肿、缓慢、bug 累累。

0c045e978fab80fe2adfa55e7181463d.png

开发人员没有意识到自己的力量

看到这里,有人肯定会说,你就知道指责他人,难道软件开发人员就没有责任了吗?我认为,确实有些方面我们可以做得更好。

即使在经济衰退期间,开发人员也拥有非凡的影响力。我们可以坚持使用(或不使用)特定技术。我们依然有高薪、福利和股权。我们可以团结一致来改变整个公司的文化和工作环境,虽然这种力量非常微弱。优秀的程序员很难找,每个人都知道,而我们知道他们知道。

这就是我们的力量,我们可以更好地利用这种力量。

我们应该在每次冲刺中预留一些时间出来解决技术债务。当有优化和改进代码的机会时,我们应该设法延迟功能开发。我们应该说服老板支持开源项目。我们应该建立一种期望,让所有人明白我们不一定要投入所有工作时间开发新功能,我们的准则和行业对我们有更高的期望。

大多数时候,这些做法都不会产生任何负面影响。我们并没有过分要求。每个行业都有专业标准和要求。为什么我们认为软件开发就不能建立类似的标准和要求?

唯一需要注意的是,这些激励措施对我们没有好处。这是一场艰苦的战斗。有些经理不愿意我们花时间解决技术债务,仅仅是因为他们不理解。有些销售人员会担心我们的软件没有竞争力。投资者可能会威胁将我们的工作外包给更灵活的开发人员。客户的态度和市场力量的转变还需要一段时间。但是,如果改变现代软件的状态是一个有价值的目标,那么就值得付出努力。

58f4e8410bcfce2cbcba7712a5b59738.png

未来软件开发能得到改善吗?

我对软件的未来并不乐观。90 年代,程序员可以构建微型、高度优化的应用程序,因为当时他们别无选择。客户的计算机只有 32MB 内存和 200 兆赫兹的单核处理器。如果应用做不到极简,就无法运行。如今,两年前购买的基本型号 Macbook Air 的内存是原来的 250 倍,而且四核处理器的速度是单核的数倍。我们有更多选择了,但我们交付的应用 90% 是垃圾。除非有人抱怨,否则我们不会做优化。我们会把整个Web浏览器打包到发消息的应用、做笔记的应用中,甚至连我们写代码用的工具都是如此。

在过去的二十年里,我们一直在努力提高软件开发的速度,降低软件开发的难度,让软件越来越易于使用。诚然,如今我们正在以前所未有的速度创建应用,应用拥有的功能数量也超出了以往,而软件开发人员的经验也比以往任何时候都匮乏。从商业的角度,我们不难看出这其中的吸引力。但我们也为此付出了代价,我们的客户、电力能源乃至整个地球都为此付出了沉重的代价。

这种状况不会在一夜之间发生变化,甚至可能在未来五年内都不会变化。但我依然对此充满了希望。

最新一波 Web 编程语言和技术(如 WebAssembly、ESBuild、SWC、Bun 和 Yew)正在努力让编译时和运行时的速度和可靠性达到新的水平。Rust 不仅能够提供与 C 看媲美的性能,而且对开发人员非常友好,这种高级语言在 Web 服务器上越来越受欢迎。此外,还有 Tauri 等轻量级 Electron 的替代品有望成为 Web 开发人员的首选跨平台框架。Tree-shaking 也将为编译器和打包器带来新的希望。

就市场而言,几款流行的游戏(比如《死亡细胞》和《以撒的结合》)已经以付费下载的方式进入移动平台。虽然革命尚未成功,我们仍需努力,但这是对全球最大的技术消费者群体智能手机用户进行软件成本再教育的一次突破。

如果在过去的二十年里,我们一直致力于提高生产力(虽然此过程会牺牲掉效率和财务可持续性),也许接下来的二十年里,我们可以解决集体技术债务,找回失去的效率,并改善经济交流,同时还不会失去软件为我们的生活带来的生产力提升。

7ecef816cad218d6ffb3cb7c2c04b2b4.gif

《2022-2023 中国开发者大调查》重磅启动,欢迎扫描下方二维码,参与问卷调研,更有 iPad 等精美大礼等你拿!

5665452e01ccc132a48559c904231ec1.png

☞iPhone 14 Pro 全系降价 700 元;Gmail 之父:有了 ChatGPT,搜索引擎活不过两年了|极客头条
☞JavaScript vs WebAssembly:哪个更节能、更快?
☞马斯克亲自下场测试 Twitter 功能,网友吐槽:他解雇了任何可以解释的工程师!

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

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

相关文章

超详细且简单的Qt Designer设置界面背景图

---------------------------------------------------------- 这里介绍的主要是一种放置界面底层的背景图方式 首先,先新建一个框,并填充你所需要的一些元件,这里就用我近期的一个小项目吧; 本来, 界面如上所示。…

这份Github标星30K的神仙面试笔记 ,包含了所有Android中高级大厂知识面试题!!!

作为一个 Android程序员,你平时总是陷在业务开发里,每天噼里啪啦忙敲着代码,上到系统开发,下到 Bug 修改,你感觉自己无所不能。然而偶尔的一次聚会,你听说和自己一起出道的同学早已经年薪 50 万&#xff0c…

技术简历写这么写,才能得到BAT面试官们的青睐

公众号【程序员江湖】 作者陆小凤,985 软件硕士,阿里 Java 研发工程师,在技术校园招聘、自学编程、计算机考研等方面有丰富经验和独到见解,目前致力于分享程序员干货和学习经验,同时热衷于分享作为程序员的一些成长心…

程序员简历怎么写?

程序员简历怎么写?这些年工作作为求职者面试了很多公司,也作为面试官看过很多简历、面试过很多求职者。现在国内疫情即将过去,很多小伙伴开始准备简历看新的机会了。但是许多小伙伴因为简历问题被邀请面试寥寥无几,今天来教大家程序员简历怎…

英文论文的proposal怎么写?

许多留学生在写论文之前老师都会要求写一份proposal,但是对于没有写过proposal的同学来说,一定是束手无策的。由于导师安排了经验丰富的师兄带着我写,也让我少走了很多弯路。上周,终于把完成的初稿发给老师,老师花了整…

英语学术论文写作

本文为《英语科技论文写作(通信、计算机、密码、测绘版)》一书的学习总结。 第一章 概论 略 第二章 英语科技论文的文体特点 2.1 词汇特点 英语科技论文的特点之一就是大量使用科技词汇,主要包括以下几类: 纯科技词汇。如diode…

毕业论文写作Tips

思睿的博客 原文链接:http://www.cnblogs.com/emouse/archive/2013/04/06/3002157.html 又是一年毕业季,毕业论文的写作是每个同学都必须面临的一个问题,通过交流发现,很多同学甚至研究生毕业都没有用过专业的文献管理、公式编辑…

英文写作经典指导书--学术写作必备

以下书籍文章已整理PDF版上传至我的CSDN下载资源中,链接....(资源审核不过.....尴尬,要的朋友在博客下面留言好啦,我看到后会发送到你邮箱哒.....2018.7.23) 我把压缩包上传到了百度网盘里,需要的同学自取哦(2019.1.1…

云天励飞上市:年营收5.5亿亏4.4亿 募资39亿市值370亿

雷帝网 雷建平 4月4日 深圳云天励飞技术股份有限公司(简称:“云天励飞”,股票代码为:688343)今日在科创板上市。 云天励飞此次发行价为43.92元,发行8,878.343万股,募资总额为39亿元。 云天励飞原…

WebRTC:P2P音视频通话基础概述

前言 本篇文章参考WebRTC基础知识详解_签约计划_IT酷盖_InfoQ写作社区,介绍了P2P音视频通信的场景下的一些基础知识,包括WebRTC的基本架构、协议栈,一对一通话基础,和一对一通话原理三部分。 WebRTC基本架构 WebRTC 的组件架构分…

美国电话卡避坑

一个美国手机号还是很关键的,虽然网上有很多在线接码,但还是没有自己的方便 避坑 前段时间买了个knowroaming的手机卡,最开始体验确实不错,也直接搞了个gv,但今天突然收到短信说必须卡里要有余额,我一看居然还要25美…

一篇文章扫盲手机SIM卡相关知识

汇总一些SIM卡的相关知识点,点点滴滴,皆是学问。 文章目录 1.SIM卡概念2.SIM卡结构3.SIM卡尺寸4.SIM卡关键数据5.SIM卡入网鉴权6.SIM卡电路7.SIM卡插入检测原理8.SIM卡热插拔9.SIM卡电路layout指导10.SIM卡的掉卡问题参考资料1.SIM卡概念 SIM 是 Subscriber Identity Module…

美国移动网络运营商:是时候关闭3G了

整理 | 祝涛 出品 | CSDN(ID:CSDNnews) 你的手机现在正使用什么样的网络服务呢?是4G还是5G呢?如果美国地区的用户依然停留在3G,他们可能需要在手机服务提供商关闭3G网络之前升级,以避免失去服务…

SIM卡APN选择说明

概述 移动、电信运营商SIM卡开卡时,所需APN及平台的选择说明。 运营商平台解释 电信、移动运营商对物联网设备存在不同的平台管理。电信物联网卡可连接平台有电信OC平台(AEP)、华为OC平台(IOT)。移动物联网卡可连接…

Android eSIM卡识别到后没有APN

esim卡识别到后没有APN,需要手动配置(参考)。 查询到卡IMSI开头为46006. 查询命令:service call iphonesubinfo 7 查询发现安卓系统里面没有内置对应的APN。 每家厂商定制的都不一样 路径也各不相同。 find ./ -name apn*.xml1…

美国电话卡原生卡和虚商卡区别

http://bbs.qyer.com/thread-854854-1.html 最近好多童鞋去美国,作为一个15年的移动通信人,老是被咨询这种那种关于漫游和上网的问题。索性一次性都写下来,供大家参考。同时乐意解答关于境外通讯的问题哦~大家如果觉得有帮助,请“喜欢“一下吧。文章比较长,先简单说一下结…

中国电信 CTExcel - 亲测境外首选电话卡(推荐码:SHQL 或 KJNC)

官网 中国电信美洲公司CTExcel https://www.ctexcel.us/index_pc.jsp?languagezh 微信公众号 - “中国电信美洲公司” 亲测好用 因为公司内部调动,12月要去美国工作。机缘巧合,看到了网友推荐的境外电话卡 - 中国电信CTExcel。 哈哈,是…

最新多种方式, 判断客户端IP是国内还是国外?

1 、前言 如何根据IP判断是国内的IP还是国外的IP呢? 应用场景大多是网站开发时中英文版本的自动判断。 相信大多数人肯定会推荐淘宝的免费API,但是目前已经无法访问,并且也很不稳定。 也会有人推荐跳过IP判断,根据当前系统语言…

九龙证券|AI重塑半导体基础设施,人工智能发展持续加速

近四十年来,摩尔定律一直是推进核算机职业开展的中心驱动力。随着摩尔定律接近极限,在成本和功耗的两层制约下,指数级的功用增加逐步放缓。而AI和加快核算则是在算力需求激增、数据中心功耗暴升背景下延续摩尔定律,完成可继续开展…

人工智能AI主题汇总(至2023年02月11日)

人工智能(AI)是指机器执行人类能够轻松完成的感知、推理、学习和解决问题等认知功能的能力。过去20年以来,由于互联网产生的海量数据的可用性,人工智能在全球范围内获得了关注。最近,OpenAI上线了ChatGPT超级机器人对话…