软件是否越来越差?

2024-04-26   出处: stackoverflow  作/译者:lsaac Lyman/Ares

随着软件研发技术的发展,软件系统产品应该会越来越好。

我最近偶然发现了Nikita Prokopov的一篇帖子“软件觉醒”,它让人想起了Maciej Cegłowski的帖子“网站臃肿危机”和其他几篇类似的文章。在撰写有关软件研发文章的人中,越来越多的人都认为,在硬件的不断更新下,我们本可以编写比以往更快、更小、更健壮的应用程序,但相反我们的应用程序正在变得更大、更慢、更坏。DOOM于1996年问世,可以在一百多种各类型的设备上运行;与此同时,2022年的聊天应用程序在后台运行时却使用了5千兆(或更多)的RAM,有时甚至在高端硬件上也会完全卡死。

上述关于这一主题的帖子给人的印象是大约有80%的公平合理的批评,有20%是脱离实际的抱怨。

大多数开发人员都经常听到:“这是一个智能手机操作系统,它能有多难?”或“我的电子表格应用程序在90年代是10千字节,为什么Factorio却是整整千兆字节?”。如果你没有实际参与系统应用构建过程,你就无法可靠地估计它所带来的所有困难和复杂性。

但这并不意味着这样的系统应用是合理的。应用程序的确比过去慢了,而且呈指数级增长,价值却没有相应的增长。至少,几乎任何现代应用程序都有再优化的空间。我们可以使它们运行更快,甚至可能是快几个数量级。

我们为什么不去尝试呢?

Prokopov的回答是“软件工程师不会为他们的工作感到骄傲。”这是有一定道理的。但我坚信,努力工作并做出优秀的东西是人类的自然天性,只有当某些事情一再阻止我们时,我们才会失败。因此,我们不应该以消极的态度来解释缓慢和有缺陷的软件,而应该问问“为了让一个软件工程师更好地做好他们的工作,我们需要什么力量和激励因素才能为他们创造出更好的工作环境?”

我有几个答案。

速度仅仅是一个质量特征,而可靠性更不算什么

工程师将软件设想为交互组件、输入和输出的网络。这个模型既准确又有用。然而,这不是软件的包装、营销或销售方式。对于商业人士和客户来说,软件就是一系列功能点。

以库存管理应用程序为例。其营销材料将包括几张高清库存照片、一个大的调色板和以下声明:

  • 跟踪多个仓库的库存
  • 与运输系统、供应链系统和销售系统集成
  • 多个级别的每周报告和每月报告
  • 精细的权限访问和安全控制
  • 所有终端的即时更新
  • 在Windows、MacOS和Linux上运行

这些都是无用的陈述,软件要么做这些事情,要么不做。它们都可以在一个小时的产品演示中得到验证。然而事实上,该软件可能非常的慢,点击一个按钮需要几秒钟才能响应,这会让“即时更新”的说法成为谎言。

我们都认同,速度会影响用户对应用程序的整体体验。这是产品质量的重要标志之一。但很难用这一点去销售。如果你把时间花在优化核心流程上,而你的竞争对手正在开发一种新类型的产品,那么你将失去接下来十次销售中的八次。如果你就下一步应该做什么对现有客户进行民意调查,他们大都会要求功能,而不是速度——除非软件太慢,几乎无法使用。因此,任何热血的董事会都不会允许该公司从产品路线图上绕行六个月来处理技术债务,相反构建功能、功能、功能的压力却总是压在我们身上。

看来程序员想要编写更快速的应用程序,但市场似乎并不在乎。

你可能会注意到可靠性根本不在列表上。你会怎么说?“没有可靠性Bug吗?”根本没有办法确保这一点,更不用说在产品演示中证明了。“90%的单元测试覆盖率和全套集成测试?”没有人知道这意味着什么,如果你向客户解释这个,他们会感到非常无聊毫无帮助。事实上,没有办法以客户既相信又关心的方式来表达可靠性。敏捷时代教会了他们错误将不可避免地存在,你将不断地修复这些Bug。由于没有全面的方法来衡量软件中的缺陷(当然,如果我们知道它们,我们就会已经修复了吗?),这不是一个可以在产品之间进行比较的质量特征。我们可以投入时间进行测试、重构和改进,但完全有可能最终没有人会注意到可靠性的问题。

程序员希望编写无Bug的应用程序,同样市场也并不在乎。

磁盘使用情况也不在列表中,尽管偶尔会在“下载”按钮下方以低对比度的小字体显示,这一点可能与客户心目中的竞争力或质量联系最为紧密。你上一次在磁盘空间用完时责怪开发人员(而不是你自己或你的电脑)是什么时候?还是根据下载量在两款视频游戏之间进行选择?可能永远不会。你可以发现有人抱怨最新的《使命召唤》的规模,但续集在上映一周仍能赚10亿美元。

缩减可执行文件或输出包是一项吃力不讨好的工作。而且这通常是一项技术性很强的工作,不仅需要了解正在构建的应用程序,还需要了解它所依赖的数百个较低级别的库。此外,它被积极劝阻(“不要重新发明轮子”),还有部分原因是它可能是一个雷区。你可能不知道某一行代码是用来做什么的,但这并不意味着它是无用的。对于0.01%在智能手机上使用Ubuntu的客户来说,也许这就是正常的应用程序和坏的应用程序之间的区别。也许会这是防止应用程序每四年在闰日崩溃一次的原因之一。即使是最小的效用函数最终也会发展成非显而易见的无可挽回的局面,这根本不值去冒这个风险。

一些程序员想要编写更小的应用程序,但这些好处对市场或我们来说都是可以忽略的。

消费类软件常常被低估价值

分发应用程序并不难,这或多或少就是互联网的用途。但销售应用程序就像拔牙一样难受。同样是那些愿意花15美元买一个三明治或一张电影票的普通公众,如果他们不喜欢,就会耸耸肩走开,他们不愿意为感兴趣的应用程序花费1美元。只有两种人群愿意为好的软件付费:商业公司和视频游戏玩家。不知何故,我们误入了一个人人都希望软件免费的世界。

这种期望对消费类应用程序的质量造成了毁灭性的影响。构建一个应用程序的成本从5万到50万美元不等,如果你不能让人们进行付款,你必须通过其他方式收回成本。以下是网络和原生应用程序膨胀和缓慢的最大原因:用户行为跟踪、广告、营销渠道、联盟销售、订阅付费逻辑、针对上述所有内容的反措施,以及一百个效果较差的收入来源等等。这些问题通常被归因于研发者的贪婪,但更多的时候却是研发者绝望的结果。互联网上只有一些最受欢迎的网站勉强维持生计。

这样一个系统的浪费和低效怎么强调都不为过。研发者以自认为合理的价格发布了一款独特、高质量的应用程序。日复一日,它的下载量为零。怎么办?只能在免费试用/订阅模式上重新构建优化它。它有几百次下载,但只有少数用户转换为付费用户,远远不足以支付你的成本。你继续在免费版本中投放广告,尽管这会伤透你的UI设计师的心。你会发现,广告浏览量的回报只有几分之一。你投放了更多的广告,用户会抱怨广告太多,令人困惑的是,他们仍在免费使用该应用程序。你把一些广告换成了应用内购买,用户也开始抱怨这些。你添加了行动呼吁模式,鼓励用户为无广告体验付费。你会发现他们中的大多数人会很快就删除该应用程序。你可以添加用户行为分析功能,以便了解如何提高留存率,你会发现“保持”和“上瘾”可能是同义词。这个循环还在继续,直到不久以后你再也不想维护这个应用程序了。就好像你有一台毫无乐趣的收入机器,它可以随时抓住用户的注意力,但你仍然赚不到多少钱。

如果人们愿意为应用程序付费,我们可以避免这一切。但事实并非如此。久而久之,应用程序就变成了是巨大、缓慢和破碎的。

开发人员没有意识到他们所拥有的力量

为了避免人们说我指责责怪除了我自己以外的其他所有人,让我们来看看软件开发人员的角色。

即使在经济衰退大环境中,软件开发商也拥有非凡的杠杆率。我们可以坚持使用(或不使用)某些特定技术,我们可以坚持高薪、福利和公平,我们可以通过哪怕是最细微的团结来改变整个公司的文化和工作环境。

这是就是我们的力量,我们可以用它做得更多。

我们应该在每次冲刺中留出时间来解决一定比例的技术债务。当有一个特别有希望的机会来优化和改进我们的代码时,我们应该时不时地推迟功能研发工作。我们应该试着说服我们的领导,我们应该创造一种期望,即我们不会总是在制定产品路线图,同时,我们的代码和行业对我们的期望越来越高,要求也越来越高。

大多数时候不会有任何负面后果,因为我们并没有要求太多。其他所有行业都有超越任何一种工作描述的专业标准和要求。为什么我们软件开发经常表现得没有呢?

唯一需要注意的是,这些措施有可能对我们不利,这是一场艰苦的战斗。有些经理会对我们把时间花在他们不理解的事情上感到很不舒服,有些销售人员会担心我们的软件没有竞争力,投资者可能会威胁将我们的工作外包给更灵活的开发团队。客户态度和市场力量的转变还需要一段时间。但是,如果改变现代软件的状态是一个有价值的目标,那么这也是值得的。

将来的情况会有所好转吗?

其实很难对软件的未来感到乐观。90年代,程序员们只能构建小型、高度优化的应用程序,因为别无选择。他们的客户拥有32兆的RAM和200兆赫的单核处理器。如果一个应用程序没有尽可能精简,它就根本无法运行。如今,一款已有两年历史的基本型号Macbook Air的内存是原来的250倍(更不用说更快的内存了),四核处理器的速度是原来的几倍。我们发布的应用程序有90%都是臃肿的,直到有人抱怨,我们才会优化。我们打包了一个完整的网络浏览器安装程序,其中包含用于发送消息、做笔记甚至编写自己的代码的应用程序(我现在正在使用一个)。

过去二十年一直致力于使软件开发更快、更容易、更万无一失。诚然,我们比以往任何时候都更快地创建应用程序,拥有比以往更多的功能,使用大量经验欠缺成本低廉的开发人员,这从商业角度不难看出其吸引力。然而,我们正在为此付出代价——我们的客户、电网和地球都是如此。

事情不会在一夜之间改变,甚至可能在未来五年内也不会。但我们仍有理由抱有希望。

最新一波的Web编程语言和技术(如WebAssembly、ESBuild、SWC、Bun和Yew)在编译时和运行时都实现了新的速度和可靠性。Rust以提供C语言的性能和高级语言对开发人员的友好性而闻名,在Web服务器上越来越受欢迎。Tauri等轻量级Electron替代品将成为网络开发人员的跨平台框架选择。

就市场而言,一些流行的视频游戏(如《死亡细胞》和《艾萨克的捆绑》)已经以付费下载的形式进入了移动平台。虽然还有很多工作要做,但这是在对智能手机用户——世界上最大的技术消费者群体——进行软件成本再教育方面取得的积极进展。

如果说过去的20年是为了提高我们的生产力——在这个过程中牺牲效率和财务可持续性——那么接下来的20年可能是为了解决我们的集体技术债务,循环效率,改善经济交流,并且进一步提升软件在我们生活中无处不在的生产力。


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
129° /1294 人阅读/0 条评论 发表评论

登录 后发表评论