前任写的代码,真的垃圾啊



点击上方蓝色字体,关注我们



  



我的那些二手代码...



+




 

工作几年下来,开阔了一些眼界,也积累了不少行业经验,自己参与开发的一些产品目前已经稳定运行在数万台设备上面。几年的心血还是没有白费滴,只不过在这个过程里面,数次接手了前任们的代码,一度在各种深坑中,难见天日,真是各种名副其实的"屎山"......  直到业务需求逐渐趋向稳定后,我也开始逐渐考虑一些新的问题。首当其冲的就是关于好代码和坏代码的思考。

在与人交流、讨论代码的质量时,听到的最多的评语就是:“代码写得很烂”或者“代码写得很好”。用“好”“烂”这样的字眼来描述,非常地笼统。当我具体问到底如何烂、如何好的时候,大部分小伙伴都能罗列上几个点,但往往都不够全面、非常零碎,也切不中要害。

代码质量的一些客观标准



+



当然,也有一些工程师对如何评价代码质量有所认识,比如,好代码是易扩展、易读、简单、易维护的等等,但他们对于这些评价的理解往往只停留在表面概念上,对于诸多更深入的问题,比如,“怎么才算可读性好?什么样的代码才算易扩展、易维护?可读、可扩展与可维护之间有什么关系?可维护中‘维护’两字该如何理解?”等等,并没有太清晰的认识。对于程序员来说,辨别代码写得“好”还是“烂”,是一个非常重要的能力。

这也是我们写出好代码的前提。毕竟,如果我们连什么是好代码、什么是烂代码,都分辨不清,又谈何写出好代码呢?所以,今天我们就聊一聊关于代码质量评判的相关问题,希望你看完文章之后,对代码质量的评判有个更加清晰、更加透彻的认识和理解。

如何评价代码质量的高低?实际上,咱们平时嘴中常说的“好”和“烂”,是对代码质量的一种描述。“好”笼统地表示代码质量高,“烂”笼统地表示代码质量低。对于代码质量的描述,除了“好”“烂”这样比较简单粗暴的描述方式之外,我们也经常会听到很多其他的描述方式。这些描述方法语义更丰富、更专业、更细化。我搜集整理了一下,罗列在了下面。这些几乎涵盖我们所能听到的描述代码质量的所有常用词汇,你可以看一看。

灵活性(flexibility)、可扩展性(extensibility)、可维护性(maintainability)、
可读性(readability)、可理解性(understandability)、易修改性(changeability)、
可复用(reusability)、可测试性(testability)、模块化(modularity)、
高内聚低耦合(high cohesion loose coupling)、高效(high effciency)、高性能(high performance)、安全性(security)、
兼容性(compatibility)、易用性(usability)、整洁(clean)、
清晰(clarity)、简单(simple)、直接(straightforward)、少即是多(less code is more)、文档详尽(well-documented)、
分层清晰(well-layered)、正确性(correctness、bug free)、
健壮性(robustness)、鲁棒性(robustness)、可用性(reliability)、可伸缩性(scalability)、
稳定性(stability)、优雅(elegant)、好(good)、坏(bad)……

看到如此多的描述词,你可能要问了,我们到底该用哪些词来描述一段代码的质量呢?

实际上,我们很难通过其中的某个或者某几个词汇来全面地评价代码质量。因为这些词汇都是从不同维度来说的。这就好比,对于一个人的评价,我们需要综合各个方面来给出,比如性格、相貌、能力、财富等等。

代码质量高低也是一个综合各种因素得到的结论。我们并不能通过单一的维度去评价一段代码写的好坏。比如,即使一段代码的可扩展性很好,但可读性很差,那我们也不能说这段代码质量高。

除此之外,不同的评价维度也并不是完全独立的,有些是具有包含关系、重叠关系或者可以互相影响的。比如,代码的可读性好、可扩展性好,就意味着代码的可维护性好。而且,各种评价维度也不是非黑即白的。比如,我们不能简单地将代码分为可读与不可读。如果用数字来量化代码的可读性的话,它应该是一个连续的区间值,而非 0、1 这样的离散值。

不过,我们真的可以客观地量化一段代码质量的高低吗?答案是否定的。对一段代码的质量评价,常常有很强的主观性。比如,怎么样的代码才算可读性好,每个人的评判标准都不大一样。这就好比我们去评价一本小说写得是否精彩,本身就是一个很难量化的、非常主观的事情。正是因为代码质量评价的主观性,使得这种主观评价的准确度,跟工程师自身经验有极大的关系。越是有经验的工程师,给出的评价也就越准确。相反,资历比较浅的工程师就常常会觉得,没有一个可执行的客观的评价标准作为参考,很难准确地判断一段代码写得好与坏。

说着说着又要熬夜了,为了发际线还是先睡了有兴趣的各位,可以先看一下我的设计模式系列文章。至于更炫的写代码套路,有空再继续分享。拜


——The  End——



手把手教你,拿下观察者模式|c语言!


c语言,去你的策略模式!


c语言设计模式--状态模式(状态机)


c语言设计模式--补充面向对象基础



扫描二维码

获取更多精彩

just enjoy!