提升:抛弃七条不良编码习惯

简介: 提升:抛弃七条不良编码习惯
很多人错误地认为编码只是熟练手的事情,其实要成为优秀的编码人员就必须进行自我剖析,抛弃不良的习惯,展示自己优秀的编码能力。通常不良的编码习惯有很多种,这里列出7条编码者经常会犯的错误,提醒大家注意。

(1)自由格式的代码如果我们不从一个团队角度出发,而是从程序员个体角度去看问题:A项目的风格和B项目的风格迥异,甚至是在同一个项目的不同类中风格也不同,不用缩进,不添加注释,想加接口就加个接口,不想加就不加,我们要的是“自由,自由,还是自由”。—这不是一个成熟的职业者应该具有的,我们应该保持自己的代码风格,即使它是错的,也比没有风格要好。

(2)不使用抽象的代码这也算是IDE的便利性造成的习惯,一个业务类不进行抽象,直接进行编码,在需要修改时,要么依靠IDE批量重构,要么通过查找替换的方式重构,很方便,不是吗?而且,随着SSH的普及,“无抽象”编程进一步横行起来。要接口何用?想要修改的时候直接修改XML配置文件就可以了,要什么接口!系统间数据交互?序列化为XML传递,与接口何干?!这是一种非常拙劣的习惯,抽象的意义不在于编码,而是在于对业务的理解,接口是对业务宏观的描述,而不是实现代码。

(3)彰显个性的代码技术人员追逐最新的技术,这本是无可厚非的,但是新技术只能作为技术的一个方向,不适合立刻投入生产中,要知道一个项目的运行质量是远远高于代码质量的,不要为了一个新颖的API就在生产中尝试使用,不要做小白鼠。这里介绍一个“最小惊诧原则”(Principle Of Least Surprise简称POLS,或者Principle Of Least Astonishment简称POLA),其意是说要使用最常见的,而不是最新颖的功能。在编码时,应寻找最常用的方法来实现,比如,同样有两个方法都能实现一个算法,选择那个最常用的,而不是那个别人一看就惊呼“哇哦,算法这么牛”的,让普通人都能看懂的代码才是最简洁的代码。最小惊诧原则也同样适用于UI设计,当操作界面上两个元素冲突或重叠时,首选是那个不让用户感到吃惊的元素。

(4)死代码可能是忘记删除的代码,也可能是故意保留的类似“到此一游”的签名代码,这些代码按照正常的执行逻辑是不可能被执行到,但是在某些未知情况下它就是执行了,此时就会产生严重的影响。

(5)冗余代码写了一个实现类,过了N天后又废弃了,之后这个类就永久地保留下去了,没人知道它为什么没被删除掉。甚至有时候竟然还能在生产机上寻找到测试程序的身影,它的生命力可谓顽强呀!估计如果有一天将生产机移植到月球上,这段代码可能还能存在。曾经遇到过一个项目,项目中建立了单元测试机制,但在生产代码中还能看到main方法,谓之“测试方便”—删除它,它不应该在这里!

(6)拒绝变化的代码哲学上说任何事物都是在运动着的,但是我们有些代码却不遵循这一个规律,一个在JDK 1.1中就过时的方法还还能在使用JDK 1.6项目中存在,谓之曰“没有坏,就不要去修它”—该重构它了,它没坏,但它赖以生存的环境已经变了!我甚至还遇到过一个新项目还准备使用一个5年前的工具包(此工具包已经经历了3次大的版本变更),谓之曰“好用,没有什么Bug”,但不要忘记了,环境在前进,我们不跟随就只能落单—不会有人陪着我们找Bug,不会有人去修正,不会有人去做性能优化,我们能做的就是孤军奋战了!

(7)自以为是的代码这是我们编码的最大忌讳,认为自己无所不能,编码不会出现任何错误,于是不编写测试代码,或者测试代码只是为了应付质量检查人员,那等待我们的恶果就是系统上线后彻夜彻夜地修复Bug—自己排除自己埋下的地雷。自以为是还表现在对产品或工具的选型上,相信自己编写的工具类,而不是开源工具,宁愿自己写序列化工具,也不选择kryo或protostuff;宁愿自己写日期处理工具,也不选择Joda或date4j;宁愿自己写批处理框架,也不选择Spring Batch,这样是不行的!—相信天外有天吧,更多更好的工具等待着你去发掘。

摘自:《改善JAVA程序的151个建议》

目录
相关文章
|
数据可视化 C++
msvc编译opencascade和vtk
1.opencascade源码 我下载的时候最新版本是7.7.0
434 0
|
Linux 网络安全 调度
DolphinScheduler 调度工作流报错 Host key verification failed.
DolphinScheduler调度任务失败,错误显示"Host key verification failed."。问题可能在于SSH免密登录配置失效或租户不存在于Linux系统中。解决方案:检查SSH配置并确保调度用户有管理员权限;确认DolphinScheduler租户与Linux用户对应。如果日志仅显示主机键验证失败,可能忽略了租户与操作系统用户的对应关系。创建具备管理员权限的新租户可解决。此外,当失败策略设为"继续"时,可能无法查看失败日志,建议使用"结束"策略。
401 0
|
存储 NoSQL 数据处理
探索MongoDB:灵活、高性能的NoSQL数据库解决方案与应用实践
探索MongoDB:灵活、高性能的NoSQL数据库解决方案与应用实践
523 1
|
小程序 JavaScript Java
就业|高校毕业生就业信息小程序|基于微信小程序的高校毕业生就业信息的设计与实现(源码+数据库+文档)
就业|高校毕业生就业信息小程序|基于微信小程序的高校毕业生就业信息的设计与实现(源码+数据库+文档)
258 2
|
JavaScript
Vue3基础(22)___vue3中使用$forceUpdate
本文介绍了在Vue 3中如何使用`$forceUpdate`来强制更新组件,通过`getCurrentInstance`方法获取到组件实例后调用。
1172 0
|
安全 算法 搜索推荐
Code For Better 谷歌开发者之声——Google Play
Code For Better 谷歌开发者之声——Google Play
493 0
Code For Better 谷歌开发者之声——Google Play
|
Java 数据库连接 mybatis
MyBatis中like的两种写法
MyBatis中like的两种写法
380 0
|
算法 测试技术
蓝桥杯VIP算法训练-轨道炮-看完秒懂的(c++map)
小明在玩一款战争游戏。地图上一共有 N 个敌方单位,可以看作 2D 平面上的点。其中第 i 个单位在 0 时刻的位置是 (Xi, Yi),方向是 Di (上下左右之一, 用’U’/’D’/’L’/’R’ 表示),速度是 Vi。小明的武器是轨道炮,只能使用一次,不过杀伤力巨大。小明可以选择在某个非负整数时刻释放轨道炮,轨道炮一次可以消灭在一条直线 (平行于坐标轴) 上的所有敌方单位。请你计算小明最多能消灭多少敌方单位。
|
分布式计算 Spark 索引
如何提高ElasticSearch 索引速度
这篇文章会讲述优化的几个参数的原理,以及一些其他的思路。
3394 0
|
11天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1230 5