程序员代码进化指南,你也是这样一步步来的吗?

猿 份

因程序汇聚 因猿份相识

写代码虽然大多数时候是个体力活,但不可否认,也需要一点品位。

品味就仿佛是一段代码的点睛之笔,有品位的代码层次分明,逻辑清晰,看起来赏心悦目,让人不由得感叹背后码农的智慧和巧思,成为码农圈里“别人家的程序员”,从此名垂青史。

提升代码品味也是一个“前人栽树后人乘凉”利国利民的好事情,当你出现了bug需要调整,或是离职转接工作,一段优秀的代码摆在眼前,手起刀落刷刷刷解决问题,微微一笑,深藏功与名。

可能有些童鞋会觉得代码质量很重要,但当后来写业务写多了,你会觉得如果连代码正确都做不到,又谈何代码质量。

最后你可能幡然醒悟了,这世上很难有bugfree 的代码,当出现bug的时候,好代码比烂代码会好改很多。

小渡今天就和大家讨论下什么是好代码,毕竟一个不知道什么样的代码是好代码的人是不可能如有神助写出好代码的,写代码可以搜索复制黏贴三板斧,写好代码却是必须刻意练习的。

要提升代码的品味首先要明确什么是好代码,敲黑板!!

代码的规范性:

虽然一百个人眼中有一百个哈姆雷特,每个人编程的方法都大相径庭,但是万变不离其宗的是必须要遵循代码的规范性,如为程序写注释、代码对齐……无论是函数名、变量名,都必须按照一定的规则起名,以便日后审核查找。

很多人觉得代码嘛,只要能顺利运行起来就可以,要求那么高是浪费时间,但是所有注释掉的代码块、未使用的变量和无法到达的的代码才是真的垃圾。他们就像在对读者说,“我不关心这段代码”。

这样的恶性循环一旦开始,日复一日,死代码最终会埋葬你的代码。这正是经典的破窗效应。所以必须要遵循规范,找出并干掉死代码。虽然不需要把精力主要放在这里,但一定要时时留意。

代码的对称性:

还有一条实践经验能给所有代码的可读性带来诗一般的润色那就是对称性

这条来自KentBeck的《实现模式》一书,书中说到:代码中的对称性是说,同样的思想在任何地方都使用同样的实现。不过说起来容易做起来难。

对称性体现了编程的创造性。它是许多其他实践的基础:命名、结构、对象、模式等。不同语言之间、不同代码之间和不同团队之间对于对称性的定义都可能不一样。

因此,你需要花上许多年去追求对称性。但是,一旦开始在代码中使用对称性,就会迅速呈现纯粹的形式,代码的形状也会迅速变好。

逻辑清晰

编程的思路当然也重要。我们日常生活中,逻辑清晰的人三言两语就直击要害,逻辑混乱的人兜兜转转还是云里雾里。代码也一样。

有些糟糕的代码是糟糕在啰嗦,一个判断能搞定的事情它可能要变着法判断两三次。这种呢,就是本身思路不简洁,写出来的代码自然也简洁不了,只能努力提高自己的逻辑能力。

另外,程序员在写代码的时候需要考虑一点就是所谓的代码模块化,代码模块化可以帮助程序员更好的用两种方法来理解软件系统。

第一,模块化能够创造出一定层次的抽象感,在没有完全理解所有细节的情况下也能想象出系统的模型。比如,程序员正在构建一个商业系统,可能会考虑到信用卡处理模块,然后观察这个模块和其余代码有什么联系,根本不用考虑信用卡处理模块的所有详细内容。

第二,模块的详细说明,这个详细说明是不会和别的模块内容混淆的,就像每个卡只有一个卡号是一样的。

思维导图就是训练和培养逻辑一个很好的方法,写代码时边理顺逻辑遍绘制导图,不断修缮,主要考虑以下问题:

传入的参数是什么

涉及的表有哪些

表为什么这么设计

表之间的关系是咋样的

中间件起到什么样的作用

程序结束的标志是什么

磕磕碰碰,中间可能还有不懂,实在琢磨不透,问问有经验的人。

未雨绸缪

DefensiveCoding指一些可能会出错的情况,如变量的初始化等,没人能保证代码一点不出错,大神们能做到的是要考虑到出现错误情况下的处理策略。

测试时要多运行几个线程。有些程序在一个线城下运行是正常的,但是在多个线程并行运行时就会出现问题;而有些程序在一个CPU运行几个线程是正常的,但是在多个CPU下运行时就会出现问题,因为单CPU运行线程只是狭义的并行,多CPU一起运行程序,才是真正的并行运算。应该防患于未然,做好弥补的打算。

反复和优化

简单的实现业务需求,对一个优秀的程序员来说,这些远远不够。只能实现需求,你的可替代性就强,核心竞争力就弱。因为随便找个对语言熟悉的人,都可以完成你的任务。

所以程序员必须花精力思考如何实现自己的“不可替代性”,在程序员这个行业,如果你把自身的优势定位在“能加班”“敢拼命”上。随着年龄的增长,你就会发现工作越来越力不从心,甚至有被新人淘汰的风险。

技术行业还是靠技术说话,如果你能清楚地认识到这一点,你会发现:时间带给你的不应只是年龄,你拥有的经验和技术积累、在工作中习得的知识这些都是难以被取代的

最后还可以多看看官方或者大厂的StyleGuide,平常多注意空格换行缩进命名风格等等,装个优秀的格式化插件也好。

只有把以上的标准都做到最后才能来到升级打怪的最后一关,提升风格。

长得好看的人是有特权的,长得好看的代码自然也有。

提升风格是一个需要漫长的积累和摸索的过程,多吸收老师、前辈的经验,养成良好的编程习惯,明确清晰的代码逻辑,都是提升代码风格的必经之路。