14个提高代码质量的好问题

2023-11-09

阅读本文大概需要 2.6 分钟。

并不是代码写的越多,代码的质量就越高。思考才是。

解决一个问题,打开电脑就手撕代码,最终的结果往往是各种代码问题,经过一系列迭代后,代码积重难返,最终的结果就是推到重来,前期的付出都白费,最典型的就是现在所谓的敏捷,听起来高大上,实际落地其实就是加班,因为没有时间思考。

现在的很多公司已经不尊重科学和客观规律了,如果让他来管理孕妇,我觉得他们恨不得要把 10 个月的产期缩短成 2 个月。

程序员应该坚持自己的良质,不能因为产品经理或老板而改变一些非常好的做事方法,很多问题都是可以通过沟通解决的,面对复杂的需求工期又特别短,不妨听下陈皓老师(网名:左耳朵耗子)的方法:不要说不,而是给对方选择:

1、我可以加班加点完成,但是我不保证好的质量,有 bug 你得认,而且事后你要给我 1 个月的时间还债。

2、我可以加班加点,还能保证质量,但我没办法完成这么多需求,能不能减少一些?

3、我可以保质保量地完成所有的需求,但是,能不能多给我 2 周时间?

看到这里,我想你也一定会认为:除了编程,沟通也是一门艺术。

这两天学到了王争的专栏《设计模式之美》,其中提到的如何发现代码质量问题,可以从以下几个方面审视代码:

  1. 目录设置是否合理、模块划分是否清晰、代码结构是否满足“高内聚、松耦合”?

  2. 是否遵循经典的设计原则和设计思想(SOLID、DRY、KISS、YAGNI、LOD 等)?

  3. 设计模式是否应用得当?是否有过度设计?

  4. 代码是否容易扩展?如果要添加新功能,是否容易实现?

  5. 代码是否可以复用?是否可以复用已有的项目代码或类库?是否有重复造轮子?

  6. 代码是否容易测试?单元测试是否全面覆盖了各种正常和异常的情况?

  7. 代码是否易读?是否符合编码规范(比如命名和注释是否恰当、代码风格是否一致等)?

以上是一些通用的关注点,可以作为常规检查项,套用在任何代码的重构上。除此之外,我们还要关注代码实现是否满足业务本身特有的功能和非功能需求。还有一些比较有共性的问题,如下所示。

  1. 代码是否实现了预期的业务需求?

  2. 逻辑是否正确?是否处理了各种异常情况?

  3. 日志打印是否得当?是否方便 debug 排查问题?

  4. 接口是否易用?是否支持幂等、事务等?

  5. 代码是否存在并发问题?是否线程安全?

  6. 性能是否有优化空间,比如,SQL、算法是否可以优化?

  7. 是否有安全漏洞?比如输入输出校验是否全面?

当看到这些时,我只觉得醍醐灌顶,写代码并不难,难的是写出好代码,什么是好代码,质量高的代码?以上 14 条问题给我们指明了方向。

以上共 14 个方面值得打印出来贴在桌子上,作为我们日常写代码的一个提示,解决这些问题过程虽然耗时,假以时日,我们一定可以写出非常优秀的代码,成为优秀的工程师。

推荐阅读:

在Python中如何基于接口编程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

14个提高代码质量的好问题 的相关文章

  • 最言简意赅的strftime和strptime区分方式

    最近时常处理金融数据 最绕不过的就是对各种日期格式进行处理 其中用得最多的就是striptime和striftime 之前每用一次都得查一下用法 这次干脆完全弄清楚然后记下来 以下是最言简意赅的区分方式 strptime 将字符串转换为日期
  • 某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?

    转载 最近网上出现一个美团面试题 一个线程OOM后 其他线程还能运行吗 我看网上出现了很多不靠谱的答案 这道题其实很有难度 涉及的知识点有jvm内存分配 作用域 gc等 不是简单的是与否的问题 由于题目中给出的OOM java中OOM又分很
  • 谭铁牛院士:向生物学习 开启模式识别新突破

    人们在观察事物或现象的时候 常常要把各个相似的但又不完全相同的事物或现象组成一类 例如一个数字有不同的写法 对一个人来说 某一种写法虽然没有见过 但大脑却能自动将这个字识别出来 这种模式识别行为虽然人们早已司空见惯 在中国科学院院士谭铁牛看
  • 前端学习历程

    前言 还记得刚接触前端应该是两年前了吧 我就顺着回忆 慢慢写下我对前端的学习路程以及一些资源 初入坑 html css基础 这个是学习前端最基础的部分了 一开始看的是W3cschool 先看其中的html和css基础部分 一些常用标签 以及
  • Python常用的第三方库汇总【推荐】

    Python常用的第三方库汇总 pymysql 操作MySQL数据库 Flask 一个 Python 后端开发的微型框架 numpy 进行科学计算所需的基础包 pillow 非常好用的图像处理库 opencv python 图像处理库 Ma
  • google扫码库barcode-scanning的使用

    一 加入barcode scanning库 捆绑模式扫码 implementation com google mlkit barcode scanning 17 1 0 二 编写扫码分析类 用于分析扫码数据并回调方法返回结果 package
  • DuiLib使用教程之二---测试工程

    DuiLib测试工程 以下内容为原创 欢迎转载 转载请注明 来自试着不呼吸的博客 http blog csdn net haiqiang softwo article details 21485283 通过上节 http blog csdn
  • 短视频APP是如何开启你的美好生活的?

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由腾讯视频云终端团队发表于云 社区专栏 常青 2008 年毕业加入腾讯 一直从事客户端研发相关工作 先后参与过 PC QQ 手机QQ QQ物联 等产品项目 目前在腾讯视频云团队负
  • 多态和虚函数的基本概念和用法

    C 多态 多态按字面的意思就是多种形态 当类之间存在层次结构 并且类之间是通过继承关联时 就会用到多态 C 多态意味着调用成员函数时 会根据调用函数的对象的类型来执行不同的函数 多态的优点 代码组织结构清晰 可读性强 利于前期和后期的扩展以
  • steam++加速问题:出现显示443端口被 vmware-hostd(9860)占用的错误。

    前言 时不可以苟遇 道不可以虚行 今天的的前言诗句特地百度搜索了一下 诗句大概的意思是 时机是不可能随便就能遇到的 道路也要一步一步踏实地行走 象征着好运的诗句 之所以特地去找这样意思的诗句 主要的原因是 今天就是四六级考试 想给自己带来一
  • 利用Python(netCDF4库)读取.nc文件(NetCDF气象数据文件)的基本操作

    NetCDF network Common Data Form 网络通用数据格式是一种面向数组型并适于网络共享的数据的描述和编码标准 目前 NetCDF广泛应用于大气科学 水文 海洋学 环境模拟 地球物理等诸多领域 用户可以借助多种方式方便
  • LeetCode--初级算法--字符串类算法

    反转字符串 题目 编写一个函数 其作用是将输入的字符串反转过来 示例 1 输入 hello 输出 olleh 示例 2 输入 A man a plan a canal Panama 输出 amanaP lanac a nalp a nam
  • flask配置https协议

    感谢https blog csdn net qq 33934427 article details 127456673 文中多有参考再实践 一 要用https协议需要有ca证书 在windows10先下载windows版本openssl 地
  • uni-app (路由)

    介绍 uni app页面路由为框架统一管理 开发者需要在pages json里配置每个路由页面的路径和页面样式 类似的小程序在app json中配置页面路由相同 所以uni app的路由用法与Vue Router不同 如仍希望采用Vue R
  • Android12及所有版本解决没有system读写权限(只需要magisk面具)

    通过magisk挂载文件的方式来修改system 不用解锁system或挂载读写 前提条件 你要确保你已经正确刷入了Magisk 刷面具保姆级别教程 举一反三 多种手机通用 这个方法实际上就相当于刷模块来达到修改的目的 本文只是给小白普及一
  • 时间同步服务chrony的简单配置

    一 chrony服务器的简介 chrony是一个开源自由的网络时间协议 NTP 的客户端和服务器软软件 它能让计算机保持系统时钟与时钟服务器 NTP 同步 因此让你的计算机保持精确的时间 Chrony也可以作为服务端软件为其他计算机提供时间
  • vue-router安装失败

    当安装vue router遇到以下问题 npm ERR code ERESOLVE npm ERR ERESOLVE unable to resolve dependency tree npm ERR npm ERR While resol
  • 食品PC端的轮播图的文字和图片怎么修改

  • C# Winform 窗体传值 利用委托 子窗体传值给父窗体

    常用的Winform窗体传值有两种方式 1 更改Form designer cs文件 将控件的设为Public 供子窗体访问 在designer cs文件的最后 找到你的控件声明 private System Windows Forms T
  • Qt程序打包发布方法(使用官方提供的windeployqt工具)

    Qt程序打包发布方法 使用官方提供的windeployqt工具 Qt 官方开发环境使用的动态链接库方式 在发布生成的exe程序时 需要复制一大堆 dll 如果自己去复制dll 很可能丢三落四 导致exe在别的电脑里无法正常运行 因此 Qt

随机推荐

  • 深入浅出理解视频编码H264结构(内涵福利)

    转自 https www jianshu com p 9522c4a7818d 在国内直播 欣欣向荣 ps 其实大多都亏钱 为的就是炒概念 的年代 相信很多小伙伴也投入了技术的浩瀚大洋当中 ps 其实就是搬砖 日复一日 音 视频的神秘面纱开
  • 区块链100篇之将fabric部署在k8s上

    有了上一篇的基础 这一篇就尝试将fabric部署在k8s上 以下的操作的前提条件是自己已经对docker compose部署fabric比较熟悉了 可以先搞清楚fabricase目录下的fabric raft项目 1 修改DNS 在真正开始
  • DS证据理论浅析

    在DS证据理论中 由互不相容的基本命题 假定 组成的完备集合称为识别框架 表示对某一问题的所有可能答案 但其中只有一个答案是正确的 该框架的子集称为命题 分配给各命题的信任程度称为基本概率分配 BPA 也称m函数 M A 为对A的信任程度大
  • 绿源电动车通过聆讯:​年营收48亿 为倪捷与胡继红家族企业

    雷递网 雷建平 9月20日 绿源集团控股 开曼 有限公司 简称 绿源电动车 日前通过聆讯 准备在香港上市 这意味着时隔近一年后 绿源电动车终于拿到了上市的钥匙 年营收47 8亿 绿源电动车创建于1997年 总部位于浙江金华 绿源产品涵盖电动
  • matlab数学建模-神经网络:测试不同隐藏层神经元的个数、更改学习函数

    目录 通过误差 和训练步数对比 确定隐含层个数 并检验隐含层个数对性能的影响 1 trainlm 算法 2 traingdm 算法 3 trainrp 算法 4 traingdx 算法 5 traincgf 算法 通过误差 和训练步数对比
  • python django设计流水号生成,带访问加锁,重试

    python django设计流水号生成 带访问加锁 重试 老规矩 技术发于业务 努力从于项目 1 设计一个流水号配置表如下 流水号配置表 class BaseSerialNum BaseModel serial type models C
  • IO性能相关

    1 IO性能解决方案整理 网卡性能优化方案 绑定中断 至特定CPU 减少接口属性设置 数据包打入CPU标签 提升缓存命中 磁盘随机读写优化方案 批量读写 寻道更快 转速更高的硬盘 内存作为缓存 SSD RAID 磁盘顺序读写优化方案 RAI
  • javascript 简单高效判断数据类型 系列函数 By shawl.qiu

    javascript 简单高效判断数据类型 系列函数 By shawl qiu 说明 前段时间把 ASP VBScript 掌握得差不多的时候 就转而学习 Javascript Jscript 主要是学 Jscript 啦 不过这两者基本上
  • spring事件广播机制

    打个比方 当我们和其他公司进行业务接口对接时 我们这边需要保存或者修改某些数据 但是保存和修改这些数据对整个流程没有太大的影响 这个时候我们应该怎么做呢 是的 我们要考虑异步去保存或者修改数据 但怎么去异步保存数据呢 这个时候我们就可以使用
  • 3.5 编写一个程序,从标准输入读入某职员的工作时间(以小时计)和每小时的工资 数,计算并输出他的工资。若职员月工作时间超过 40 小时,则超过部分按原工资的 1.5 倍 来计算。

    3 5 编写一个程序 从标准输入读入某职员的工作时间 以小时计 和每小时的工资 数 计算并输出他的工资 若职员月工作时间超过 40 小时 则超过部分按原工资的 1 5 倍 来计算 include
  • git push --force

    一 force命令 如果git要强制覆盖 那么可以使用 force命令 git push force origin 二 参考资料 1 阮一峰 Git远程操作详解
  • Java操作excel之POI和easyExcel 教程详解 狂神笔记

    文章目录 1 应用场景 2 Apache POI 简介 项目准备 代码演示 大文件写HSSF 03 大文件写XSSF 07 大文件写SXSSF 07升级版 POI Excel读 3 easyExcel 简介 项目准备 EasyExcel写入
  • 宝塔php7.0shell,BT_Panel 宝塔开心面板/V7.0.1开心版

    脚本简介 本次面板版本 7 0 1 本脚本支持一键安装开心版宝塔面板 以及 已经安装宝塔面板升级开心版 感谢大家使用 书记的脚本 本脚本未加密 有没有后门大家自己看就知道了 如果你使用了类似 书记的脚 出现问题 以及 脚本地址非本人的 或者
  • 金碟生产相关表

    生产订单表 SELECT FInterID from AIS20151222141907 dbo ICMO where left convert varchar FPlanCommitDate 120 10 gt 2020 08 01 an
  • Bridge桥接模式

    作用 将抽象部份与它的实现部份分离 使它们都可以独立地变化 将抽象 Abstraction 与实现 Implementation 分离 使得二者可以独立地变化 桥接模式号称设计模式中最难理解的模式之一 关键就是这个抽象和实现的分离非常让人奇
  • JVM基础知识

    目录 1 前言 2 JVM运行流程 3 JVM运行时数据区 4 JVM类加载 5 有关垃圾回收 1 前言 本文只是针对面试中比较常见的有关JVM的问题做出补充 俗称八股文 同时帮助大家对JVM建立一个感性的认识 所以并不会对JVM有过多的深
  • [原]Qt Designer中自定义控件的使用(提升法与插件法)

    准备乱写一点Qt自定义Widget在Designer中的使用 可是又不想重复提升法 promotion 及插件法基本用法 因为Manual中Using Custom Widgets with Qt Designer已经说的很清楚了 使用de
  • 解决:Jetson系列python3 import 报错 “Illegal instruction core dumped “

    解决 Jetson系列python3 import 报错 Illegal instruction cpre dumped 解决方法 解决方法 编辑环境变量 sudo gedit bashrc 在最后一行添加 export OPENBLAS
  • mongod: error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared object file:

    mongod error while loading shared libraries libcrypto so 1 0 0 cannot open shared object file No such file or directory
  • 14个提高代码质量的好问题

    阅读本文大概需要 2 6 分钟 并不是代码写的越多 代码的质量就越高 思考才是 解决一个问题 打开电脑就手撕代码 最终的结果往往是各种代码问题 经过一系列迭代后 代码积重难返 最终的结果就是推到重来 前期的付出都白费 最典型的就是现在所谓的