究竟怎样写代码才算是好代码

小程故事多_80 小程故事多_80     2022-08-05     575

关键词:

今天让我们来谈谈代码吧。代码重要吗?当然,代码就是设计(Jack W.Reeves, 1992);代码是最有价值的交付物。我们需要好代码吗?在给“好代码”下个定义之前,这个问题无法回答。那么,究竟什么是好代码?

看下面这段英文解释:

‘Good code’ is code that works, is bug free, and is readable and maintainable. Some organizations have coding ‘standards’ that all developers are supposed to adhere to, but everyone has different ideas about what’s best, or what is too many or too few rules. There are also various theories and metrics, such as McCabe Complexity metrics. It should be kept in mind that excessive use of standards and rules can stifle productivity and creativity. ‘Peer reviews’, ‘buddy checks’ code analysis tools, etc. can be used to check for problems and enforce standards.

解释如下:

好的代码是代码运行正常、bug很少、并且具有可读性和可维护性。一些企业自己有所有开发人员都必需遵守的编码规范,但是对于什么样的代码是最好的每个人的都有自己的标准、或者有太多的或太少的编码规则。这有多种原则和标准,例如,McCable 的复杂度度量。的确使用过多的编码标准和规则可能降低生产率和创造性。“同行评审”或“同事检查”代码分析工具等,都能用来检查问题或坚持标准。

那么接下来我们深入介绍下,什么是好代码的标准呢,请看下面解释:

一、代码命名规范:

1、 package包名全部由小写的ASCII字母组成,用“.”分隔。在此项目中,所有的包均以“com.abc.ticket”开头。

2、 class 类名应当是名词,每个内部单词的头一个字母大写。应当使你的类名简单和具有说明性。用完整的英语单词或约定俗成的简写命名类名。
【示例】public class UserManager

3、 interface接口名应当是名词,每个内部单词的头一个字母大写。应当使你的接口名简单和具有说明性。用完整的英语单词或约定俗成的简写命名接口名。
【示例】interface TicketManagement

4、 Class 成员属性及变量的命名 (*) 变量名全部由字母组成,头一个字母小写,以后每个内部单词的头一个字母大写。变量名应该短而有意义。变量名的选择应该易于记忆。一个字符的变量名应避免,除非用于临时变量。通常临时变量名的命名规则为:i,j,k,m,n用于整数;c,d,e用于字符。

5、常量的命名,Java 里的常量,是用static final 修饰的,应该用全大写加下划线命名,并且尽量指出完整含义。
【示例】static final String SMTH_BBS=”bbs.tsinghua.edu.cn”; 

6、数组的命名,数组应该总是用下面的形式来命名:byte[] buffer; 

7、方法的参数和变量的命名规范一致,且应使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字。
【示例】setCounter(int size){ this.size = size; } 

8、 方法命名(*)方法的命名应当使用动词,头一个字母小写,以后每个内部单词的头一个字母大写。在方法名的选择上应意义明确便于记忆。对于属性的存取方法,应使用getXXX()和setXXX()名称,以isXXX(),hasXXX()来命名返回值为boolean 类型的方法。

以上几条如果符合就算是好代码了吗?当然不是,这只是代码中最基本的命名规范而已,就算不符合最多就是代码不好看,没什么其他影响。

二、代码逻辑规范

1、需求、设计中的重点功能(结合需求/设计的评审产出)

2、代码格式校验
action/façade等系统入口是否有数据格式校验
需要存入数据库的数据字段是否有长度校验

3、分支/循环
if-else/switch是否处理了所有分支
分支的条件语句是否有“副作用”;即,条件语句是否会改变系统状态/数据等
循环边界是否覆盖了所有元素
是否有死循环等

4、异常处理
是否有“吃掉异常”的情况
是否记录了异常日志
如果二次抛出,是否有合理的异常层次/结构
如果内部处理,对异常的处理是否能保证后续代码正常运行

5、单元测试
是否有单元测试
单元测试是否自动化
单元测试是否能完整覆盖需求

6、 事务处理
事务范围是否合理;或者说,是否把不必要的操作放到了同一个事务中
事务传播方式是否合理(required,never,new等配置)

7、sql语句
sql语句是否正确
使用mybatis的动态语句时,是否有潜在的sql语法问题

8、第三方组件
使用Redis,RabbitMQ等组件,是否真的对组件完全了解,在使用的过程中是否正确执行了开启与关闭操作。

写到这里,可能会有不少读者认为,代码规范也就这些了吧,按照上面二类写完算是优秀的代码了吗?其实还是远远不够。

三、可读性,可维护性

曾经看过一段代码,一个method几千行代码,所有业务逻辑都揉在了一起。然后没有人愿意再维护了,修改一点就会引发不可预知的错误,代码又臭又长。在这种情况只能重构,于是我在部门内部推广二本书《代码整洁之道》和《重构-改善既有代码的设计》并且制订部门自己的开发风格,通过组织所有开发人员练习小项目的开发,使整个部门的开发风格整齐划一,不管是老同事还是新同事,都能够非常快速的上手,程序中依赖度降低,结构非常清晰。

四、性能瓶颈

在真实工作中,很多程序员其实在开发完程序后不去真正关注程序的性能和响应时间到底如何,凭的是以往开发经验在开发的过程中尽可能的去减少问题点。

这样就只能在生产环境中去验证性能问题了,实际这种做法风险较大,所带来的损失也是较大的,我们在开发完程序后,不仅要采用Junit或者JMock这样的工具进行业务功能自测,更重要是能够采用相应的工具和命令进行代码性能和响应时间的测试,在第一关就能够找出可能出现的一部分问题点,那么经常使用的工具和命令如下:
top,vmstat,pidstat,Hprof,Btrace,Dtrace等命令。

具体可以参考我以前写过的文章二篇:
http://blog.csdn.net/u013970991/article/details/52035153
http://blog.csdn.net/u013970991/article/details/52035133

五、代码容错

  • 曾经有一个案例:
    X同事在“统一配置管理系统“中将一个参数配置在里面,当参数进行修改的时候相应的程序会马上做出改变进行相应逻辑调整,可是另一个A同事在操作这个系统的时候配错了参数,这时候系统在生产环境中就开始报错,以致于应用程序崩溃,逻辑无法进行下去造成较严重的生产事故,最后恢复完参数故障时间已经进行了十几分钟。针对这个问题当时产生了争论,到底是配置人员的错,还是开发人员的错。

其实在我看来,到底是谁的问题暂且放在一边,关键是开发人员是否在写程序的过程中有没有多一丝的思考,多考虑一些问题点,程序员要时刻怀着一颗怀疑的心和敬畏的心对待自己写的程序,像上面的问题我们完全可以做一些异常捕获和默认设置,在出错的时候至少能够让应用程序跑下去而不能整体报错,让用户无法继续使用。

  • 再说一个案例:
    某部门在开发“统一配置管理系统”,使用的是Zookeeper组件,而且它的工作原理是当某节点改变的时候,主动去通知所注册的系统,但是有个前提是如果那些系统,有一部分没有得到通知,有一部分得到了通知该怎么办,比如某几个系统在通知的时候正好在重启,这时候zookeeper就不能通知到相应的系统,于是在使用该“统一配置管理系统”的时候,出了生产事故。

其实还应该再重复说一下,程序员应该持有怀疑的精神面对调用的系统和被调用的系统,不要把稳定、安全、可靠寄托于别人身上。

究竟怎样写代码才能算好代码?这是一个有争议的话题,每个人的理解可能都不同,关键是通过讨论这个话题制订一个符合自己部门要求的规范,这样有依据的代码才可能成为好的代码。

“整洁可用”的代码才算是好代码

之前有人问我,什么样的代码才算是好代码?一时语塞,百度后,我觉得这个是我觉得我想要的结果,来源https://wenku.baidu.com/view/8646287bf56527d3240c844769eae009581ba2e8.html  查看详情

祖坟风水怎么看怎样的祖坟才算是好风水

...https://p3.pstatp.com/large/141c00003e85e9d4fd2a"alt="祖坟风水怎么看怎样的祖坟才算是好风水"style="border:0px;margin:1emauto;"/>祖坟风水上一篇文章我们已经告诉大家祖坟风水对于后代运势的重要影响。那么这一篇就告诉大家如何判断自己家祖... 查看详情

架构师速成6.9-怎样写好代码

...读的赏心悦目,为什么人与人之间的差距这么大呢?看来怎样写好代码还是一件非常值得一说的事情。关键思想:人写代码是用来给别人读的,而不是给机器运行的。写代码就应该像写小说一样,让人读的轻松愉快。软件的... 查看详情

怎样才算彻底搞懂一个算法代码

...一个软件的核心技术。比如有一个现成的算法代码,怎样才算彻底搞懂它?有哪些评价标准?我想到了四点:1.应用层次  应用层次就是你知道算法的功能是什么,输 查看详情

怎样才能写出规范的好代码?

本文收录于JavaStarter,里面有我完整的Java系列文章,学习或面试都可以看看(一)前言最近发现一件事情,自己写的代码和公司里工作5到10年的前辈写的代码虽然功能一样,但是他们的代码更规范,更... 查看详情

什么样的代码才是好代码

  衡量代码的好坏的指标或者维度有很多,比如性能好、架构好、高内聚等,这些指标的侧重点各不相同,不同的开发人员的关注的重点也各不相同。我个人更喜欢简单的可读性高的代码,我主要从以下几个维度衡量代码是否... 查看详情

什么才是好代码高质量代码?(代码片段)

...起掌握更多数据库知识     ​虽然刚毕业的同学对于代码质量都很用心,但最终呈现出来的质量仍然没能达到“十分优秀”的程度。究其原因,主要是不了解好的代码“应该”是什么样的。什么是好代码写代码的第一... 查看详情

什么才是好代码高质量代码?(代码片段)

...起掌握更多数据库知识     ​虽然刚毕业的同学对于代码质量都很用心,但最终呈现出来的质量仍然没能达到“十分优秀”的程度。究其原因,主要是不了解好的代码“应该”是什么样的。什么是好代码写代码的第一... 查看详情

djangoadmin注册model究竟要怎么写才优雅批量注册model

比如在Djangoadmin注册models时,会用到。对于APP里自带的models,可以使用这种方式注册。fromdjango.contribimportadmin#Registeryourmodelshere.fromdjango.appsimportappsfromdjango.contrib.admin.sitesimportAlreadyRegistered#获取app:api下所有的model得到一个生成器app_... 查看详情

究竟为什么写技术博客?

本来嘛,写作只是对自己技术的总结和反思,顺便分享给好学习的同学们、一起成长。但当你发现自己的原创逐渐沦为别人的原创的时候,不知道是一种怎样的纠结。当然,你可以无所谓,可是谁又能一直保持无所谓的状态呢?... 查看详情

怎么样的制度才算是好制度

  制度的目的是解决问题,或者缓解问题。  大部分人追求的都是绝对的平等,而绝对的平等就是物尽其用,人尽其责。  共产主义,最终目的就是实现绝对的平等。它要求的是每个人都尽职尽责,但是创造出来的结果,... 查看详情

teamleader究竟要不要写代码?

今天浏览Medium,看到一篇直接喊出「技术负责人,请停止写代码」的文章,晚间和家属一起坐火车,不禁一起围绕着这个话题进行了一番讨论。文章中说到,成为一个TeamLeader最难的是要明白「你不再是一个真... 查看详情

teamleader究竟要不要写代码?

今天浏览Medium,看到一篇直接喊出「技术负责人,请停止写代码」的文章,晚间和家属一起坐火车,不禁一起围绕着这个话题进行了一番讨论。文章中说到,成为一个TeamLeader最难的是要明白「你不再是一个真... 查看详情

代码精进之路——如何写好代码(代码片段)

如何才能写好代码呢?我们可以从代码规范、起好名字、写好注释以及合理划分代码块等反面优化自己的代码。代码规范编码规范指的是针对特定编程语言约定的一系列规则,通常包括文件组织、缩进、注释、声明、语句、空格... 查看详情

专家x抽象x类比(代码片段)

...前,我一直对于“专家”这一词有大量的困惑。到底怎样才是专家?怎样才算是技术专家?社交媒体上所谓的“技术专家”,在某方面(如编程)上的实力一般,也算是专家吗?过去,我并没有... 查看详情

第4节排序实战(代码片段)

1、为什么要实战?曾经有人问我,你写代码又快又好,是怎么学的呀?其实我的水平也才一般般的啦,之所以能把程序写出来,只有多练习。看别人的算法,很快就看完了,但往往看完就忘记了,只有自己亲自写一遍,调试运... 查看详情

做java软件工程师,怎样才能写出好的代码?

参考技术AJava代码之于java程序员而言就是左膀右臂,java代码写的好的java程序员明显更是企业的欢迎,一个优秀的java程序员的考核标准之一也是看他的编程水平。其实有的java程序员java代码会受到大家的追捧,是因为他在写代码... 查看详情

豆瓣9.1分,这本书会大大提升很多开发者的python编程能力

...。那么——好代码有哪些要素?话说回来,到底怎样的代码才算是好代码?在这方面,MartinFowler有一句话常被大家引用:“Anyfoolcanwritecodethatacomputercanunderstand.Goodprogrammerswritecodethathumanscanunderstand.”“任何傻瓜... 查看详情