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

news2024/11/16 22:35:27

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

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

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

目录

1、选择错误的方法   

2、忽略可扩展性   

3、沉迷最新趋势   

4、保留过多的数据   

5、外包错误的工作   

6、忽略测试   

7、低估了计划的力量   

1、选择错误的方法   

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

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

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

2、忽略可扩展性   

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

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

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

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

3、沉迷最新趋势   

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

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

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

4、保留过多的数据   

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

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

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

5、外包错误的工作   

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

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

6、忽略测试   

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

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

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

7、低估了计划的力量   

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

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

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

开发界的强者

JNPF软件开发工具,很多人都用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

原理是将开发过程中某些重复出现的场景、流程,具象化成一个个组件、api、数据库接口,避免了重复造轮子。因而极大的提高了程序员的生产效率。

官网:http://www.jnpfsoft.com/?csdn,如果你有闲暇时间,可以做个知识拓展。

这是一个基于Java Boot/.Net Core构建的简单、跨平台快速开发框架。前后端封装了上千个常用类,方便扩展;集成了代码生成器,支持前后端业务代码生成,满足快速开发,提升工作效率;框架集成了表单、报表、图表、大屏等各种常用的Demo方便直接使用;后端框架支持Vue2、Vue3。

为了支撑更高技术要求的应用开发,从数据库建模、Web API构建到页面设计,与传统软件开发几乎没有差异,只是通过低代码可视化模式,减少了构建“增删改查”功能的重复劳动。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux文件系统 struct inode 结构体解析

文章目录 前言一、inode 简介二、dentry 简介三、struct inode3.1 字段说明3.2 inode链表3.3 struct inode_operations3.4 inode相关函数 参考资料 前言 这篇文章介绍了VFS - struct file:Linux文件系统 struct file 结构体解析 接下来介绍VFS - struct inode&…

回首往昔,初学编程那会写过的两段愚蠢代码

一、关于判断两个整数是否能整除的GW BASIC创意代码 记得上大学时第一个编程语言是BASIC,当时Visual Basic还没出世,QBASIC虽然已经在1991年随MS-DOS5.0推出了,但我们使用的还是 GW-BASIC, 使用的教材是谭浩强、田淑清编著的《BA…

Linux虚拟机静态IP设置

1.环境配置 首先要准备好两台centos虚拟机,在高级篇部分可能有数据库主从复制,所以暂时先开两台虚拟机。 两台虚拟机需要更改: mac地址主机名ip地址UUID 1.更改主机名 更改虚拟机的主机名 vim /etc/hostname2.更改静态ip地址 /etc/sysc…

basic_sr介绍

文章目录 pytorch基础知识和basicSR中用到的语法1.Sampler类与4种采样方式2.python dict的get方法使用3.prefetch_dataloader.py4. pytorch 并行和分布式训练4.1 选择要使用的cuda4.2 DataParallel使用方法常规使用方法保存和载入 4.3 DistributedDataParallel 5.wangdb 入门5.…

5秒用Java写一个快速排序算法?这个我在行

快速排序是一种非常高效的排序算法,由英国计算机科学家霍尔在1960年提出。它的基本思想是选择一个基准元素将待排序数组分成两部分,其中一部分的所有元素都比基准元素小,另一部分的所有元素都比基准元素大,然后对这两部分再分别进…

雷军在微博发文:小米澎湃 OS(Xiaomi HyperOS)正式版已完成封包

本心、输入输出、结果 文章目录 雷军在微博发文:小米澎湃 OS(Xiaomi HyperOS)正式版已完成封包前言搭载 小米澎湃 OS(Xiaomi HyperOS)的小米 14回顾 MIUI小米澎湃 OS(Xiaomi HyperOS) 相关跳转小…

spring boot MongoDB实战

项目搭建 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

中文编程语言开发工具开发的软件案例:定制开发扫码识别位置程序适用于车间物品摆放管理

中文编程语言开发工具开发的软件案例&#xff1a;定制开发扫码识别位置程序适用于车间物品摆放管理 中文编程语言开发工具开发的软件案例&#xff1a;定制开发扫码识别位置程序适用于车间物品摆放管理&#xff0c; 中文编程系统化教程&#xff0c;不需英语基础。学习链接 htt…

string类模拟实现(c++)(学习笔记)

string 1.构造函数1.1 不带参构造1.2 带参数的构造函数1.3 合并两个构造函数。 2. 析构函数3.拷贝构造函数4. 赋值运算符重载5. size()/capacity()6. 解引用[]8.iterator迭代器7.Print()8.> 8. push_back()&append()8.1 reserve() 9. 10.insert()10.1 任意位置插入一个字…

在线客服软件的市场需求及前景如何?

随着互联网的不断发展&#xff0c;越来越多的企业开始意识到在线客服软件在客户服务中的重要作用。现在&#xff0c;各种形态的在线客服软件涌现出来&#xff0c;如何选择适合自己公司的线上客服软件成为了企业面临的一个挑战。本文将从市场需求和前景方面分析在线客服软件行业…

【Loopback Detection 环回检测以及原理解读】

Loopback Detection简介 Loopback Detection&#xff08;环回检测&#xff09;通过周期性发送环回检测报文来检测设备下挂网络是否存在环路。 网络中的环路会导致设备对广播、组播以及未知单播等报文进行重复发送&#xff0c;造成网络资源浪费甚至网络瘫痪。为了能够及时发现…

MS4553S双向电平转换器可pin对pin兼容TXB0102/TXS0102

MS4553S是一款双向电平转换器&#xff0c;可以用作混合电压的数字信号系统中。其使用两个独立构架的电源供电&#xff0c;A端供电电压范围是1.65V到5.5V&#xff0c;B端供电电压范围是2.3V到5.5V。可用在电压为1.8V、2.5V、3.3V和5V的信号转换系统中。当OE端为低电平时&#xf…

大学生毕业嵌入式和JAVA哪条未来更有前景?

今日话题&#xff0c;大学生毕业后选择嵌入式和Java两个岗位哪个更具前景&#xff1f;答案因个人情况而异。通常来说&#xff0c;对于零基础转行的同学&#xff0c;学习Java可能会是一个更广泛选择的建议&#xff0c;因为Java岗位更多&#xff0c;且不需要涉及硬件知识。然而&a…

Live800:一个优秀的客服应具备哪些技能?

一个优秀的客服应该具备哪些技能&#xff1f;这是每个企业在招聘和培训客服人员时都需要考虑的问题。一名优秀的客服不仅需要善于沟通&#xff0c;还需要具备专业知识、灵活应变、耐心细致等多方面的能力。在这篇文章中&#xff0c;我们将从多个方面探讨一个优秀客服应该具备什…

MATLAB——极限学习机参考程序

欢迎关注“电击小子程高兴的MATLAB小屋” %% I. 清空环境变量 clear all clc %% II. 训练集/测试集产生 %% % 1. 导入数据 load iris_data.mat %% % 2. 随机产生训练集和测试集 P_train []; T_train []; P_test []; T_test []; for i 1:3 temp_input features((i-…

Bug小能手系列(python)_12: 使用mne库读取.set文件报错 TypeError: ‘int‘ object is not iterable

使用mne库读取.set文件报错 0 引言1. 报错原因2. 推荐解决方案3. 总结 0 引言 在使用mne库读取.set文件&#xff0c;然后对文件进行处理。在运行过程中出现报错&#xff1a;TypeError: int object is not iterable 其中&#xff0c;代码库包的版本这里主要介绍mne的版本&…

MYSQL 连接

高频 SQL 50 题&#xff08;基础版&#xff09; - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 1378. 使用唯一标识码替换员工ID SELECT COALESCE(unique_id, NULL) AS unique_id,name FROM Employees LEFT JOIN EmployeeUNI ON Employees.…

7.MidBook项目经验之阿里OSS,微信支付(退款),定时任务,图表数据处理

1.阿里云实名认证 阿里云对象存储oss,标准高频率访问, 低频访问存储,归档存储(根本不经常访问) 冗余存储(备份) 读写权限(所有人还是自己访问) Component public class ConstantOssPropertiesUtils implements InitializingBean {不用注入,由spring创建bean使用流 MultipartFil…

SpringBoot整合RabbitMQ并实现消息发送与接收

系列文章目录 解析JSON格式参数 & 修改对象的key VUE整合Echarts实现简单的数据可视化 Java中运用BigDecimal对字符串的数值进行加减乘除等操作 List&#xff1c;HashMap&#xff1c;String,String&#xff1e;&#xff1e;实现自定义字符串排序&#xff08;key排序、Valu…

Node介绍(nvm安装和npm常用命令)

文章目录 Node 介绍为什么要学习 Node.jsNode.js 是什么Node能做什么nvm常用的 nvm 命令npm 快捷键npm 常用命令切换 npm 下包镜像源常用命令 Node 介绍 为什么要学习 Node.js 企业需求 具有服务端开发经验更改front-endback-end全栈开发工程师基本的网站开发能力 服务端前端…