代码可读性,顾名思义,代码首先是给人看的,其次才是在电脑上运行的。然而我们经常听到这样的论调,代码能运行就不要动,你和代码之间有一个能“跑”就行。

随着业务的变化,“遗产”代码不断堆积,越来越重,越来越不可撼动,沉重的软件系统必然会限制业务的发展或者走向崩溃。

虽然很多软件研发团队都有自己的代码规范,马丁·福勒(Martin Fowler)的《重构,改善既有代码的设计》在减少代码“臭味道”方面为我们提供许多重要的原则和方法。然而我们知道有些规范并没有起到应有的作用,一些似是而非的规范甚至带来了更多的负作用。

在AI低代码开发中,有一个问题是需要澄清的,AI大模型既然能够生成代码,并且还可以解读代码,自动为代码注释,那么还需要代码的可读性吗?事实上,正因为AI的强大能力我们才更加需要代码的可读性。

在编程的粒度中,AI在那一层粒度上生成的代码是需要控制的,如果粒度过细错误的概率就会大幅增加,同时也会增加程序员审查的工作,而且在现阶段AI生成代码的质量是难以保证的。

另外,对于软件系统,架构的重要性不言而喻,目前AI还缺少有效的架构能力,同时在AI代码的基础上,程序员还要进行快速的敏捷迭代才能真正实现满足用户的功能。

因此无论是AI生成的代码还是程序员实现的代码都要满足可读性的要求。

第一是变量的命名。

命名是代码编写的一个基本问题,可以说编程的过程就是变量命名的过程,为了代码的可读性采用准确表达意思的单词在英语环境下是非常自然的,但是这在非英语母语的国家却是一个挑战。

以我们中文为例,不少程序员的英语水平都非常有限,利用翻译工具往往词不达意,而用拼音更是如同天书,还有不少是拼音英文混合,更是奇奇怪怪。还有很多人总是纠结于命名的格式,大小写,驼峰命名等,然而这些对于代码的可读性并没有太大的作用。

事实上,目前绝大多数的编译器都支持utf-8,也就是支持英文以外的语言编码,所以我们建议直接用中文汉字命名,配合简单的英文,直观清晰,既符合我们的阅读习惯,也方便录入。

在这个问题上,一定会引起许多资深程序员的反对,最常见的理由就是不稳定,会引起不确定性的错误,然而我们在C++、C#、Java、JavaScript等语言中尝试,并没有引起不确定性的问题,遇到最多只是编码问题,而且很容易解决。

我们经过充分的实践证明,在可控的开发环境中,采用中文命名并不会出现不确定性的问题,反而会极大提高代码的可读性,提高程序员的效率。

第二是代码的注释。

代码注释是对代码行或者是代码函数的说明。良好的代码注释确实有助于代码的阅读,但是过高的注释率反而会影响代码的可读性。还有一个问题就是,注释非常容易跟随代码复制和粘贴,而在修改代码的时候没有同步修改注释,成为垃圾注释。

其实最好的注释是代码的自注释,即代码本身就具有良好的阅读性。如果代码具有清晰的结构,准确的命名以及合理的设计,但从代码本身就可以猜测其主要的功能,这样的代码就是自注释的。另外我们对代码的理解更希望是从整体架构层面,对应其需求、分析和设计进行理解。

因此我们提出代码标注的概念,即对代码块或者代码文件进行整体注释,类似于Word文档中的“审阅”功能,将系统的分析设计模型与具体的代码对应,这样就可以更好地了解代码,有利于代码的审查和交接。

第三是设计的模式。

一个合理的设计模式可以简化代码实现,从更高的维度上增加代码的可读性。在“四人组”GoF编写的《设计模式》一书中列举了23种常用的设计模式,同时也提出了许多重要的设计指导原则。如MVC架构就是一个非常经典的设计模式,被许多编程框架所使用。但设计模式的滥用往往也会导致软件复杂度的增加和可读性的降低。

优秀的设计需要丰富的经验和对需求的洞察,能够预测业务的变化提前做出预判。而且目前AI大模型还不能做到足够的洞察,因此利用AI选择设计模式的方面还需要慎重。另外软件开发的语言选择和基础架构也很重要,框架的选型和类库的封装也都是设计的重要部分。


原创 | 作者 | 薛丹,国防科技大学博士,资深程序员。版权所有,转载须联系授权并注明来源。

 

Logo

低代码爱好者的网上家园

更多推荐