程序员为什么要写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函数关联起来的呢?…...
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是做预处理操作,编译器从未看见该常量,编译器刚开始编译,它就被预处理器移走了,而#define的本质就是做替换,它可能从来未进入记号表 解决方法是用常量替换宏 语言…...
Unity 之 GameObject.Find()在场景中查找指定名称的游戏对象
文章目录 GameObject.Find 是 Unity 中的一个函数,用于在场景中查找指定名称的游戏对象。这个函数的主要作用是根据游戏对象的名称来查找并返回一个引用,使您能够在代码中操作该对象。以下是有关 GameObject.Find 的详细介绍: 函数签名&…...
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 以及简单的入门,配有超详细的图片,一步步带大家进行下载与安装 NodeJs简介关于前端与后端Node是什么?为什么要学习NodeNodeJS的优点: NodeJS的下载与安装NodeJS的下载: NodeJS的快速入…...
量化面试-概率题
文章目录 一、题目1.糖果罐(绿皮书79页)2 折木棍(绿皮书89页)3 第一张ACE(绿皮书95页)4 n个均匀分布之和(绿皮书95页) 二、答案1. 糖果罐2 折木棍3 第一张ACE4 n个均匀分布之和 一、…...
【spark】java类在spark中的传递,scala object在spark中的传递
记录一个比较典型的问题,先讲一下背景,有这么一个用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库来生成图片并保存到本地。首先,你需要确保你的PHP环境已经安装了GD库。然后,你可以使用GD库的函数来创建一个画布,并在上面绘制文字。最后,使用imagepng或imagejpeg函数将画布保存为PNG或JPEG格式的图片文件。…...
面试手撕—二叉搜索树及其后序遍历
一、引言 在面试地平线的时候,聊到了二叉搜索树,让手撕二叉搜索树,以下是要求 1、用类模板实现二叉搜索树 2、写一个函数,实现给一个vector数组,转换成二叉搜索树 3、写出二叉搜索树的后序遍历 二、代码实现 #inc…...
Java数据结构面试题以及答案
本专栏记录Java后端开发相关的面试题,欢迎大家阅读专栏的其他文章。 目录 1.B树和B树的区别?B树和B树的优点分别是? 2.排序算法的种类和复杂度 3.HashMap和Hashtable的原理、区别、应用场景 4.ConcurrentHashMap的原理、应用场景 5.Arra…...
Java——它要求用户输入一个整数(实际上是一个字符串),然后计算该整数的平方值,并将结果输出。
这是一个Java程序,它要求用户输入一个整数(实际上是一个字符串),然后计算该整数的平方值,并将结果输出。程序的基本流程如下: 首先,声明并初始化变量data和result,它们的初始值都为…...
【科研论文配图绘制】task6直方图绘制
【科研论文配图绘制】task6直方图绘制 task6 主要掌握直方图的绘制技巧,了解直方图含义,清楚统计指标的添加方式 1.直方图 直方图是一种用于表示数据分布和离散情况的统计图形,它的外观和柱形图相近,但它所 表达的含义和柱形图…...
Leetcode刷题:395. 至少有 K 个重复字符的最长子串、823. 带因子的二叉树
Leetcode刷题:395. 至少有 K 个重复字符的最长子串、823. 带因子的二叉树 1. 395. 至少有 K 个重复字符的最长子串算法思路参考代码和运行结果 2. 823. 带因子的二叉树算法思路参考代码和运行结果 1. 395. 至少有 K 个重复字符的最长子串 题目难度:中等 标签&#…...
java八股文面试[多线程]——Synchronized的底层实现原理
笔试:画出Synchronized 线程状态流转实现原理图 synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized 翻译为中文的意思是同步,也称之为”同步锁“。 synchronized的作用是保证在同一时刻, 被修饰的代码块或方…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决
问题: pgsql数据库通过备份数据库文件进行还原时,如果表中有自增序列,还原后可能会出现重复的序列,此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”,…...
