Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >虚构问题,低质量软件的根源

虚构问题,低质量软件的根源

作者头像
明明如月学长
发布于 2023-07-10 09:12:20
发布于 2023-07-10 09:12:20
2290
举报

原文链接:https://cerebralab.com/Imaginary_Problems_Are_the_Root_of_Bad_Software 网友评论:https://news.ycombinator.com/item?id=36380711 原文作者:George 译者:明明如月学长

任何的工具使用情况、团队沟通的质量、开发者的投入水平以及采取的测试手段等,都可能成为低质量软件的诱因。 我认为,导致低质量软件的根源是:虚构问题。

许多复杂或有缺陷的软件并不是因为它们的设计过于复杂或功能不平衡,而是因为它们试图处理一些超出其最初预定目标的任务。

假如你是一个播客主播,想创建一个专属的网站。你想要在该网站上推广产品,直接获取广告收入,无需经过第三方,而且,你可以提供播客、视频和博客内容给观众。

你的小型网页应用可能包括以下需求: ● 在北美地区能快速加载,提供实时播客播放和下载 ● 在启动后的前 15 分钟内,对 99.99% 的用户保持稳定运行,理想情况下,不会崩溃或假死 ● 能高效地集成 Google Adwords,如果有足够的时间,可以考虑集成其他第三方广告商 ● 可以动态链接到你在 Zazzle 商店中的最新产品,并根据用户的购买历史进行推荐 ● 能集成 Facebook 的直播系统,如果可能的话,最好能设计一个独立于 Facebook 的直播系统

你把这些需求交给了一支外包团队,并进行了讨论。刚开始,似乎所有人都在同一个频道上。然而,当他们两个月后交付了最小可行产品,你感到愤怒。你觉得你花了 15,000 美元做了一堆无用的垃圾,你想要退款。

你第一次打开这个网站屏幕就卡住了。当你询问开发团队如何选择在网站上运行的广告类型时,你被引导到一个丑陋且难以理解的自定义用户界面(UI)。你在 Zazzle 商店的商品链接有一半无法使用,或者缺少图片,而且Facebook直播非常卡顿!

对此,开发团队也表示很困惑,他们认为你的愤怒表示不解,因为他们为此付出了大量的努力。

他们全力投入到了这个应用的开发中,他们甚至创造了一些令人惊叹的功能: ● 设计了一个先进的推荐系统 ● 设计了一个可以实时生成所有流媒体文字转录的算法 ● 设计了能在全球任何地方在200毫秒内加载你网站首页的功能 ● 为了避免你过度依赖 Facebook 直播,设计了一套全新的流媒体协议和客户端 ● 可以让你轻松集成超过 20 个广告平台的服务

你期待的是一个核心功能完备的产品,如果可能,再加入一些额外的功能。但开发团队理解的是一个完全不同的需求。他们听到的是一系列兴奋的挑战……以及一些他们不太关注的基础功能。

更糟的是,你并没有直接与开发团队的成员进行沟通,而是通过一个销售员进行沟通,像玩传话游戏一样,然后销售员与一些中级管理人员开会,然后写出一套业务规则给项目经理,项目经理再撰写一些技术规则给团队负责人或架构师,然后,他开始和他的团队设计产品,在过程中,每个人都在产品上添加了他们自己的理解和特性。

这是一种应对机制

通常,虚构的问题比实际存在的问题更有趣。天才喜欢玩电子竞技游戏,构建并解决数学问题,甚至会通过编写书籍来回答关于人类状况这类抽象问题,而这些通常是免费的。然而,当你找一位普通的程序员开发一个简单的 Android 应用,他就可能收取费用。这不是因为普通程序员比天才更稀有,而是因为前者的工作往往更有趣,而后者的工作可能相对乏味。

大部分的程序员都希望他们的工作能既带来收益,又能给他们带来乐趣。当然,"乐趣"的定义因人而异,但对很多工程师来说,它主要体现在解决那些富有挑战性且有趣的问题上。 如果你给一个智力出众的人分配过多不能自动化的、枯燥无味的任务,你可能会让他感到抓狂。然而,经过数十亿年的演化,人类的大脑已经相当擅长在保持理智思考。就如同那些在童年时期经历困难或者虐待的人会在奇幻小说中寻找现实的解脱,那些从事企业应用开发或者网页开发的人也能通过解决虚构的问题找到他们自我释放的方式。

软件工程师虚构问题的数量,是由他们的创新思维(即他们能想出多少虚构问题)与他们实际工作中存在的复杂问题的数量共同决定的。

值得一提的是,这个问题并不仅仅局限于开发人员。无论是管理层、销售团队、人力资源、技术支持、法务部门,甚至会计部门,他们都有自己特别的方式来创造虚构的问题。他们试图过于干预决策,哪怕他们在会议上的出席只是形式,或者他们甚至并没有被要求参加。他们会过于聚焦于与自身职责相关的琐碎问题,或者聘请远超实际需求的团队规模,只是为了证明自己的重要性。

面对愚蠢的问题,聪明的人总能找到解决的办法。 然而,虚构问题的产生并不只是因为开发人员过于闲散,而且还有可能源于沟通链路过长。

我在开始做自由职业者的时候,因为希望接触更多的工作机会,所以对选择的客户或者他们的要求并不会过于挑剔。常常会遇到一种情况,就是为了讨论一些内部的最小可行产品的细节,需要和客户通过上百封邮件进行交流。我也经历过一周之内需求不断变动的情况。甚至我也曾有客户问我:“这个项目可以进行代币融资(ICO)吗?”或者 “我们能否在这个项目中加入一些 AI 技术?”

诚然,大部分的客户要比这些情况好一些,但他们往往缺乏清晰表达自身需求的能力。这其实并不是问题,因为作为“计算机专业人员”,我的工作就是根据他们的使用场景来帮他们分析他们需要什么,不需要什么。但当你和客户之间存在若干层次的隔阂时,确定需求就变得极其困难。

需求的变动可能源于对目标的误解,或者源于人们试图对上述的枯燥状况作出反应。

大多数公司都喜欢拥让销售人员去推销产品,谈价格,并说明这个价格可以得到哪些功能。也会有一些善于人际交往的人与客户更深入地讨论需求细节,他们其实也算是销售人员,只是他的职位并不是销售。然后,就是内部的传话链,包括各级管理人员,以及技术团队内部的层级结构。

当一份客户需求清单经过如此多人手后,某些事情也无可避免地会在传话过程中丢失。有时,需求的变动源于原始需求没有意义,或者需求需要被重新定义。销售人员可能已经告诉客户,“只需额外支付 39999,我们就可以在区块链上实现这个。” 然而这就让后续接触需求的每个人都在思考,“在区块链上实现这个” 到底是什么意思。

更常见的情况是,需求的变动可能源于人们对意图的误解,或者人们试图对前述的无聊状况作出反应,试图让自己的工作或者他的团队的工作变得更有趣,更吸引眼球。

在这种情况下,最初的需求——真正需要解决的问题——被淹没了。真正需要解决的问题被虚构的问题和空白所取代,你会发现很多人愿意用他们自己的虚构问题来填补这些空白。对他们来说,他们面对的问题实在过于枯燥,而填补这些空白,则成为了一种解决手段。

过度复杂化与自然选择

虚构问题的存在并非毫无缘由,而是深层次的机制在起作用:这些问题可能推动了一个团队或公司的进步,甚至成为其运转的关键部分。

正如 Nassim Nicholas Taleb 所说:“那些被培养、选拔和奖赏出来的人,用以解决复杂问题,往往不会去积极寻找简单的解决方案。”

你有没有听过这样一件事,只有三个网络工程师就从零开始开发出一款无瑕疵的银行软件,运用了功能性设计方法论和内存安全语言,并且成功地使大型银行迁移到他们精心构建的完美基础设施上?

可能没有,因为这样的事并不存在。但实际上,却有一大群开发者,他们可能连“回滚”这样的基本概念都难以理解,却在银行业编写着重要的软件。

存储和传输数字的技术要求并不高。索引整个网络的内容,并在一秒内为自然语言查询提供相关的结果,这才是真正的技术挑战。然而,只有极少数的天才选择去解决这个问题

银行生态系统已经熟练地维护了自身的收入阶层。领导层可能像寄生虫一样侵蚀社会,但这只是这些机构的一种表现。

并不是说大部分在银行工作的普通员工都有恶意。相反,他们大多是友好的普通人,他们为了生活,为了家庭,辛勤工作,努力提供食物、住房和教育。但是,他们的主要动力并不是去改善银行软件,而是保住自己的饭碗。在今天的经济环境中,失业的影响对一些人来说太过沉重。在银行业,过于直言不讳或者过于积极进取,可能会让人陷入纪律审查的困境。

因此,银行系统的保持不变并非是因为它们高效,而是因为惯性在起作用。这种惯性表现为处理虚构问题的形式,以避免解决真正的问题,因为一旦真正的问题被揭露,可能会威胁到他人的饭碗。关注真正的问题反而可能导致被解雇,甚至在一些情况下,比如在高盛,可能会引发一系列的严重后果,甚至导致引起高度关注的自杀事件

Upton Sinclair 曾说过:“当一个人的收入依赖于他对某事的无知,你很难让他理解那件事。”

通常情况下,公司的最高领导层(C-suite)对于高管将 90% 的时间花费在“客户会议”上并不会特别关注,尽管这些“客户会议”可能在度假胜地举行,且包含的“其他费用”可能高达数百万美元。同样地,次一级的高级管理层也会对上层管理人员可能存在的行为不检的情况视而不见。他们也会忽视中层管理人员对《华尔街之狼》式梦想的热衷,即使这可能涉及购买一些奇特的办公设备,或是雇佣过多的秘书和实习生。

当面对基层管理人员对权力过度集中的幻想,中层管理人员往往也会选择忽视。他们更倾向于关注那些喜欢进行“如何改进我们的敏捷方法论” PPT 汇报的人,而不是那些实际上能够削减成本的基层经理。

团队领导似乎没有注意到他们的上司只是偶尔在办公室露面,根本不会正确使用 Excel。而基层经理也忽视了那些团队领导和架构师,他们热衷于谈论“ 如何用JRPC、Hibernate 和 Spring 进行微服务改造”,而忽略了实际上应该优化那些低效的 MySQL 查询。开发人员似乎并没有意识到他们的领导除了画 DOT 图表之外,其实并不真正编写任何代码。而团队领导也并没意识到开发人员频繁地换用新的 JavaScript 框架,频繁地修改 UI,而不是通过 EXPLAIN 来解决数据库查询缓慢的问题。

这是一个恶性循环,各层级都在忙于处理虚构的问题,从 CEO 忙于追逐财富,却忽视处理家庭问题,到 UX 实习生为了重新设计一个“提交按钮” 忙得焦头烂额,他们的密码甚至以明文形式传输(并将其作为认证cookie的一部分)。

然而,每个人都继续解决虚构的问题,因为一旦他们停止创造和解决这些虚构的问题,他们就需要开始面对真正的问题。一旦他们开始解决真正需要解决的问题,他们可能会发现整个系统濒临崩溃。他们可能会发现,尽管公司已经在五年前就将服务器就迁移到亚马逊 Web 服务 (AWS),但是 Debra 仍旧每天守在角落里,盯着内部服务器的运行图表已经长达 10年之久。他们可能会突然意识到,自己的有 99% 的工作只是为维持他人的职位。这是一种难以接受的现实,我敢说,对大多数人来说都是无法接受的。因此,大多数人选择通过处理虚构的问题来避开这些真正的问题,以逃避这个令人难以接受的现实。


本文引起了很多网友对低质量软件原因的大讨论。 有些网友认为,软件行业的激励系统才是问题的根源。软件行业的激励机制过于侧重于传统的标准和量化指标,而忽视了对于解决真正问题的思考和创新。例如,设计师得到晋升的标准可能是创新和巧妙的设计,而不是坚持传统设计。工程师的晋升机会可能与他们重写代码、提出更多解决方案(甚至多于存在的问题)有关,而不是保持代码库不过度增长。产品经理可能被奖励的是他们提出的新功能,而不是使产品更稳定和易用。这种情况下,努力和付出的方向可能受到了偏差,因为激励机制更关注表面上的成果和创新,而忽视了解决实际问题和提高软件质量的重要性。这可能导致软件行业过度追求数量而不是质量,以及过度追求新功能而忽视稳定性和用户体验。软件行业需要对激励系统进行深思熟虑,更加关注努力和付出的方向,确保努力和创新的目标是朝着解决实际问题和提升软件质量的方向发展。

也有网友认为,公司冗员是降低软件质量的原因之一。他认为公司雇佣的人太多了,经理们为了晋升自己需要更多的下属,而他们希望管理更多的经理来继续晋升。结果是我们组建了庞大的团队来开发原本只需要少数工程师就能完成的产品。这种情况下,我们在庞大的团队中,将工作分割得非常细致,甚至为了创造新的领域而发明,结果却经常破坏了产品。此外,人员过多也导致工作变慢,协调的成本很高,并且当产品被分割成小部分并不断发展时,我们会失去整体上下文的理解。

还有网友认为,“面向KPI编程”是导致软件质量下降的重要原因。这意味着人们更关注实现特定的关键绩效指标(KPI),而不是关注如何提高公司的盈利能力。这种现象在一些大型科技公司中尤为明显。员工可能更关注如何实现自己的晋升目标,而不是将公司的利益置于首位。这种“晋升至上”的价值观可能导致员工更关注对个人有利的行为,而忽视了为公司创造真正价值的努力。然而,这种偏重于个人晋升的倾向可能会对软件质量产生负面影响。因为员工可能更倾向于追求短期的成果,而忽视了长期稳定性、可维护性和用户体验等对软件质量至关重要的方面。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
软件项目管理案例分析
高水平项目管理是软件项目成功的关键,也是软件产品质量的根本保证,具有这方面理论和实践的人员是目前软件组织中急需的高层次人才。为建立符合中国国情的软件开发过程和组织体系,培训中心特举办“软件项目管理案例分析”培训班,具体事宜通知如下:
全栈程序员站长
2022/08/31
9930
干了5年程序员,该如何转行?5个新工作方向了解一下
写了5年代码,年龄已近30,头发尚存几缕,除了写代码其他并无所长,职业未来在何方?
大数据文摘
2019/10/29
1.4K0
干了5年程序员,该如何转行?5个新工作方向了解一下
ISTQB高级国际认证试题及答案(一)
您是旅游信息手机应用项目的测试经理。近期该项目切换到敏捷流程和测试驱动开发(TDD)。每个开发周期持续15天,在第7天之后开始每日构建。第10天以后,不会再有新的功能加入。开发团队由经验丰富的团队成员组成,他们以自己的工作为荣,但对测试团队不太友好。以粗略的用户故事形式编写需求,如下面所示:
王大力测试进阶之路
2021/07/28
2.2K0
从程序员到技术总监,分享10年开发经验
在中国有很多人都认为IT行为是吃青春饭的,如果过了30岁就很难有机会再发展下去!其实现实并不是这样子的,,在这里在下想凭借自己的亲身经历,与大家一起探讨一下。
java架构师
2018/08/23
5460
高效软件生产的8条规则
由于一个巡展项目一直拖了近一个月才完成这篇文章,原本收到的是两篇文章,无奈一是最近没时间一下完成两篇文章,另一个原因就是略微看了下应该是通过Xamarin使用c++开发安卓/ios的文章,由于目前专注的主要是java以及web方向,所以也就没多少心情去翻译了,有兴趣的自己去看吧:
WindCoder
2018/09/20
5060
高效软件生产的8条规则
软件开发“食物链”:运维竟高于开发,最顶端该是用户还是管理层?
近日,十多年从事开发工作的 Facundo Olano 写了一篇关于“软件开发应该优先服务谁”的文章,引发了广发开发者讨论。Facundo 在文章中提出,业务和用户的优先级永远大于维护者,维护者大于开发者,但对于业务和用户的优先级,则无法确定。 对此,有开发者提出,开发人员其实必须满足的是中层管理人员的需求,而不是实际用户的需求,否则就拿不到订单。那么,在这个研发生态里,开发者明显处于底层,那谁才处于“食物链的顶端”?
深度学习与Python
2023/12/04
1450
软件开发“食物链”:运维竟高于开发,最顶端该是用户还是管理层?
弱的软件开发人员都跑到哪里工作了?
首先声明一下,以下内容主要翻译自托米斯拉夫·图拉利亚,主要是他的观点。我作为一名弱的软件开发人员,可没有资格成为一群强的软件开发人员的上司,更没有压榨他们。
LIYI
2022/11/18
2110
靠谱CTO必须是技术高手?前Facebook总监:技术越好,Bug 越少
作者 | 核子可乐,Tina 技术管理者也需要全能。 作为科技界广受赞誉的杰出管理人才,前百度集团总裁、Y Combinator 中国创始人陆奇在接受媒体采访时,曾谈到管理具备穿透力的关键在于自己要有相应的专业能力,“我以前要求自己做到的是,我手下两层以下的人,他们每个人的工作我都能做。这样整个公司里,没有人敢欺骗你、忽悠你。这个非常重要,大部分企业中层都在忽悠高层,资源其实是浪费掉的。” 在陆奇的逻辑里,管理人员至少要能随时接管比自己低二个级别的人手上的工作,这就要求管理人员必须是专家中的专家,清楚
深度学习与Python
2023/03/29
3490
靠谱CTO必须是技术高手?前Facebook总监:技术越好,Bug 越少
如何引发一场消费级用户体验大变革
作者 | Marcelo Wiermann 译者 | 平川 策划 | 丁晓昀 发展的 2022 年,现代企业应用如果想一直蓬勃发展下去就需要关心终端用户的感受。现在,许多企业级应用程序公司都在使用曾经为消费者保留的 UX(消费级用户体验)概念,这是有原因的。实现这一概念的公司,在终端用户采用率、终端用户支持、工作流效率、市场份额和收入方面,一直优于那些乏味的竞争对手。 为什么 在很早的时候(即 2000 年代早期),人们并不认为企业应用 UX 是重要的销售驱动力。经理们查看功能表,比较不同服务
深度学习与Python
2023/03/29
2260
如何引发一场消费级用户体验大变革
开发人员解决不了管理烂的问题
来源 / infoQ 作者 / Gandalf Hudlow · 译者 / 平川 · 策划 / Tina
ToB行业头条
2021/05/07
3780
设计的商业价值
我们都知道产品和服务设计不好的例子,例如 USB插头(在第三次尝试时总是很幸运)。在许多机场匆忙进行联系飞行的经历就像星球大战中死星上的排气口。
半吊子全栈工匠
2018/12/12
8010
设计的商业价值
职场大神带你揭秘功能测试的内幕
应用程序或网站的功能测试是SDLC(软件开发生命周期)的最重要阶段之一。开发人员、测试人员、项目经理、运营人员,甚至管理人员都需要多多少少参与到整个项目的功能测试。测试工作由测试部门分配,测试部门提供服务的稳定性至关重要。在建立多部分协作的工作文化的过程中,作为测试人员应当首先意识到,不仅可以对产品进行功能测试,还可以为公司的产品做出更多贡献。
顾翔
2020/11/03
5190
职场大神带你揭秘功能测试的内幕
【金融数据】挖掘数据价值,打造智能银行
今天移动互联网正狂飙突进、网上购物平台和网上社交平台也方兴未艾,包括结构化数据、半结构化数据、非结构化数据的大数据爆炸式增长。早在2012年,大数据已经登上美国《纽约时报》的专栏封面,专栏称:“大数据时代已经降临,在商业、经济及其他领域中,决策将日益基于数据和分析,而非基于经验和直觉。”目前银行业在开展业务过程中积累了海量高价值数据,很多银行的数据量级已经超过100TB,其中非结构化正以加速度形式积累。因此,不管传统银行业是拥抱还是抗拒,大数据时代已经呼啸而来。 深刻理解大数据的特征 转变观念,重视大数据的
陆勤_数据人网
2018/02/27
1.3K0
软件工程的兴衰轮回:2 年巨变,裁员风暴下小团队逆袭,老技术反迎第二春?
过去 18 个月来,整个科技行业迎来一系列重大变化:从招聘火热到大规模裁员,从密集上市到个位数 IPO,就业市场、风险投资、IPO 和大型科技公司都受到变革之风的严重影响。
深度学习与Python
2024/07/24
1880
软件工程的兴衰轮回:2 年巨变,裁员风暴下小团队逆袭,老技术反迎第二春?
测试无定法,测试必有法:软件测试策略运用之道
软件测试实施中,综合运用测试策略,就是根据项目的实际情况协调好手上有限的测试资源和要素,从项目整体上分析测试难点、破解测试痛点、控制测试风险,在恰当的测试阶段运用恰当的测试方法和技术,面向目标,提纲挈领,让测试任务相关的人、事、物等要素发挥协同效应,力争在有效时间内产生最佳的测试效率和测试交付。
新梦想IT职业教育
2019/09/09
1.1K0
别怪程序员——都是项目经理的错
别怪程序员——都是项目经理的错 现在有很多糟糕的软件。不可靠,不稳定,不安全,不可用。这些软件是如此糟糕,以致于有些人要求监管软件开发和限制专业软件开发人员为“软件工程师”,以便于软件工程师能够保持专业水准,避免因为疏忽或玩忽职守而被指责。 认可方式可以确保每个开发软件的人具备一定的知识和能力。但是,专业开发人员也不能保证良好的软件。即使是训练有素、经验丰富并全力以赴的开发人员,他们创建的软件,也不能保证都是良好的软件。这是因为大多数影响软件质量的决定,不是由开发人员下的——而是由企业中的其他人决定的。(比
用户1289394
2018/02/27
8040
别怪程序员——都是项目经理的错
程序员职业发展的要命Bug
本文作者Sam Lightston MakingItBigCareers.com 创办者,同时也是IBM软件集团的项目总监和高级技术人员,他在这个全球最大的软件工程团队中负责产品战略和研发。Sam有着丰富的管理经验,既管理过小而美的研究团队,也管理过超过200多名国际员工的大型项目。 “人如其行,如果你做的是无聊、愚蠢、乏味的工作,最终可能也会成为一个无聊、愚蠢、乏味的人。” ——Bob Black 我们在工作中都会犯错,有些错误的破坏力惊人而猛烈,一夜之间就能爆发,造成严重后果,摧毁你整个职业生涯,但其
用户1682855
2018/06/08
3970
30KiOS程序员的简述:如何成为高级开发人员
本篇文章适用于所有在这个行业已经有了几年时间后想要在职业生涯中取得突破的开发人员,编程人员和程序员(或者你可能刚刚开始,但希望你能看到你的路径)。本文适合那些有着简单愿望的人:你想成为一名高级开发人员,并希望在你的领域中脱颖而出。在阅读完这篇文章后,您将获得一组具有最佳资源列表的路径,供您升级并成为高级开发人员。
原来是泽镜啊
2018/07/16
6410
开发高质量的软件要付出什么样的代价?
在软件开发项目中,常见的争论之一是花费时间来提高软件质量,还是集中精力发布更有价值的功能。通常来说,交付功能的压力占据了主导地位,许多开发人员因此抱怨他们没有时间在架构和代码质量方面进行研究与处理。
Java帮帮
2019/07/07
8750
吐槽贴:没有工程背景的项目经理不如没有项目经理
大数据文摘作品 编译:Yanruo、傅一洋 在我不算长的开发职业生涯中,曾不止一次地遇到过让我怀疑人生的项目经理。 并不是说这些项目经理能力或者人品不行。而是由于他们过度的微管理,又将开发者的工作想的太简单,常常搞得项目脱离正轨。 比如,一些经理总是爱把“不就是”三个字挂在嘴边。不就是JSON”、“不就是UI”、“不就是前后端交互”…… 用“不就是”来形容任何一件事都只能显示出无知,和对团队的沟通的不重视,对问题的漠不关心。 如果都像他所说的一样,细化算法 “不就是性能调优”,异步线程管理 “不就是线程间转
大数据文摘
2018/05/23
7270
推荐阅读
相关推荐
软件项目管理案例分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档