在代码质量和工作效率的矛盾间如何取舍?

news2024/12/24 9:03:06

这个问题的答案是,在很短的一段时期,编写高质量代码似乎会拖慢我们的进度。与按照头脑中首先闪现的念头编写代码相比,高质量的代码需要更多的思考和努力。但如果我们编写的不仅仅是运行一次就抛之脑后的小程序,而是更有实质性的软件系统,那么编写高质量的代码通常会在中长期加快开发进程。

想象一下,我们要在家里装一块搁板。有一种“恰当”的方法,也有一种快速的“变通”方法。

〓● “恰当”的方法——我们在墙体立柱或砖石等坚固的东西上钻孔、固定螺钉,将支架固定在墙上。然后,我们将搁板安装在这些支架上。花费时间:30min。

〓● “变通”方法——购买一些胶水,将搁板粘在墙上。花费时间:10min。

看起来,用“变通”方法装搁板可以节约20min,也不会用到手钻。我们选择了这种快速的方法。现在,我们来考虑接下来发生的事情。

我们将搁板粘在墙面上,但墙面材料最有可能是一层灰泥。灰泥并不坚固,很容易开裂并大块大块地剥落。一旦我们开始使用搁板,所放东西的重量很可能导致灰泥开裂,搁板将掉下来并带下来大块的灰泥。现在,不仅我们的搁板无法使用,而且需要重新粉刷墙面(这项工作即便不需要几天,至少也要几个小时)。即便奇迹出现,搁板没有掉下来,我们也因为采用了“变通”方法而给未来带来问题。想象如下两种场景。

〓● 我们发现搁板放得不够水平(缺陷)。

〓❏ 对于有支架的搁板,我们只需要在支架和搁板之间加入一个较小的垫片。花费时间:5min。

〓❏ 对于用胶水粘上的搁板,我们必须将它从墙上揭下来,这会带下来一大块灰泥。现在,我们必须重新粉刷墙面,再将搁板装回去。花费时间:几个小时,甚至几天。

〓● 我们决定重新装饰房间(新需求)。

〓❏ 我们可以卸下螺钉,将带支架的搁板拆下来。重新装饰房间以后,我们再将搁板放回去。与搁板相关的工作花费时间:15min。

〓❏ 对于用胶水粘上的搁板,我们要么不动搁板,那么它有滴上油漆、在我们必须油漆或者铺上墙纸的地方留下不干净边缘的风险。我们也可以将搁板揭下来,那么必须重新刷上灰泥。我们只能在低劣的重新装饰工作和花几小时(甚至几天)重新涂抹墙面之中选择一个。

你应该明白了吧。最初看起来,按照“恰当”的方法做,安装一个带支架的搁板似乎毫无意义地浪费了20min,但从长期看,它很有可能节省许多时间和减少麻烦。在将来的重新装饰计划中,我们还会看到,一开始采用快速的“变通”方法,以后将迫使我们走上一条采用更多权宜之计的道路,比如在搁板周围刷油漆或者贴墙纸,而不是在重新装饰时取下搁板。

编写代码与此很相似。根据我们脑海里浮现的第一个想法编程,而不考虑代码质量,很可能一开始会节省一些时间。但我们很可能得到一个脆弱、复杂的代码库,它将越来越难以理解或推测。添加新功能或修复缺陷将变得越来越难,因为我们不得不应付破坏的情况,并重新设计一切。

你以前一定听过“欲速则不达”这句话,这是通过对生活中许多事物的观察得出的经验,在没有考虑清楚正确的方法之前,过于匆忙的行动往往导致错误,从而降低总体的速度。这也很好地总结了编写高质量代码能加快开发速度的原因,不要为了速度而鲁莽行动。

以上回答摘自《好代码 ,坏代码》

本书的目标读者是那些已经具备基本编程技能,想继续提高编程技能的人。本书适合有0~3年软件工程师工作经验的人阅读。有丰富工作经验的工程师可能发现,本书中的许多内容他们都已经掌握,但我希望他们把这本书当作指导其他同行的有用资源。

本书分享了编写鲁棒、可靠且易于团队成员理解和适应的代码的实用技巧。内容涉及如何像高效的软件工程师一样思考代码,如何编写读起来像一个结构良好的句子的函数,如何确保代码可靠且无错误;如何进行有效的单元测试,如何识别可能导致问题的代码并对其进行改进,如何编写可重用并适应新需求的代码,如何提高读者的中长期生产力;同时还介绍了如何节省开发人员及团队的宝贵时间,等等。

本书文字简洁、论述精辟、层次清晰,适合零基础的开发人员阅读,对于高等院校计算机及相关专业的学生,也具有很高的参考价值。

 

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

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

相关文章

移动web(二)

her~~llo,我是你们的好朋友Lyle,是名梦想成为计算机大佬的男人! 博客是为了记录自我的学习历程,加强记忆方便复习,如有不足之处还望多多包涵!非常欢迎大家的批评指正。 目录 一、移动端特点 1.1 移动端和…

mysql调优参数

my.conf [client] port 端口 socket sokcet位置 [mysqld] basedir mysql位置 port 3306 socket sokcet位置 datadir data目录 pid_file mysqld.pid位置 bind_address 0.0.0.0 lower_case…

【Spark分布式内存计算框架——Spark SQL】14. 分布式SQL引擎

第八章 分布式SQL引擎 回顾一下,如何使用Hive进行数据分析的,提供哪些方式交互分析??? 方式一:交互式命令行(CLI) bin/hive,编写SQL语句及DDL语句 方式二&#xff1a…

JdbcTemplate常用方法解析

文章目录1.JdbcTemplate简介2.JdbcTemplate主要方法:3.常用方法介绍update()方法增删改query()查询方法1.JdbcTemplate简介 JdbcTemplate是Spring JDBC的核心类,借助该类提供的方法可以很方便的实现数据的增删改查。 Spring对数据库的操作在jdbc上面做…

小波神经网络(WNN)的实现(Python,附源码及数据集)

文章目录一、理论基础1、小波神经网络结构2、前向传播过程3、反向传播过程4、建模步骤二、小波神经网络的实现1、训练过程(WNN.py)2、测试过程(test.py)3、测试结果4、参考源码及实验数据集一、理论基础 小波神经网络&#xff08…

Python实现性能自动化测试,还可以如此简单

Python实现性能自动化测试,还可以如此简单 目录:导读 一、思考❓❔ 二、基础操作🔨🔨 三、综合案例演练🔨🔨 四、总结💡💡 写在最后 一、思考❓❔ 1.什么是性能自动化测试? 性…

宁盾上榜第五版《CCSIP 2022 中国网络安全行业全景册》

2月1日,国内网络安全行业媒体Freebuf咨询正式发布《CCSIP(China Cyber Security Panorama)2022 中国网络安全行业全景册》第五版。宁盾作为国产身份安全厂商入驻身份识别和访问管理(SSO、OTP、IDaaS)及边界访问控制&am…

Unity毛发系统TressFX Exporter

Unity 数字人交流群:296041238 一:在Maya下的TressFX Exporter 插件安装步骤: 1. 下载Maya的TressFX Exporter插件 下载地址:TressFX Exporter 链接:https://github.com/Unity-China/cn.unity.hairfx.core/tree/m…

货仓选址 AcWing(JAVA)

在一条数轴上有 N家商店,它们的坐标分别为 A1∼AN。 现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送商品。 为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。 输入格式&#…

Spring Cloud Alibaba--ActiveMQ微服务详解之消息队列(四)

上篇讲述高并发情况下的数据库处理方式:分布式事务管理机制。即使我们做到这一步并发情况只能稍微得到缓解,当然千万级别的问题不大,但在面对双十一淘宝这类的达上亿的并发的时候仅仅靠分布式事务管理还是远远不够,即使数据库可以…

基于Django和vue的微博用户情感分析系统

完整代码:https://download.csdn.net/download/weixin_55771290/87471350概述这里简单说明一下项目下下来直接跑起的方法。前提先搞好python环境和vue环境,保证你有一个账户密码连上数据库mysql。1、pip install requirements.txt 安装python包2、修改mysql数据库的…

Hadoop HDFS的主要架构与读写文件

一、Hadoop HDFS的架构 HDFS:Hadoop Distributed File System,分布式文件系统 1,NameNode 存储文件的metadata,运行时所有数据都保存到内存,整个HDFS可存储的文件数受限于NameNode的内存大小一个Block在…

使用物联网进行智能能源管理的10大优势

如今,物联网推动了许多行业的自动化流程和运营效率,而物联网在能源领域的应用尤其受到消费者、企业甚至政府的关注。除了对电力供应链的诸多好处之外,物联网能源管理系统还让位于新的智能电网,并有望实现更高的安全性和效率。基于…

软件架构知识6-高性能数据库集群:读写分离

一、读写分离 读写分离原理:将数据库读写操作分散到不同的节点上: 读写分离的基本实现是: 1、数据库服务器搭建主从集群,一主一从,一主多从都可以; 2、数据库主机负责读写操作,从机只负责读操…

【2023-02-20】JS逆向之翼支付

提示:文章仅供参考,禁止用于非法途径 文章目录前言分析总结前言 真的好久没更了…… 提示:以下是本篇文章正文内容,下面案例可供参考 分析 进到网页,加载两个接口 applyLoginFactor 接口返回一个RSA公钥&#xff0…

vulnhub zico2

总结:脏牛提权 目录 下载地址 漏洞分析 信息收集 木马上传 反弹shell 提权 下载地址 zico2.ova (Size: 828 MB)Download: https://www.dropbox.com/s/dhidaehguuhyv9a/zico2.ovaDownload (Mirror): https://download.vulnhub.com/zico/zico2.ova使用方法&…

机智的Open3D学习生活(第一集):入坑前的准备工作

1、Open3D的开源项目地址: https://github.com/isl-org/Open3D 2、Open3D的官网地址: http://www.open3d.org/ 3、Open3D的文档地址:http://www.open3d.org/docs/latest/tutorial/visualization/cpu_rendering.html 后续我将以此文档作为蓝…

如何单独清除某个网页的缓存(reload)

有时候在自己服务器上调试的时候,刷新一直不更新,样式改了也看不到,就很烦 今天教你一个方法快速清除 F12 控制台情况下右击左上角的刷新 这三个分别代表: ①正常重新加载(Ctrl R): 正常重新加载 此方法,浏览器发送请求时会…

深入Spring底层透析Bean创建过程之拨云见日篇

目录前言一.BeanFactory快速入门1. BeanFactory创建Bean2. BeanFactory和ApplicationContext的关系3. 和ApplicationContext区别(高频问点)4. BeanFactory的继承体系5. ApplicationContext的继承体系二.Bean实例化的基本流程(重点)前言 首先感谢您的阅览&#xff0…

Git复习

1. 引言 现在要用到Git,复习一下关于Git的指令,知识摘自《Pro Git》 2. 起步 git和其他版本控制软件最大的差别在于git是直接记录某个版本的快照,而不是逐渐地比较差异。 安装: sudo apt install git-all设置用户信息: git c…