为什么代码会有好坏?
这是一个知友提出的问题。面对这样的提问,相信每个程序员都会有自己独特的经历来验证代码好坏。相对来说,什么是好代码并不是一个简单能衡量的, 但是一段“烂代码”却有一千种不同的样子。
于是,我们请来了鉴释的工程师为大家深入浅出地回答这个问题:
问:你见过最烂的代码长什么样子?
答:与其说最烂的代码长什么样子,倒不如聊聊为什么代码有好坏?什么才是好代码?
场景 1:
程序员 1:代码写的太烂怎么办?
程序员 2:能跑吗?能跑就没问题。
程序员 1:能跑是指程序能跑,还是我能跑?
程序员 2:……
程序员 2:有一个能跑就行!
为什么代码有好坏 ?
对于一个程序员的一生,都在追求写“更好的代码“。可是实际上,代码写的好坏, 除了和程序员的水平有关,还和代码(语言)本身有关。
对于绝大多数程序员来说, 一般是不会质疑语言本身是否有问题的。可是在计算机语言的发展历程中,每一门语言都是不断演进与发展的。纵观现行主流的编程语言 C/C++,Java,Python,C#, JavaScript,汇编, PHP 等等,不难发现, 每一次语言的版本迭代都会发布一些新的标准,新的 API/Function/Method,甚至会公布一些“语言自身的 Bug“, 比如过时的函数, 不安全的方法, 废弃的接口等等。所以,不难发现, 代码的好坏是和编程语言自身脱离不了关系的。
可是另一方面,更重要的是, 不论语言怎么发展, 代码的好坏更依赖于程序员的水平。如何能够写更好的代码取决于算法,数据结构和功能的设计。写代码就像建一座房子,房子质量好坏的根本在于地基的设计。而地基的设计是需要经年累月的经验积累和对于更好的不断追求。
“一千个读者就有一千个哈姆雷特”。事实上, 同一个功能, 一千个程序员就有一千种不同的代码。而这一千种代码里面的好坏就取决于谁的算法,数据结构设计的更合理,谁的函数/接口用的更合理,谁的逻辑关系更合适。这里面每一个关键的环节都对于代码的好坏有不同的影响。很难说什么样的代码是好的,但是如果算法和数据结构设计混乱,程序逻辑复杂,使用不计性能的函数/接口等, 实现出来的代码无论从代码本身,还是程序跑起来的性能,都是“烂代码”
什么是好代码?对于一段代码来说,基本目标是要跑的通且跑的对,中级目标是要跑得快性能好, 终极目标则是跑的最快性能最好。
作为一名程序员,回顾自己对于代码好坏的认知也是不断发展的。最初,觉得能实现功能就很好;后来,觉得会用高级函数/写法或者能实现复杂逻辑的很好;再后来,觉得能把所有复杂逻辑都拆分成一个一个简单的不能再简单的实现很好。
不难发现,到那些真正走在程序员食物链顶端的存在,都是在追求将所有的问题都化繁为简,简化到 1+1=2 的实现逻辑。
所以,什么是好代码?好代码就是不论多复杂的算法,代码逻辑看过去一定是一个又一个简单的代码逻辑。
看一段好的代码就像读一本好书,看数据结构的设计就像在看书的目录一样,每一个数据结构的定义都在清晰的指示着代码要操作的各种结构和成员变量。看算法的实现就像在看正文一样,描绘着对于每个元素的操作过程及结果。
所以一个好的代码实际上是有一些标准的:
好的数据结构设计:结构独立,高层次的抽象,单一的属性,封装清楚
好的算法结构设计:独立的接口,抽象简单的实现,逻辑简单清晰的设计
好的代码实现规范:统一的代码风格,清晰的注释
一个好的代码实际上能带给程序员的好处也有很多:
1. 易于其他人理解代码;
2. 易于其他人交接或者维护代码;
3. 易于在现有代码基础上优化性能或开发功能;
4. 易于调试发现和修改 Bug;
5. 有效的减少 Bug 和代码错误;
想写好的代码是不容易的, 除了遵循好的规范,依然有很多其它方面的技巧可以帮助提高代码质量,比如要多了解语言的特性和发展、要跟进语言的发展, 用更好更高效的编程方法;用更安全更高效的函数/特性;用更优更快的框架。同时,还需要了解常见的问题和 Bug;避免用不安全不好的代码实现,避免重复走到其他人已经走过的“坑”,从不好的方面学习如何不写“烂代码”。
最重要的终结方法:
手不能停!不能放弃对于好代码的追求。所以,没有最好的代码,只有更好的代码!
评论