您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

软件开发“自我毁灭”的七宗罪

时间:2023-10-18 12:39:42  来源:51CTO  作者:

作者丨Peter Wayner

译者 | 晶颜

审校 | 重楼

软件开发是一门具有挑战性的学科,它建立在数以百万计的参数、变量、库以及更多必须绝对正确的因素之上。即便是一个字符不合适,整个堆栈也会随之瓦解。

多年来,软件开发团队已经想出了一些完成工作的规则。从复杂的方法论到新兴的学科和哲学,软件开发的规则手册使每个人都能够协作,并以有效的方式到达终点。然而,即便如此,仍然存在失败模式:有时是这些方法被误用了,或是好的想法过于偏向理论化;有时开发者只是忘记了他们应该做什么,或是故意为之。

软件开发中的这些错误几乎可以破坏任何项目。因此,如果想要确保您的团队能够构建伟大的项目,那么是时候停下来考虑一下以下错误行为了。

1、选择错误的方法   

所有的软件开发方法都有狂热的拥趸,他们热衷于那些定义自己最喜欢的团队组织方式的规则。但问题往往是如何为您的团队选择合适的工具。

一个很大的错误是从高层强加这些规则。如果程序员是另一种方法的忠实信徒,那么当他们被迫使用另一种方法时,他们通常会抱怨和发牢骚。另一个错误是让程序员自由地选择他们最喜欢的方法,然而这可能并不是对整个团队最好的方法。

选择正确的方法并不能解决所有的问题,但是它可以减少组织工作流程时产生的摩擦。团队将了解他们的角色,以及他们将如何在其中编写代码。

2、忽略可扩展性   

一些软件开发问题可以稍后修复,但这绝不包括构建一个能够有效扩展以处理数百万或数十亿个事件的应用程序。当应用程序最终全面运行时,创建没有瓶颈的有效代码需要足够的深谋远虑和高层领导的支持。这不是以后用一些有针对性的编码和虚拟管道就能解决的问题。

算法和数据结构需要从一开始就进行规划。这意味着架构师和管理层需要仔细考虑将为每个用户存储和处理的数据。当100万或10亿用户出现时,信息洪流会淹没哪一层?我们该如何提前为这些时刻做好计划呢?

有时候,这种架构上的深谋远虑意味着扼杀一些伟大的想法。有时,管理层需要权衡大规模交付功能的收益和成本。有些数据分析在大范围内并不适用。一些公式随着用户的增加呈指数级增长。计算使硬件不堪重负,并阻塞了通信。

开发者并不总是想要考虑大局。他们很容易就会一头扎进去开始创作。但是聪明的开发团队和管理者会花时间预测这些问题,因为如果他们不这样做,就会面临失败的结局。

3、沉迷最新趋势   

众所周知,软件开发人员很容易被新奇的想法所吸引。也许它是一种提供更复杂查询的新型数据库;也许它是一种新的编程语言,可以修复旧语言造成的所有错误。

有时候这些想法是有价值的。然而,很多时候,由于每个人都试图学习新技术,最终会减慢开发速度。有时候,新想法中会存在隐藏的缺陷,只有在项目必须交付之前,每个人都投入到工作中之后,这些缺陷才会显现出来。

谨慎往往是采用新技术的最佳准则。这也是一些规模最大、历史最悠久的公司仍在继续运行由COBOL编写的软件的原因所在。趋势变化无常,但运行代码中的工作逻辑不会过时。

4、保留过多的数据   

程序员是天生的囤积狂,他们喜欢储存信息以备不时之需,而此举可能会导致安全漏洞或侵犯用户隐私。

对于出生日期或其他详细个人信息,问题可能更大。一些领域(如财务记录或健康记录)受到严格监管,更容易违反规定。

好的软件架构需要提前计划,以尽量减少存储的数据量。它可以保护每个人,并节省存储费用,甚至可以通过减少移动数据量来加快系统速度。

5、外包错误的工作   

关于究竟是自行构建还是购买软件的争论由来已久,目前尚无明确定论。然而,软件开发人员的选择往往很糟糕。也许有一个价格合理的完美解决方案,但他们却不舍得把自己的定制堆栈与内部团队闲置一边。相反的情况也会发生。一些管理者购买了外部供应商的产品线,结果却眼睁睁地看着供应商在锁定完成后大幅提高价格。

不幸的是,对于软件开发团队及其管理者来说,决定使用哪种外部工具是一个持续的挑战。利用合适的外部资源是天才之举,但选择了错误的供应商则是通往高价监狱的门票。

6、忽略测试   

高效的软件开发人员及其管理者都知道,测试是一个持续的挑战,就像编写递归代码或设计优雅的数据结构一样,是工作的一部分。测试过程应该从一开始就包含在内,因为单元测试和集成测试对于确保代码在整个开发过程中保持可行性至关重要。

测试对于处理大规模负载也很重要。当我们是唯一的用户时,编写在桌面上运行顺畅的代码十分容易。如果应用程序拥有数百、数千甚至数十万用户,则需要确保代码是高效的,且部署能够处理大规模负载。

许多团队会引入质量保证测试人员,以发现并纠正程序员所犯的错误。比如说,他们知道如何将一个参数设置为0,只是为了看看它是否会导致除0错误(divide-by-zero error)。当用例变得如此复杂,以至于任何一个人都很难想到所有的变化并编写干净的代码来预测它们时,这种对测试的持续关注是必不可少的。

7、低估了计划的力量   

大多数代码在构建前期都需要进行一定的计划。但大多数程序员通常只是想直接进入并开始编写代码。

资深程序员的经验告诉我们,最好的步骤是停下来,计划,测试计划,然后再完善计划。写计划可能看起来很乏味,但当你进行抽象思考时,尝试新想法的速度可能会快10倍。

计划还意味着包括来自其他团队和涉众的输入。他们将是将来使用代码的人,因此花时间讨论项目并了解他们的需求,将在之后避免大量的挫折。这是避免上述列出的许多错误的最好方法。

参考链接:https://www.cio.com/article/654284/7-sins-of-software-development.html



Tags:软件开发   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03  Search: 软件开发  点击:(5)  评论:(0)  加入收藏
生成式AI将在十个方面改变软件开发
上个世纪90年代,当人们提起软件编程时,通常意味着选择一个编辑器,将代码检入CVS或SVN代码库,然后将代码编译成可执行文件。与之对应的Eclipse和Visual Studio等集成开发环境(IDE)...【详细内容】
2024-03-11  Search: 软件开发  点击:(12)  评论:(0)  加入收藏
未来世界的12个软件开发预测
译者 | 李睿审校 | 重楼预测软件开发的未来趋势通常是一件困难的事情。因为人们总是期望软件开发领域中的新兴趋势和频繁的变化能够满足市场不断增长的期望。这样的趋势也将...【详细内容】
2024-01-15  Search: 软件开发  点击:(68)  评论:(0)  加入收藏
软件开发中的破窗理论
破窗理论,作为一种社会学的理论,认为如果一个地方出现了一些小的破坏或不良现象,而没有及时得到修复或制止,就会导致更多的破坏或不良现象的发生,从而形成一种恶性循环。然而,这个...【详细内容】
2023-11-30  Search: 软件开发  点击:(134)  评论:(0)  加入收藏
使用 CodeWhisperer 作为 AI 编码助手,重新构想软件开发
在 Amazon CodeWhisperer 正式发布后,许多客户都已经使用它来简化和精简其软件开发方式。CodeWhisperer 使用由根基模型提供支持的生成式人工智能来理解代码的语义和上下文,并...【详细内容】
2023-11-30  Search: 软件开发  点击:(118)  评论:(0)  加入收藏
软件开发“自我毁灭”的七宗罪
作者丨Peter Wayner译者 | 晶颜审校 | 重楼软件开发是一门具有挑战性的学科,它建立在数以百万计的参数、变量、库以及更多必须绝对正确的因素之上。即便是一个字符不合适,整个...【详细内容】
2023-10-18  Search: 软件开发  点击:(261)  评论:(0)  加入收藏
软件开发者值得尝试的代码调试技巧
译者 | 刘汪洋审校 | 重楼调试是软件开发过程中的关键环节,既具有挑战性,也充满了成就感。 我们常常会遇到一些难以理解的 Bug,解决它们不仅富有挑战也为工作增添了些许趣味。...【详细内容】
2023-10-16  Search: 软件开发  点击:(248)  评论:(0)  加入收藏
10个大数据软件开发的数据队列框架
在软件开发中,数据队列框架用于实现消息传递、异步通信和事件驱动的系统。以下是一些常见的数据队列框架和消息中间件,希望对大家有所帮助。1.Apache Kafka:Kafka是一个高吞吐...【详细内容】
2023-10-08  Search: 软件开发  点击:(371)  评论:(0)  加入收藏
人工智能与软件开发的未来
人工智能正在从各个方面改变软件开发。尽管许多公司竞相推出人工智能功能,但人工智能的潜力已超出了功能层面,成为大多数SaaS解决方案的基础。当机器学习和人工智能模型应用在...【详细内容】
2023-08-24  Search: 软件开发  点击:(253)  评论:(0)  加入收藏
风头不减的低代码会取代传统软件开发模式吗?
近年来,随着数字经济蓬勃发展,越来越多的企业踏上了数字化转型的征程,能够快速构建、交付、维护和升级应用程序成为实现业务数字化的关键。面对不断飙升的应用开发需求,低代码开...【详细内容】
2023-08-23  Search: 软件开发  点击:(273)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条