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

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

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

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

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

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

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

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

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

忽略代码质量并产生异味

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

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

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

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

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

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

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

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强化学习笔记

马尔科夫决策过程 markov chain: S \mathcal{S} S MRP: S , R \mathcal{S,R} S,R MDP: S , A ( s ) , R , P \mathcal{S,A(s),R,P} …

在 Redis 中处理键值 | Navicat

Redis 是一个键值存储系统,允许我们将值与键相关联起来。与关系型数据库不同的是, 在Redis 中,不需要使用数据操作语言 (DML) 和查询语法,那么我们如何进行数据的写入、读取、更新和删除操作呢?…

怎么检测UI卡顿?(线上及线下)

什么是UI卡顿? 在Android系统中,我们知道UI线程负责我们所有视图的布局,渲染工作,UI在更新期间,如果UI线程的执行时间超过16ms,则会产生丢帧的现象,而大量的丢帧就会造成卡顿,影响用…

prometheus + grafana进行服务器资源监控

在性能测试中,服务器资源是值得关注一项内容,目前,市面上已经有很多的服务器资 源监控方法和各种不同的监控工具,方便在各个项目中使用。 但是,在性能测试中,究竟哪些指标值得被关注呢? 监控有…

springcloud-gateway简述

Spring Cloud Gateway 是一个用于构建 API 网关的项目&#xff0c;它是 Spring Cloud 生态系统中的一部分&#xff0c;旨在为微服务架构提供动态路由、负载均衡、安全性和监控等功能。 网关工程对应pom文件 <?xml version"1.0" encoding"UTF-8"?>…

【ag-grid-vue】基本使用

ag-grid是一款功能和性能强大外观漂亮的表格插件&#xff0c;ag-grid几乎能满足你对数据表格所有需求。固定列、拖动列大小和位置、多表头、自定义排序等等各种常用又必不可少功能。关于收费的问题&#xff0c;绝大部分应用用免费的社区版就够了&#xff0c;ag-grid-community社…

在线设计APP ui的网站,分享这7款

在数字时代&#xff0c;用户界面&#xff08;UI&#xff09;设计变得非常重要&#xff0c;因为良好的UI设计可以改善用户体验&#xff0c;增强产品吸引力。随着科学技术的发展&#xff0c;越来越多的应用在线设计网站出现&#xff0c;为设计师和团队提供了一种新的创作方式。本…

【大数据知识】大数据平台和数据中台的定义、区别以及联系

数据行业有太多数据名词&#xff0c;例如大数据、大数据平台、数据中台、数据仓库等等。但大家很容易混淆&#xff0c;也很容易产生疑问&#xff0c;今天我们就来简单聊聊大数据平台和数据中台的定义、区别以及联系。 大数据平台和数据中台的定义 大数据平台&#xff1a;一个…

阿里云大数据实战记录8:拆开 json 的每一个元素,一行一个

目录 一、前言二、目标介绍三、使用 pgsql 实现3.1 拆分 content 字段3.2 拆分 level 字段3.3 拼接两个拆分结果 四、使用 ODPS SQL 实现4.1 拆分 content 字段4.2 拆分 level 字段4.3 合并拆分 五、使用 MySQL 实现六、总结 一、前言 商业场景中&#xff0c;经常会出现新的业…

JUC并发编程--------基础篇

一、多线程的相关知识 栈与栈帧 我们都知道 JVM 中由堆、栈、方法区所组成&#xff0c;其中栈内存是给谁用的呢&#xff1f;其实就是线程&#xff0c;每个线程启动后&#xff0c;虚拟 机就会为其分配一块栈内存。 每个栈由多个栈帧&#xff08;Frame&#xff09;组成&#xf…

极智嘉(Geek+)再获重磅荣誉,持续力领跑智慧物流行业发展

近日&#xff0c;全球仓储机器人引领者极智嘉(Geek)再度传来好消息&#xff0c;凭借着全球化的专业服务能力和稳健增长的亮眼海外成绩&#xff0c;一举荣登“2023出海品牌服务商”价值榜&#xff0c;成为唯一登榜的物流机器人企业。 作为率先出海的物流机器人企业&#xff0c…

博客系统后端(项目系列2)

目录 前言 &#xff1a; 1.准备工作 1.1创建项目 1.2引入依赖 1.3创建必要的目录 2.数据库设计 2.1博客数据 2.2用户数据 3.封装数据库 3.1封装数据库的连接操作 3.2创建两个表对应的实体类 3.3封装一些必要的增删改查操作 4.前后端交互逻辑的实现 4.1博客列表页 …

十年测试工程师叙述自动化测试学习思路

自动化测试介绍 自动化测试(Automated Testing)&#xff0c;是指把以人为驱动的测试行为转化为机器执行的过程。实际上自动化测试往往通过一些测试工具或框架&#xff0c;编写自动化测试用例&#xff0c;来模拟手工测试过程。比如说&#xff0c;在项目迭代过程中&#xff0c;持…

C++中的虚继承、多态以及模板的介绍

菱形继承 概念 菱形继承又称为钻石继承&#xff0c;由公共基类派生出多个中间子类&#xff0c;又由中间子类共同派生出汇聚子类。汇聚子类会得到中间子类从公共基类继承下来的多份成员 格式 A --------公共基类/ \B C ------- 中间子类\ /D -----…

2023.8.28日论文阅读

文章目录 NestFuse: An Infrared and Visible Image Fusion Architecture based on Nest Connection and Spatial/Channel Attention Models(2020的论文)本文方法 LRRNet: A Novel Representation Learning Guided Fusion Network for Infrared and Visible Images本文方法学习…

对于Android开发,我们为何要学Jetpack Compose?

概述 Jetpack Compose 是用于构建原生 Android 界面的新工具包。它可简化并加快 Android 上的界面开发&#xff0c;使用更少的代码、强大的工具和直观的 Kotlin API&#xff0c;快速让应用生动而精彩。Compose 使用全新的组件——可组合项 (Composable) 来布局界面&#xff0c…

内网穿透实战应用-windwos10系统搭建我的世界服务器,内网穿透实现联机游戏Minecraft

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …

Mysql 基本概念

数据库的组成 数据 数据是描述事务的符号记录&#xff1b;包括数字、文字、图形、图像、声音、档案记录等 以“记录“形式按统一的格式进行存储 表 将不同的记录以行和列的方式组合成了表 用来存储具体数据 数据库 它就是所有不同属性表的集合 以一定的组织方式存储的…

算法 for GAMES

栈 #include <iostream> #include <stack>int main() {std::stack<int> intStack;// 压入元素到堆栈intStack.push(5);intStack.push(10);intStack.push(15);// 查看堆栈顶部元素std::cout << "Top element: " << intStack.top() <…