当前位置: 首页 > news >正文

程序员为什么要写bug,不能一次性写好吗?

仅仅听到“Bug”这个词就会让你作为一个开发人员感到畏缩。我们相信,优秀的程序员是那些编写无错误代码的人。随着一些开发人员强调要成为一名零错误程序员,我们进行了更深刻的思考,并发现事实的准确性。

所有制作的软件都应该没有错误。对此没有第二发言权,因为几乎每个软件都被开发为长跑者,即使在边缘情况下也可以运行。因此,无错误的程序是必须的,但不是无错误的代码编写。我们的意思是,编写带有错误的程序会使您失去对编码的许多其他方面的关注,我们将在本文后面看到这些方面。零错误程序员是那些强调编写完美代码的人,理想情况下,甚至在程序完成和执行之前也没有错误。

引用声明不可能编写无错误的代码。

开发人员需要面对这样一个事实,即无错误的写作是不可能的。不,我们不会质疑您在编码方面的能力和知识,但我们会在开发过程中考虑导致错误的其他因素。优秀的程序员明白,他们创建和实现软件的时间有限,因此功能的神圣化迫在眉睫。除了时间和紧迫的期限之外,资金限制是阻碍无错误软件开发的因素,因为运行手动代码审查的成本很高。因此,错误是不可避免的。重要的是,开发人员不应该害怕它们并准备犯错误。

不要试图编写无错误的代码

让我们看看每个开发人员在成为零错误开发人员的竞赛中错过的三件事,以及它如何给软件本身带来问题。

更注重功能而不是代码设计

那些擅长编写无错误代码的开发人员往往更关注功能。焦点如此之高,以至于他们忽略了可维护性使软件保持活力。可维护性应该是编码时的重中之重。只要你的代码是干净的,编写有缺陷的代码是可以接受的。零错误程序员也忽略或远离软件的设计标准,因为他们倾向于将软件视为需要由功能解决的问题。但他们忘记了,即使在软件完成后也可以轻松更改软件的功能,但提高可维护性是一项更艰巨的工作,而且成本高昂。许多程序员低估了他们的代码将被使用多长时间以及读取和修改的频率,因此忽略可维护性确实会非常昂贵。

忽略代码质量并产生异味

我们在之前的博客中看到,由于不良的编程习惯,代码异味是故意引入代码的,大多数时候是在不知情的情况下引入的。气味的原因之一是因为敏捷程序员倾向于在编写问题和错误后立即解决问题和错误。过早的优化或即时修复会产生臭代码,因为它们没有考虑软件的整体代码质量。

以一个错误为例,它提示你在已经很庞大的类中再写几行。你在同一类中发现了更多的错误,并继续输入代码行,最终得到一个似乎包含所有内容的上帝类。此外,在某些情况下,如果出现类似的错误,敏捷程序员将再次编写代码作为问题的即时修复,但最终会增加重复。代码质量是程序的灵魂;代码质量差意味着您的软件易受攻击、效率低下、速度缓慢,并且存在巨大的技术债务。

害怕错误的编码人员效率低下,创造力不足

如果你害怕做某事,你会在做之前多想一想,或者跳过去做。有些人会争辩说这是一件好事,但前提是你打算从飞机上跳伞。害怕编写代码只会降低您的工作效率并限制您的增长。错误是最好的老师,犯错最多的人最终会学到最多。编写错误代码意味着您正在做一些您不完全擅长或不舒服的事情,解决这些错误会给您带来学习经验。

开发人员在编写代码时需要展示他们的创造力,以提出独特、高效且设计更宏伟的东西。害怕错误的程序员或零错误程序员倾向于留在他们的知识保护圈中,实现他们所知道的,使他们的创造力和实验性降低。优秀的程序员不怕错误,全力以赴发挥创造力。嗯,这就是为什么最好的开发人员是计算机科学家。

漫画展示了手动代码审查如何耗时且困难。优秀的程序员产生无错误的代码

优秀的程序员会产生更便宜的错误。

我们并不是说犯了很多错误和编写错误的代码意味着你是一个称职的程序员。我们认为优秀的程序员并不完美;它们确实会产生错误。那么如何区分一个好的程序员和一个有缺陷的脚本程序员呢?简单!好的程序员会犯更便宜的错误,在大多数情况下是为了避免犯昂贵的错误。更便宜的错误是那些解决速度更快并且对技术债务贡献不大的错误。糟糕的程序员会犯代价高昂的错误,复杂的错误甚至可能需要更改程序的多个部分才能解决它。相反,优秀的程序员知道如何欠足够的技术债务。当然,足够意味着更低,但对于开发人员来说,他们认为低和太高是非常主观的。但是编写无错误的代码绝不能与高额技术债务妥协。

显示修复错误的成本如何在每个阶段增加的信息图

优秀的程序员使用 CodeGrip 来查找错误。

那么,如果优秀的程序员不专注于无错误的写作,他们会怎么做呢?他们使用 CodeGrip,这是一种自动代码审查工具,可分析您的代码行以查找漏洞和错误。CodeGrip 显示您的代码可能存在的所有错误,指出它们的位置,并指定适当的解决方案,使其没有错误,但也使可维护性不受影响。您可以有更多时间展示解决问题的能力、设计技能和创造力,同时将错误检测和代码质量保证留给 CodeGrip。CodeGrip可以免费试用在线工具,该工具直接与您的GitHub或BitBucket存储库集成,使代码审查和无错误代码无忧无虑!

还想成为一名零错误程序员吗?尝试根本不编写代码。

相关文章:

程序员为什么要写bug,不能一次性写好吗?

仅仅听到“Bug”这个词就会让你作为一个开发人员感到畏缩。我们相信,优秀的程序员是那些编写无错误代码的人。随着一些开发人员强调要成为一名零错误程序员,我们进行了更深刻的思考,并发现事实的准确性。 所有制作的软件都应该没有错误。对此…...

Nginx反向代理其他服务

Nginx反向代理 嘿,你的网络遇到了限制,不能直接通过服务的端口进行访问?别担心,我们可以借助Nginx这个超级英雄来解决这个问题!让我给你讲讲关于Nginx反向代理的故事吧。 首先,让我们明确一下反向代理的概…...

MQ 简介-RabbitMQ

一. MQ 简介 消息队列作为高并发系统的核心组件之一,能够帮助业务系统结构提升开发效率和系统 稳定性,消息队列主要具有以下特点: 削峰填谷:主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题系统解耦:解决不同重要程度、不…...

强化学习(2)

强化学习(1) 1.多智能体深度强化学习重要性采样 多智能体深度强化学习(Multi-Agent Deep Reinforcement Learning,MADRL)是指在多智能体环境下使用深度强化学习算法进行协同学习。重要性采样(Importance Sampling)是…...

Visual Studio 2022的MFC框架——theApp全局对象

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。 MFC中的WinMain函数是如何与MFC程序中的各个类组织在一起的呢?MFC程序中的类是如何与WinMain函数关联起来的呢&#xff1f…...

SpringBoot Cache

一、基本概念 Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。 Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如: • EHCache • Caffeine …...

vue 简单实验 自定义组件 component

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"components-demo"><button-counter></button-counter> </div> <script> // 创建一个Vue 应用 const ap…...

C++ 改善程序的具体做法 学习笔记

1、尽量用const enum inline替换#define 因为#define是做预处理操作&#xff0c;编译器从未看见该常量&#xff0c;编译器刚开始编译&#xff0c;它就被预处理器移走了&#xff0c;而#define的本质就是做替换&#xff0c;它可能从来未进入记号表 解决方法是用常量替换宏 语言…...

Unity 之 GameObject.Find()在场景中查找指定名称的游戏对象

文章目录 GameObject.Find 是 Unity 中的一个函数&#xff0c;用于在场景中查找指定名称的游戏对象。这个函数的主要作用是根据游戏对象的名称来查找并返回一个引用&#xff0c;使您能够在代码中操作该对象。以下是有关 GameObject.Find 的详细介绍&#xff1a; 函数签名&…...

flink on yarn with kerberos 边缘提交

flink on yarn 带kerberos 远程提交 实现 flink kerberos 配置 先使用ugi进行一次认证正常提交 import com.google.common.io.Files; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.apache.flink.client.cli.CliFrontend; import o…...

NodeJS的简介以及下载和安装

本章节会带大家下载并安装NodeJs 以及简单的入门&#xff0c;配有超详细的图片&#xff0c;一步步带大家进行下载与安装 NodeJs简介关于前端与后端Node是什么&#xff1f;为什么要学习NodeNodeJS的优点&#xff1a; NodeJS的下载与安装NodeJS的下载&#xff1a; NodeJS的快速入…...

量化面试-概率题

文章目录 一、题目1.糖果罐&#xff08;绿皮书79页&#xff09;2 折木棍&#xff08;绿皮书89页&#xff09;3 第一张ACE&#xff08;绿皮书95页&#xff09;4 n个均匀分布之和&#xff08;绿皮书95页&#xff09; 二、答案1. 糖果罐2 折木棍3 第一张ACE4 n个均匀分布之和 一、…...

【spark】java类在spark中的传递,scala object在spark中的传递

记录一个比较典型的问题&#xff0c;先讲一下背景&#xff0c;有这么一个用java写的类 public class JavaClass0 implements Serializable {private static String name;public static JavaClass0 getName(String str) {if (name null) {namestr;}return name;}... }然后在sp…...

php 文字生成图片保存到本地

你可以使用PHP的GD库来生成图片并保存到本地。首先&#xff0c;你需要确保你的PHP环境已经安装了GD库。然后&#xff0c;你可以使用GD库的函数来创建一个画布&#xff0c;并在上面绘制文字。最后&#xff0c;使用imagepng或imagejpeg函数将画布保存为PNG或JPEG格式的图片文件。…...

面试手撕—二叉搜索树及其后序遍历

一、引言 在面试地平线的时候&#xff0c;聊到了二叉搜索树&#xff0c;让手撕二叉搜索树&#xff0c;以下是要求 1、用类模板实现二叉搜索树 2、写一个函数&#xff0c;实现给一个vector数组&#xff0c;转换成二叉搜索树 3、写出二叉搜索树的后序遍历 二、代码实现 #inc…...

Java数据结构面试题以及答案

本专栏记录Java后端开发相关的面试题&#xff0c;欢迎大家阅读专栏的其他文章。 目录 1.B树和B树的区别&#xff1f;B树和B树的优点分别是&#xff1f; 2.排序算法的种类和复杂度 3.HashMap和Hashtable的原理、区别、应用场景 4.ConcurrentHashMap的原理、应用场景 5.Arra…...

Java——它要求用户输入一个整数(实际上是一个字符串),然后计算该整数的平方值,并将结果输出。

这是一个Java程序&#xff0c;它要求用户输入一个整数&#xff08;实际上是一个字符串&#xff09;&#xff0c;然后计算该整数的平方值&#xff0c;并将结果输出。程序的基本流程如下&#xff1a; 首先&#xff0c;声明并初始化变量data和result&#xff0c;它们的初始值都为…...

【科研论文配图绘制】task6直方图绘制

【科研论文配图绘制】task6直方图绘制 task6 主要掌握直方图的绘制技巧&#xff0c;了解直方图含义&#xff0c;清楚统计指标的添加方式 1.直方图 直方图是一种用于表示数据分布和离散情况的统计图形&#xff0c;它的外观和柱形图相近&#xff0c;但它所 表达的含义和柱形图…...

Leetcode刷题:395. 至少有 K 个重复字符的最长子串、823. 带因子的二叉树

Leetcode刷题:395. 至少有 K 个重复字符的最长子串、823. 带因子的二叉树 1. 395. 至少有 K 个重复字符的最长子串算法思路参考代码和运行结果 2. 823. 带因子的二叉树算法思路参考代码和运行结果 1. 395. 至少有 K 个重复字符的最长子串 题目难度&#xff1a;中等 标签&#…...

java八股文面试[多线程]——Synchronized的底层实现原理

笔试&#xff1a;画出Synchronized 线程状态流转实现原理图 synchronized关键字解决的是多个线程之间访问资源的同步性&#xff0c;synchronized 翻译为中文的意思是同步&#xff0c;也称之为”同步锁“。 synchronized的作用是保证在同一时刻&#xff0c; 被修饰的代码块或方…...

C#,《小白学程序》第三课:类、类数组与排序

类class把数值与功能巧妙的进行了结合&#xff0c;是编程技术的主要进步。 下面的程序你可以确立 分数 与 姓名 之间关系&#xff0c;并排序。 1 文本格式 /// <summary> /// 同学信息类 /// </summary> public class Classmate { /// <summary> /…...

史上最全AP、mAP详解与代码实现

文章目录 前言一、mAP原理1、mAP概念2、准确率3、精确率4、召回率5、AP: Average Precision 二、mAP0.5与mAP0.5:0.951、mAP0.52、mAP0.5:0.95 三、mAP代码实现1、真实标签json文件格式2、模型预测标签json文件格式3、mAP代码实现4、mAP结果显示 四、模型集成mAP代码1、模型mai…...

百数应用中心——生产制造管理解决方案解决行业难题

传统生产制造业面临着许多挑战&#xff0c;其中一些主要问题包括效率低下、交期压力大、需求预测不准确、生产模式复杂、异常响应慢、库存高和计划脱节等。这些问题不仅影响了生产效率和质量&#xff0c;也导致了不必要的成本和客户满意度下降。 生产制造管理应用对于企业的生产…...

《存储IO路径》专题:IO虚拟化初探

大家好&#xff0c;欢迎来到今天的科技小课堂。今天我们要聊聊的是一项非常有趣且实用的技术——I/O虚拟化&#xff08;Input/Output Virtualization&#xff0c;简称IOV&#xff09;。想象一下&#xff0c;如果把物理硬件资源比作一道丰盛的大餐&#xff0c;那么IOV就是那位神…...

Springboot2.0快速入门(第一章)

目录 一&#xff0c;SpringBoot简介1.1&#xff0c;回顾什么是Spring1.2&#xff0c;Spring是如何简化Java开发的1.3&#xff0c;什么是SpringBoot 二&#xff0c;Hello&#xff0c;World2.1&#xff0c;准备工作2.2&#xff0c;创建基础项目说明2.3&#xff0c;创建第一个Hell…...

Flink流批一体计算(17):PyFlink DataStream API之StreamExecutionEnvironment

目录 StreamExecutionEnvironment Watermark watermark策略简介 使用 Watermark 策略 内置水印生成器 处理空闲数据源 算子处理 Watermark 的方式 创建DataStream的方式 通过list对象创建 ​​​​​​使用DataStream connectors创建 使用Table & SQL connectors…...

javeee spring cglib动态代理

cglib动态代理 依赖 <dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId><version>3.2.4</version></dependency>代理类 package com.test.cglibProxy;import net.sf.cglib.proxy.Enhancer; import …...

【Docker】Dockerfile介绍

Dockerfile是一个文本文件&#xff0c;其中包含了一系列的指令&#xff0c;用于构建Docker镜像。这些指令可以用来自动化镜像的构建过程&#xff0c;并创建自定义镜像。 以下是一些常用的Dockerfile指令及其功能&#xff1a; FROM&#xff1a;指定基础镜像。这是Dockerfile中…...

两个hdfs之间迁移传输数据

本文参考其他大数据大牛的博文做了整理和实际验证&#xff0c;主要解决hdfs跨集群复制/迁移问题。 在hdfs数据迁移时总会涉及到两个hdfs版本版本问题&#xff0c;致力解决hdfs版本相同和不同两种情况的处理方式&#xff0c;长话短说&#xff0c;进正文。 distcp: hadoop自带的…...

C++ 缺失的数字

有n个数字&#xff0c;值就是1~n&#xff0c;现发现丢失了2个数字&#xff0c;请你根据剩余的n-2个数字&#xff0c;编程计算一下&#xff0c;缺失的是哪两个数字呢&#xff1f; &#xff08;使用桶排&#xff0c;标记输入过的数字&#xff09; #include<bits/stdc.h> us…...